Unary math Towers of Hanoi in naked (D)ASH and BASH
The following solution assumes neither BASH extensions, nor any external executables. Hence it could be ran from a preboot environment like a frugal initrd. A slight compromise was to use unary math. Did you know, that you can access an animated version from Emacs by typing
M-x hanoi
?pop(){
shift
echo $*
}
top(){
echo $1
}
print_towers(){
echo "a=[" $a "], b=[" $b "], c=[" $c "]"
}
hanoi(){
[ "$n" ] || return
local ln
ln=$(pop $n)
n=$ln
hanoi $1 $3 $2
print_towers
echo "$1 -> $2"
eval $2=\"$(eval top \$$1) $(echo \$$2)\"
eval $1=\"$(eval pop \$$1)\"
n=$ln
hanoi $3 $2 $1
}
main(){
a="1 2 3 4 5"
b=
c=
n=$a
hanoi a b c
print_towers
}
main "$@"
Lovely blog you haave
ReplyDelete