パスワードを忘れた? アカウント作成
7047 story

「ハノイの塔」解法プログラム、108変化 41

ストーリー by Oliver
よりどりみどり 部門より

dseg 曰く、 "本家/.の記事より。 あるプログラムを幾つかの言語で書いてみるというのは一般的だけど、なんと108ものやり方書いた人が現れた。 お題は「ハノイの塔」、19世紀にフランスの数学者、リュカが考案した古典的なパズルだ。
108もの解法のその殆どは、個別の言語を使ったもので、中にはCOBOL、Webサービス、恐ろしげなsedスクリプトなんてものもある。 更には、Sendmail(謎)ICMPエコーのシーケンス番号で答を返すPINGサーバなど強烈にわけのわからない実装まである。LOGO のスクリプトもやはりちゃんとあった :)
尚、パズルを解くプログラムは、再帰を利用する形になる。昔解いた事のある方も、ちょっとチャレンジしてみるのも吉かと。Emacsen使いな方は M-x hanoi もお試しあれ"

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • 108 (スコア:3, おもしろおかしい)

    by Anonymous Coward on 2003年12月12日 1時19分 (#452903)
    煩悩の数だけということでしょうか?
    • Re:108 (スコア:4, 参考になる)

      by bero (5057) on 2003年12月12日 6時17分 (#452954) 日記
      偶然にしてはできすぎと思ったが、FAQ [kernelthread.com]によると

      Are you aware of the significance of the number 108 in Hinduism?

      Yes, I am.

      とのことで、ヒンズー教が元ネタらしい。
      仏教の煩悩との関係は不明だが、無関係ではなかろう。

      「どこぞの寺院でバラモン僧がハノイの塔を解いていて、解き終わると世界が滅亡する」という話(もちろん創作だが、そういうフレコミで紹介された)に出てくるヒンズー教にかけているのだろう。
      親コメント
      • Re:108 (スコア:2, 参考になる)

        by hitopin (2384) on 2003年12月12日 9時07分 (#452993)
        「梵天の塔」のことだよね。
        その昔、「孔子暗黒伝」でみました。
        宇宙は「成劫」「住劫」「壊劫」「空劫」の四つの周期から成り立っており、パズル(?)を解き終われば「空劫」となり、宇宙の周期は一巡してまたはじまる、というものです。

        「108」の由来については、どのような本意か解りませんが、ググったところ、以下のような記述のあるサイト [www.ne.jp]を見つけました。

        >タイだかどっかのお寺では,64枚だか108枚だかのペグでハノイの塔を解くと悟りが開けるらしい。

        まあ、インド文化圏では「108」という数字そのものがよく使われる数字みたいですけどね。
        親コメント
        • Re:108 (スコア:2, 参考になる)

          by Ryo.F (3896) on 2003年12月12日 10時27分 (#453030) 日記
          人生に苦しみあり。この根本的なものを四苦という。即ち、生・老・病・死。あるいは、これに更に四つの苦しみ、愛別離(あいべつり)・怨憎会(おんぞうえ)・求不得(ぐふとく)・五陰盛(ごおんじよう)を加え、八苦という。
          この四苦と八苦から、百と八の煩悩が生まれると言う。即ち、しく三十六とはっく七十二を足して、百八と(4*9+8*9=108)。
          親コメント
  • by Fatalwedge (6623) <fatal@fuurai.org> on 2003年12月12日 1時43分 (#452911) 日記
    どうしてもTHcomp [win.ne.jp]を思い出してならない。
  • by Knagi (13439) on 2003年12月12日 1時23分 (#452905) 日記
    としても活用できそうです。
    # それにしてもこんなにあるとは。
  • 昔つくったヤツ [xrea.com]ですが、やはりこれは「解く」ではないですよねぇ?(汗)

  • by T.Sawamoto (4142) on 2003年12月12日 2時04分 (#452920)
    リストになさげなので、DOS / WindowsのBATを書いてみました(笑)
    Nは8までしか対応してませんけど(^^;)
    一応、再帰使ってます~。

    hanoi.bat:

    @echo off
    if "%1" == "" goto help
    set n=%1
    set from=1
    set to=3
    set using=2
    if "%2" == "" goto label1
    set from=%2
    set to=%3
    set using=%4
    :label1
    if "%n%" == "0" goto exit
    set n_1=0
    if "%n%" == "1" goto label2
    set n_1=1
    if "%n%" == "2" goto label2
    set n_1=2
    if "%n%" == "3" goto label2
    set n_1=3
    if "%n%" == "4" goto label2
    set n_1=4
    if "%n%" == "5" goto label2
    set n_1=5
    if "%n%" == "6" goto label2
    set n_1=6
    if "%n%" == "7" goto label2
    set n_1=7
    :label2
    %comspec% /c "hanoi.bat %n_1% %from% %using% %to%"
    echo move %from% - %to%
    %comspec% /c "hanoi.bat %n_1% %using% %to% %from%"
    goto exit
    :help
    echo usage: hanoi N
    :exit
  • by tact (2632) on 2003年12月12日 2時11分 (#452922)
    > 尚、パズルを解くプログラムは、再帰を利用する形になる。

    108ものやり方 [kernelthread.com] のリストで、赤地に白で N と書かれたものは再帰を使わない解法ですね。
    恐ろしげなsedスクリプト [kernelthread.com] も再帰を使っていません。
  • by teltel (1423) on 2003年12月12日 2時27分 (#452927) 日記
    TEX バージョンと、dc のやつかな。
    BASIC のには、コメント部分にBill Gates の公開書簡が張り付けてあったりするんだが、いったい全体どうして。
  • アルゴリズム云々じゃないけど、昔X68k用のもので、アセンブリ言語で
    書かれたプログラムをアセンブルして、実行形式(.xではなく.r)にした
    ものをtypeで画面に表示させたらおもむろにハノイの塔が始まるという
    のがありました。

    一見それっぽいコードなのですが、功名にエスケープシーケンスを埋め
    込んでいたのでしょうね。非常に感動したのを覚えています。

    そのファイルを実行して何が起こるのかは覚えてません(^^;)

    #Oh!Xに掲載気譴討燭鵑世辰燭?福?
    • 懐かしい…アセンブラのマクロ展開が再帰的に行われるようになっているので、
      それを利用したものです。ハノイの塔を解くのはそのソースじゃなくてアセンブラ
      自身だというのがミソです。
      「ディスクを1枚移動する」というマクロの中身が、.dc.b で「エスケープ
      シーケンスを使ってディスクが移動しているように見える文字列」を生成する
      ようになっていて、アセンブル時にそのマクロが再帰的に展開されることで
      ハノイの塔を解いているように見える文字列が.dc.bで生成されるわけです。

      実行形式を.rに変換する必要があったのは、実行ファイルに含まれるヘッダなどの
      余計な情報を取
  • by saitoh (10803) on 2003年12月12日 10時37分 (#453044)
    sendmail.cfって、1~9の入力しか解けない。 入力の数値を、対応する個数のピリオドに変換するところが 1桁の数字にしか対応していないからだけど、なんだかなぁ。
  • by 306m5 (11617) on 2003年12月12日 11時20分 (#453067)
    あたりにグラフィカルな出力を期待してしまいましたが、print 出力のみのようですね。

    ( move disk from ) print print ( ==> ) print print (\n) print
  • by Anonymous Coward on 2003年12月12日 1時43分 (#452910)
    kernel moduleまである…
    ベンチマークとか負荷耐性のテストに利用できないかなぁ
  • by Anonymous Coward on 2003年12月12日 2時42分 (#452929)
    「ぴゅう太」の日本語Basicでお願いします。
  • by Anonymous Coward on 2003年12月12日 7時11分 (#452965)
    ABC 初めに3つ並んだ棒の位置に注目する。

    A C 等幅に並んだ中央の棒を前後に√3倍移動する。
     B  すると書く点は正三角形の位置し、各棒の距離は等距離になる。

    B A 全体を120°回転させ、
     C  中央の棒を√3倍戻すと 
    BCA なんと、塔が移動している.....

    110
    ABC 裏から見る。鏡で見る

    #汚いと言われようがこれもとんちなのでAC
typodupeerror

皆さんもソースを読むときに、行と行の間を読むような気持ちで見てほしい -- あるハッカー

読み込み中...