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 件のコメント:

コメントを投稿

Haskell Process

Haskellの System.Processは便利ですが、問題もあります。 単一スレッドでの逐次処理を保証していない。(想像です。) 次のようなスクリプトを書いてみた。 --a.hs main = print [1..10] --t.hs import Sy...