Гомоку або П'ять поспіль - настільна гра, яку грають два гравці на сітці з чорно-білими каменями. Хто вміє розмістити 5 каменів поспіль (горизонтальну, вертикальну чи діагональну), виграє гру.
Правила
У цьому KoTH ми будемо грати правило Swap2, тобто гра складається з двох фаз: На початковій фазі два гравці визначають, хто йде першим / хто грає чорний, після чого вони розміщуватимуть один камінь у кожному раунді, починаючи з гравця хто вибрав чорне.
Початкова фаза
Нехай гравці A & B і A відкриють гру:
- Поміщає два чорних і один білий камінь на дошці
- B може вибрати один з наступних трьох кроків:
- Гравець B вирішує грати в чорний колір: початкова фаза закінчена
- Гравець В вирішує поставити білий камінь і грає в білий: початкова фаза закінчена
- Гравець B вирішує зіграти один чорний та один білий камінь: A вибирає колір
Фаза гри
Кожен гравець розміщує один камінь свого кольору на дошці, починаючи з гравця, який грає в чорний колір, і так триває, поки не буде більше вільних місць для гри (у цьому випадку це нічия) або одного гравця вдається зіграти каменів у рядок (у такому випадку виграє той гравець).
Ряд означає горизонтальну, вертикальну або діагональну. Виграш - це виграш - не має значення, чи вдалося гравцеві забити більше одного ряду.
Правила гри KoTH
- кожен гравець грає один проти одного гравця двічі:
- спочатку буде випадково вирішуватися, хто йде першим
- У наступній грі першим виходить гравець, який повинен був грати останнім
- виграш вартує 2 бали, нічия 1 та програш 0
- мета - набрати якомога більше балів
Ваш бот
Зробити це завдання доступним для якомога більшої кількості мов, введення / виведення здійснюватиметься через stdin / stdout (на основі рядків). Програма судді підкаже вашу програму, надрукувавши рядок на stdin вашого бота, і ваш бот надрукує один рядок до stdout .
Як тільки ви отримаєте EXIT
повідомлення, вам буде надано півсекунди, щоб закінчити писати у файли, перш ніж суддя вб'є процес.
Випадковість
Щоб зробити турніри перевіреними, суддя використовує насіннєву рандомізацію, і ваш бот повинен зробити це теж з тієї ж причини. Боту буде надано насіння через аргумент командного рядка, який він повинен використовувати, зверніться до наступного розділу.
Аргументи
Бот отримує два аргументи командного рядка:
- ім'я противника
- насіння для випадковості
Стан користувача
Оскільки ваша програма завжди буде запускатися новою для кожної гри, вам потрібно буде використовувати файли для збереження будь-якої інформації, яку ви хочете зберегти. Вам дозволяється читати / писати будь-які файли або створювати / видаляти підпапки у вашому поточному каталозі. Вам заборонено отримувати доступ до жодних файлів у будь-якому батьківському каталозі!
Формат вводу / виводу
BOARD
((X,Y),COLOR)
X
Y
COLOR
"B"
"W"
SP
XY
(X,Y)
|
На початковій фазі є три різні види повідомлень:
Prompt (judge) -> Answer (bot)
"A" SP "[]" -> XY XY XY
"B" SP BOARD -> "B" | "W" SP XY | XY XY
"C" SP BOARD -> "B" | "W"
- Перше повідомлення вимагає трьох кортежів, перші два - це положення чорних каменів, а третє - положення білого.
- Друге повідомлення просить або:
"B"
-> вибрати чорний"W" SP XY
-> виберіть біле і помістіть білий камінь наXY
XY XY
-> розмістіть два камені (перший - чорний, другий - білий)
- Останній просто запитує, в який колір ви хочете грати
Після цього розпочнеться звичайна гра, і повідомлення стануть набагато простішими
N BOARD -> XY
N
XY
Є ще одне додаткове повідомлення, яке не очікує відповіді
"EXIT" SP NAME | "EXIT TIE"
де NAME
ім’я бота, який виграв. Друге повідомлення буде надіслано, якщо гра закінчиться через те, що ніхто не виграє і більше немає вільних місця для розміщення каменів (це означає, що вашого бота не можна назвати TIE
).
Форматування
Оскільки повідомлення від бота можна декодувати без пробілів, усі пробіли будуть ігноровані (наприклад (0 , 0) (0,12)
, обробляються так само, як (0,0)(0,12)
). Повідомлення судді містять пробіл для розділення різних розділів (тобто, як зазначено вище SP
), що дозволяє розділити рядок на пробіли.
Будь-яка недійсна відповідь призведе до втрати цього раунду (ви все одно отримаєте EXIT
повідомлення), див. Правила.
Приклад
Ось кілька прикладів фактичних повідомлень:
A []
B [((0,0),"B"),((0,1),"W"),((14,14),"B")]
1 [((0,0),"B"),((0,1),"W"),((1,0),"B"),((1,1),"W"),((14,14),"B")]
Суддя
Ви можете знайти програму судді тут : Щоб додати бота до неї, просто створіть нову папку в bots
папці, розмістіть там свої файли та додайте файл, meta
що містить ім’я , команду , аргументи та прапор 0/1 (відключити / включити stderr ) кожен на окремому рядку.
Для запуску турніру просто запустіть ./gomoku
і налагоджуйте єдиний запуск бота ./gomoku -d BOT
.
Примітка. Ви можете знайти більше інформації про налаштування та використання судді у сховищі Github. Також є три приклади ботів ( Haskell , Python та JavaScript ).
Правила
- при кожній зміні бота * турнір буде повторюватися і гравець, який отримає найбільшу кількість очок, виграє (перший тайм-брейк)
- ви можете подати більше одного бота, доки вони не грають загальну стратегію
- вам заборонено торкатися файлів поза каталогом (наприклад, маніпулювання файлами іншого гравця)
- якщо ваш бот виходить з ладу або надсилає недійсну відповідь, поточна гра припиняється, і ви програєте цей раунд
- поки суддя (на даний момент) не виконує обмеження часу на раунд, вам рекомендується тримати витрачений час низьким, оскільки це може стати нездійсненним для перевірки всіх подань **
- зловживання помилками в програмі судді вважається лазівкою
* Вам рекомендується використовувати Github для того, щоб окремо подати свого бота безпосередньо в bots
каталог (і, можливо, змінити util.sh
)!
** У випадку, якщо це стане проблемою, про яку ви отримаєте сповіщення, зараз я б сказав, що все, що не перевищує 500 мс (це багато!), Має бути добре.
Чат
Якщо у вас є питання або хочете поговорити про цей KoTH, не соромтесь приєднатися до чату !