この課題はTic Tac Toeのゲームについてですが、トーラスでプレイします。
遊び方
必要なゲームボードを作成するには、通常のTic Tac Toeゲームボードから始めます。最初に、左端と右端を結合して、シリンダーに折ります。次に、上端と下端を結合してトーラスに折ります。これは、いくつかの動きをプレイしたこのようなゲームボードの簡単な視覚化です(シックペイントスキル!)。
トーラス上のTic Tac Toeのルールは、通常のTic Tac Toeと同じです。各プレイヤーは、XとOを交互に配置します。行、列、または対角線に3つの同じシンボルがある最初のものが勝ちです。
トーラスの視覚化は非常に難しいため、ボードを紙に投影し直します。これで、通常のTic Tac Toeとしてゲームをプレイできます。唯一の違いは、壊れた対角線で3つの同じシンボルで勝つことができるということです。たとえば、プレーヤー1(X)は次のボードに勝ちます。これは、トーラスのビューを少し変更することで簡単に確認できます。
興味があれば、トーラスゲームズのトーラスでTic Tac Toeをプレイできます。Windows、Mac、Androidのバージョンがあります。
最適なゲーム
この課題では、最適なゲームに興味がありました。最適なゲームとは、両方のプレイヤーが最適な戦略をプレイするゲームです。通常のTic Tac Toeボードでは、最適なゲームは常に引き分けになります。トーラスボードでは、常に最初のプレイヤーが勝ちます。実際、トーラスボードでのゲームは引き分けに終わることはありません(プレイヤーが最適でない場合も)。
最適な戦略は本当に簡単です。
- シンボルを配置して勝つことができるなら、それをしてください。
- それ以外の場合、対戦相手が1つの行/列/対角線に2つのシンボルを持っている場合は、ブロックしようとします。それ以外の場合は、必要なことを行います。
- それ以外の場合は、必要なことを行います。
最適なゲームはすべて7つの動きで構成されており、これらの動きは次のように説明できます。
- プレーヤー1は、ボード上の任意の場所にXを配置します(9つの選択肢)
- プレイヤー2はボード上の任意の場所にOを配置します(8つの選択肢)
- プレーヤー1は、ボード上の任意の場所にXを配置します(7つの選択肢)
- プレイヤー2の移動は強制される可能性があり(1選択肢)、そうでない場合はOを任意の場所に配置します(6選択肢)
- プレイヤー1の移動が強制されます(1選択肢)
- プレイヤー2はフォークに引っ掛かる(プレイヤー1は2つの異なる方法で勝つことができる)ので、プレイヤー2はプレイヤー1を1つの方法でブロックする必要がある(2つの選択肢)
- プレイヤー1が最後の動きを決めて勝ちます(1選択肢)
予想されるボードには、9 * 8 * 1 * 6 * 1 * 2 * 1 + 9 * 8 * 6 * 1 * 1 * 2 * 1 = 1728種類の最適ゲームがあります。ここでは、1つの典型的な最適なゲームを見ることができます。
ボードの各セルに数字0-8
でラベルを付けると、このゲームを数字で説明できます 3518207
。最初に、Xはセル3(中央行、左列)に配置され、セル5のO(中央行、右列)、セル1のX(上部行、中央列)、...
この数字表記を使用して、注文を自動的に生成しました。これで、1728の最適なゲームをすべて並べ替えて、リストを取得できます。
Game 0000: 0123845
Game 0001: 0123854
Game 0002: 0124735
Game 0003: 0124753
Game 0004: 0125634
...
Game 0674: 3518207
...
Game 1000: 5167423
Game 1001: 5167432
Game 1002: 5168304
...
Game 1726: 8765034
Game 1727: 8765043
チャレンジ
このリストはあなたの仕事の一部です。k
0から1727までの1つの数字を受け取りk
、ソートされたリストの数字表記でth番目のゲームを返す必要があります。
数字k
(整数)を受け取る関数またはプログラムを作成して、対応するゲームを計算します。STDIN、コマンドライン引数、プロンプトまたは関数引数を介して入力を読み取り、結果(7桁)を読み取り可能な形式(たとえば0123845
または[0, 1, 2, 3, 8, 4, 5]
)で印刷するか、文字列(人間が読み取り可能な形式)または整数(すべてを含む10を基数とする数字、または任意の配列/リスト形式。
チャレンジタイプはcode-golfです。したがって、最短のコードが優先されます。