ハノイの塔が何であるかわからない場合は、簡単に説明します。3本のロッドと、サイズの異なるディスクがいくつかあります。最初は、すべてのディスクが最初のタワーに並べられています。最大のものは一番下にあり、一番小さいものは一番上にあります。目標は、すべてのディスクを3番目のロッドに持ち込むことです。簡単に聞こえますか?キャッチは次のとおりです。他のディスクより小さいディスクの上にディスクを配置することはできません。一度に1枚のディスクを手に持って別のロッドに移動することができ、ディスクをロッドに置くことはできますが、テーブルではなく、卑劣な野郎です。
asciiのサンプルソリューション:
A B C
| | |
_|_ | |
__|__ | |
A B C
| | |
| | |
__|__ _|_ |
A B C
| | |
| | |
| _|_ __|__
A B C
| | |
| | _|_
| | __|__
チャレンジ
A、B、Cと呼ばれる3本のロッドがあります(それが役立つ場合は、それぞれ1、2、3と呼ぶこともできます)最初は、n個のディスクすべてがロッドA(1)にあります。
あなたの課題は、ハノイの塔の解決策を検証することです。以下を確認する必要があります。
- 最終的に、n個のディスクはすべてロッドC(3)にあります。
- 特定の状態の任意のディスクについて、その下に小さなディスクはありません。
- 空のロッドからディスクを取り出そうとしたり、ディスクを存在しないロッドに移動したりするような明らかなエラーはありません。
(ソリューションは最適である必要はありません。)
入力
プログラムは2つの入力を受け取ります。
- ディスクの数n(整数)
次のタプルのセットで構成される移動:(現在最上位のディスクを取得するタワー)、(このディスクを取得するタワー)各タプルは移動を指します。それらの表示方法を選択できます。たとえば、上記のasciiで描いたn = 2の解を表す次のような方法です。(テストケースでは最初のものを使用します。見た目が簡単だからです):
「A-> B; A-> C; B-> C」
[( "A"、 "B")、( "A"、 "C")、( "B"、 "C")]
[(1,2)、(1,3)、(2,3)]
「ABACBC」
[1,2,1,3,2,3]
出力
「チャレンジ」の下で見つけることができる条件が保持される場合、真実。
偽物、そうでない場合。
テストケース:
正しい:
n=1, "A->C"
n=1, "A->B ; B->C"
n=2, "A->B ; A->C ; B->C"
n=2, "A->C ; C->B ; A->C ; B->C"
n=2, "A->C ; A->B ; C->B ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=4, "A->B ; A->C ; B->C ; A->B ; C->A ; C->B ; A->B ; A->C ; B->C ; B->A ; C->A ; B->C ; A->B ; A->C ; B->C"
偽:
@MartinEnderが提案した3番目、@ Joffanが7番目
n=1, "A->B"
n=1, "C->A"
n=2, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=2, "A->B ; A->C ; C->B"
n=2, "A->C ; A->B ; C->B ; B->A"
n=2, "A->C ; A->C"
n=3, "A->B ; A->D; A->C ; D->C ; A->C"
n=3, "A->C ; A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->B ; B->C ; B->A ; B->C ; A->C"
n=3, "A->C ; A->B ; C->B ; A->C ; B->A ; B->C ; C->B"
n=4, "A->B ; A->C ; B->C ; A->B ; C->A ; C->B ; A->B ; A->C ; B->C ; B->A ; C->A ; B->C ; A->B ; A->C"
n=4, "A->B ; A->B ; A->B ; A->C ; B->C ; B->C ; B->C"
これはcode-golfであり、最短のソリューションが勝ちます。標準のルールと抜け穴が適用されます。電池は含まれていません。
A->A
か?
moving discs to nonexistant rods.
ので、もちろんそうD
A=1
、B=2
、C=3
、など)?