2017年10月26日木曜日

ハノイの塔



ハノイの塔の由来や、ルール、解き方のアルゴリズムは省略します。

hanoi.hs

実質3行のプログラムです。
haskellが提供する再帰とdo記法で極めて簡潔に書くことができます。

実行例

$ runghc hanoi.hs 3
A-B
A-C
B-C
A-B
C-A
C-B
A-B

最短の解き手順を表示します。
円盤3枚の場合です。
A-Bというのは塔Aの一番上の円盤を塔Bに移動するという意味です。

GUI版


$ runghc hanoi.hs 3 | runghc guihanoi.hs 3 100

labelhanoi.hsへの第2引数はタイミングです。ミリ秒で指定します。
同じ引数を渡すのは面倒なのでhanoi という名前でスクリプトを書いておきます。
runghc hanoi.hs $1 | runghc guihanoi.hs $1 $2
$ ./hanoi 9 500



コンソール版

スクリプト

runghc hanoi.hs  $1 | runghc -XFlexibleContexts doHanoi.hs $1

実行例

./dohanoi 64

こちらも参照ください。

0 件のコメント:

コメントを投稿

myPlayer

-- pipe.hs import System.Process import System.Environment main :: IO () a:_ IO [FilePath] randomize lst = do let c = length lst ...