報奨金
No. 1(授与)
最初の有効な回答には50人の担当者を投入します
No. 2(授与)
最短の有効な回答を得るために、さらに100人の担当者を投入します。
No. 3(提出用にオープン)
有効な回答が大幅に短くなった最初の回答には200人の担当者を投入します。重要なのは、現在の最短回答の最大45%(564バイトx 0.45 = 最大254バイト)です。
ゲーム
古典的なゲーム「Nine Men's Morris」または単に「Mill」を覚えていますか?Three Men's Morrisと呼ばれるバリエーションがあり、これは変更可能な三目並べのようなものです。
ルール
これはゲームのブランクボードです。
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
はフィールドであり|–/\
、それらのフィールド間のルートを表します。
ゲームは2人のプレーヤーで再生される1
と、2
誰が各場所3は、ボード上のトークン。これは実際にすでに起こり、私たちはゲームに参加しています。1人のプレイヤーがmill
、プレイヤーの3つのトークンの縦または横の列を形成できる場合、ゲームに勝ちます。
このルールに従って、トークンは接続線に沿ってボード上で移動できます。
隣接する空の位置へ(つまり、エッジ位置から中心へ、または中心からエッジ位置へ、またはエッジ位置から隣接エッジ位置へ)
プレーヤーは、隣接する空の位置がない限り移動する必要があります。空の位置がない場合、移動はスキップされます。
チャレンジ
あなたはプレイヤーで1
あり、あなたの動きは次です。次のことを決定するプログラムまたは関数を作成します。
- あなたは2回以下の動きで勝利を強制することができます(明確な勝利)
- 対戦相手がミスを犯した場合は、2手以内で勝つことができます(勝てる可能性があります)
- あなたはより多くの移動が必要になりますので、2回の以下の移動で勝つことができないか、強制移動が勝つために相手を導くため(不可能勝つために)
必要条件
- 対戦相手を死に至らしめたとき、あなたは間違いなく勝ちますが、プログラムは有限の時間で終了しなければなりません。
- プログラムまたは関数を作成できます。
入力
プレイヤーはで表され1
、および2
。0
自由フィールドを定義します。入力を行列または配列として受け取ることができます。
明確
A B C D
2 1 0 | 2 1 0 | 1 0 1 | 1 2 2
2 1 2 | 0 1 0 | 1 0 2 | 2 1 O
0 0 1 | 2 2 1 | 0 2 2 | O O 1
A: [2,1,0,2,1,2,0,0,1]
B: [2,1,0,0,1,0,2,2,1]
C: [1,0,1,1,0,2,0,2,2]
D: [1,2,2,2,1,0,0,0,1]
可能
A B C
1 0 1 | 1 0 1 | 1 2 2
1 2 2 | 1 2 0 | 0 0 1
2 0 0 | 2 0 2 | 2 1 0
A: [1,0,1,1,2,2,2,0,0]
B: [1,0,1,1,2,0,2,0,2]
C: [1,2,2,0,0,1,2,1,0]
不可能な
A B
1 0 0 | 1 2 0
1 2 2 | 2 1 0
2 0 1 | 1 2 0
A: [1,0,0,1,2,2,2,0,1]
B: [1,2,0,2,1,0,1,2,0]
出力
あなたのプログラムはスマイリーを出力/返すはずです:
- 明確な勝利:
:)
- 可能な勝利:
:|
- 勝てない:
:(
例
2つの動きで明確な勝利:
[2][1][ ] 1. [2][1][ ]
[2][1][2] -> [2][1][2]
[ ][ ][1] [ ][1][ ]
[2][1][ ] 1. [2][1][ ] [ ][1][ ] 2. [ ][ ][1]
[ ][1][ ] -> [ ][ ][1] -> [2][ ][1] -> [2][ ][1]
[2][2][1] [2][2][1] [2][2][1] [2][2][1]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][ ][2] -> [1][ ][2] -> [1][ ][2] -> [ ][ ][2]
[ ][2][2] [ ][2][2] [2][ ][2] [2][ ][2]
2つの動きで勝つ可能性:
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][ ][1] 1. [ ][1][1] [ ][1][1] 2. [1][1][1]
[1][2][ ] -> [1][2][ ] -> [1][2][2] -> [ ][2][2]
[2][ ][2] [2][ ][2] [2][ ][ ] [2][ ][ ]
[1][2][2] 1. [ ][2][2] [2][ ][2] 2. [1][2][2]
[ ][ ][1] -> [1][ ][1] -> [1][ ][1] -> [1][1][1]
[2][1][ ] [2][1][ ] [2][1][ ] [2][ ][ ]
2つの動きで勝つことは不可能です。
[1][ ][ ]
[1][2][2]
[2][ ][1]
ボーナス
明確な勝ちが可能で、プログラムがa1:a2
(1移動)またはa1:a2,a3:b2
(2移動)のように成功への一方通行の動きを出力する場合、バイトカウントの30%を引き出すことができます。
これはコードゴルフです。バイト単位の最短回答が勝ちです。標準の抜け穴は許可されていません。
Sandboxのいくつかの欠陥を修正し、文言を改善してくれたPeter Taylorに感謝します。
[1,0,0,2,1,0,2,2,1]
では、プレーヤー2は移動できません-これはプレーヤー1の勝利ですか?