著者:中央大学 教授 飯尾淳
秋の夜長はパズルで頭のトレーニングなんていかがでしょう?今回のバーティカルバーは、3本の縦棒に登場してもらいます。3本の棒を備えた「ハノイの塔」というパズルです。皆さんも、名前くらいは聞いたことがあるのではないでしょうか。そのパズルをシェルスクリプトで解いていくことを考えます。
記事本文掲載のシェルスクリプトマガジンvol.51は以下リンク先でご購入できます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
#!/bin/bash function hanoi () { if [ $1 == 1 ]; then echo 1 else h=`hanoi $(($1 - 1))` echo $((2 * $h + 1)) fi } if [ x” $1” == x ]; then echo 'usage: ./hanoi.sh #_of_disks' exit fi echo `hanoi $1` |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/bash function hanoi () { if [ $1 == 1 ]; then # 1枚だったら,直接 dest に移動すればよい echo "move $1 from $2 to $4"; else # 2枚以上あるとき($1は底の段数を示している) # 底の上に乗っている塔($1 - 1)を # dest($4)を作業領域として # from($2)からwork($3)に移し hanoi $(($1 - 1)) $2 $4 $3; # 底の円盤をfrom($2)から dest($4)に移したうえで echo "move $1 from $2 to $4"; # work($3)からdest($4)に($1 – 1)の塔を移動する #(作業領域は from ($2)) hanoi $(($1 - 1)) $3 $2 $4; fi } if [ x"$1" == x ]; then echo 'usage: ./hanoi_move.sh #_of_disks' exit fi # A: from, B: work, C: dest hanoi $1 A B C; |