東京=トンキン=ハノイ=河内=大阪府東部

http://www.kernelthread.com/hanoi/html/ps.html のプログラムは、PostScript なのになんで動かす手順を文字で表示するだけなのだろう。
ということで PostScript でハノイの塔を解くプログラムを書いて gif アニメ化した。
以下はソース。日本語化が不完全。

%!PS
gsave
[/、 /を /と /に /が /から /を利用して] {{} def} forall
/とする {def} def
/でないなら {ne} def
/を足したもの {add} def /を掛けたもの {mul} def
/という座標に移動する {moveto} def

/最大円盤 を 5 とする
/円盤1半径 を 7.5 とする
/円盤厚さ を 7.5 とする
/最大円盤半径 を 最大円盤 と 円盤1半径 を掛けたもの とする

/動かす を {
    4 dict begin
        [/空き場所 /行き先 /元位置 /円盤] {exch def} forall
        円盤 が 1 でないなら {
            円盤 より1小さい円盤 を 元位置 から 空き場所 に 行き先 を利用して 動かす
        } if
        元位置 から 円盤 を除く
        行き先 から 円盤 を置く
        現在の状態を描く
        円盤 が 1 でないなら {
            円盤 より1小さい円盤 を 空き場所 から 行き先 に 元位置 を利用して 動かす
        } if
    end
} とする
/を除く を {1 sub 0 put} とする
/を置く を {1 sub 1 put} とする
/より1小さい円盤 を {1 sub} とする
/現在の状態を描く を {
    1 setlinecap
    円盤厚さ setlinewidth
    最大円盤半径 と 2 を掛けたもの 、 円盤厚さ と 最大円盤 に 0.5 を足したもの を掛けたもの
    という座標に移動する
    塔1 を描く
    最大円盤半径 、                   円盤厚さ と 0.5 を掛けたもの
    という座標に移動する
    塔2 を描く
    最大円盤半径 と 3 を掛けたもの 、 円盤厚さ と 0.5 を掛けたもの
    という座標に移動する
    塔3 を描く
    showpage
} とする
/を描く を {
    2 dict begin
        /塔 exch def
        最大円盤 -1 1 {
            /円盤 exch def
            塔 に 円盤 があるなら {
                円盤を描く
            } if
        } for
        stroke
    end
} とする
/があるなら を { 1 sub get 1 eq } とする
/円盤を描く を {
    /円盤半径 を 円盤1半径 と 円盤 を掛けたもの とする
    円盤半径 だけ左に移動
    円盤半径 と 2 を掛けたもの の長さの線を右に引く
    円盤半径 だけ左に移動
    円盤厚さ だけ上に移動
}とする
/だけ左に移動 を {neg 0 rmoveto} とする
/だけ上に移動 を {0 exch rmoveto} とする
/の長さの線を右に引く を {0 rlineto} とする

/塔1 を [ 最大円盤 {1} repeat ] とする
/塔2 を [ 最大円盤 {0} repeat ] とする
/塔3 を [ 最大円盤 {0} repeat ] とする
現在の状態を描く
最大円盤 を 塔1 から 塔2 に 塔3 を利用して 動かす
最大円盤 を 塔2 から 塔3 に 塔1 を利用して 動かす
最大円盤 を 塔3 から 塔1 に 塔2 を利用して 動かす
grestore