ハノイの塔

ハノイの塔でプログラミングするというのは、比較的よく見られますね。
最近ですと、FIzzBuzzでしょうか。
再帰の勉強になるということで、awk版を作成してみました。

#!/usr/bin/awk -f
# ハノイの等

BEGIN{
    ARGC == 2 ? n = ARGV[1] : n = 3;
    printf("円盤%d枚を柱1から柱2に移す方法は次の%u手です。\n",n, lshift(1,n) - 1);
    movedisk(n, 1, 2);
}

function movedisk(n, a, b){
    if(n > 1){
        movedisk(n - 1, a, 6 - a - b);
    }
    printf("円盤%d%dから%dに移す\n",n, a, b);
    if(n > 1){
        movedisk(n - 1,6 - a - b ,b);
    }
}

実行してみる

awk -f hanoi.awk
円盤3枚を柱1から柱2に移す方法は次の7手です。
円盤11から2に移す
円盤21から3に移す
円盤12から3に移す
円盤31から2に移す
円盤13から1に移す
円盤23から2に移す
円盤11から2に移す

こんなに短いプログラムで出来るなんて驚きですね!!