Bounties
№ 1 ( нагороджено )
Я закину 50 реп. За першу правильну відповідь
№ 2 ( нагороджено )
Я підкину ще 100 повторень для найкоротшої вірної відповіді.
№ 3 ( відкрито для подання )
Я закину 200 повторень за першу зі значно коротшою достовірною відповіддю. Значне значення становить не більше 45% від найкоротшої відповіді на даний момент ( 564 байт х 0,45 = макс. 254 байти ).
Гра
Ви пам’ятаєте класичну гру « Дев'ять чоловіків Морріс » чи просто « Млин »? Існує варіант під назвою Три чоловіки Морріса, який трохи схожий на змінний тик-носок.
Правила
Це порожня дошка гри:
a b c
1 [ ]–[ ]–[ ]
| \ | / |
2 [ ]–[ ]–[ ]
| / | \ |
3 [ ]–[ ]–[ ]
[ ]
є полем і |–/\
представляють маршрути між цими полями.
У гру грають два гравці 1
і 2
кожен розміщує по 3 жетони на дошці. Це насправді вже відбулося, і ми в грі. Гра виграється, якщо один гравець може сформувати a, mill
який є вертикальним або горизонтальним рядом з 3 жетонів гравця.
Токени можна переміщувати на дошці по сполучних лініях, згідно з цим правилом:
До будь-якого сусіднього порожнього положення (тобто від краю краю до центру, або від центру до крайового положення, або від крайового до суміжного крайового положення
Гравець повинен зробити хід, якщо немає сусідньої порожньої позиції, і в цьому випадку хода пропускається.
Змагання
Ти гравець, 1
і твій крок наступний. Напишіть програму або функцію, яка визначає:
- ви можете примусити виграш за допомогою двох та менших рухів ( певний виграш )
- Ви можете виграти з 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][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]
Можлива перемога в два ходи:
[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][ ][ ]
Виграти неможливо двома ходами:
[1][ ][ ]
[1][2][2]
[2][ ][1]
Бонус
Якщо можливий певний виграш і ваша програма виводить ходи в один бік до успіху, як a1:a2
(1 хід) або a1:a2,a3:b2
(2 ходи), ви можете зняти 30% від кількості байтів.
Це кодовий гольф - тому найкоротша відповідь у байтах виграє. Стандартні лазівки заборонені.
Завдяки Пітеру Тейлору, який виправив деякі недоліки та покращив формулювання в « Пісочниці» .
[1,0,0,2,1,0,2,2,1]
, гравець 2 не може рухатися - це виграш для гравця 1?