Давайте играть в игру мета-крестики-нолики!
Это турнир по методу крестики-нолики в стиле « король горы» . Правила Meta Tic-Tac-Toe следующие:
Все обычные правила крестики-нолики применяются.
Для создания одной мастер-доски предусмотрено девять досок. Вот так:
0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8 ======================== 0|1|2 || 0|1|2 || 0|1|2 ----- || ----- || ----- 3|4|5 || 3|4|5 || 3|4|5 ----- || ----- || ----- 6|7|8 || 6|7|8 || 6|7|8
доска 0 относится к верхней левой доске, доска 1 относится к верхней средней доске ... вот так
0|1|2 ----- 3|4|5 ----- 6|7|8
Если я скажу «доска 3», тайл 4, это означает центральную плитку доски в середине слева.
Вам разрешено двигаться только на одной из небольших досок.
Если вы выиграете одну из небольших досок, вся эта доска считается вашей плиткой.
Если одна из досок заполняется до того, как один из ботов ее выиграл, она считается плиткой nobody.
Тот, кто выигрывает мастерскую доску, побеждает!
Тем не менее, есть важный поворот. Скажем, я иду на доске 7, клетка 2. Это означает, что на вашем ходу вы можете идти только на доске 2. Затем, допустим, вы идете на доску 2, клетку 5. Теперь на моем ходу я могу пойти только на доске 5. Допустим, доска 1 заполнена. (Осталось больше мест, или один из нас уже выиграл 1-ю доску). Теперь, если я перейду на 5-ю доску, тайл 1, вы можете перейти на любую доску, какую захотите.
Эти правила можно рассматривать как:
- Вы должны играть на доске, соответствующей позиции, сыгранной предыдущим игроком.
- Если Х играет на доске 2, тайл 5; О должен играть на доске 5
- Если целевая доска полна (ничья) или уже имеет победителя, следующий ход будет неограниченным.
- Доска с победителем не может быть разыграна, даже на ход без ограничений.
Если это немного сбивает с толку, вы можете попробовать это онлайн здесь. (не забудьте переключиться с «первых выигрышей плитки» на «3 плитки подряд»)
Теперь вот правила вызова.
Вы должны написать бота, который играет в эту игру.
Бот 1 - это Х, и он должен идти первым. Он будет вызываться с этими аргументами командной строки (без содержимого в скобках):
X (whose turn) --------- (board 0) --------- (board 1) --------- (board 2) --------- (board 3) --------- (board 4) --------- (board 5) --------- (board 6) --------- (board 7) --------- (board 8) --------- (master board) xx (last move)
Первый символ представляет, кто бот. В этом случае бот 1 играет за X. Следующие 9 строк относятся к 9 доскам. 11-я строка относится к основной доске. «Хх» - последний ход. Теперь бот1 должен напечатать два числа от 0 до 8. Номер 1 - доска, на которой движется ваш бот, а номер 2 - фишка на этой доске. Контроллер будет отслеживать этот ход. Допустим, бот 1 печатает 38. Теперь доска будет выглядеть так:
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | |
и bot2 будет вызываться с этими аргументами:
O --------- --------- --------- --------X --------- --------- --------- --------- --------- --------- 38
Теперь бот 2 должен двигаться на доске 8 (потому что бот1 поместил х в клетку 3). Допустим, бот2 печатает 84. Теперь доска выглядит следующим образом.
| | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | | || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || | | ----- || ----- || ----- | |X || | | || | | ========================== | | || | | || | | ----- || ----- || ----- | | || | | || |O| ----- || ----- || ----- | | || | | || | |
теперь bot1 будет вызываться с этими аргументами:
X --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- 84
Теперь бот1 должен переместиться на доску 4. Однако бот1 - это непослушный маленький бот, и он решает переместиться на доску 3. Он печатает «30». Плата не меняется вообще. Мастер бот отслеживает это. Теперь bot2 будет вызываться с этими аргументами:
O --------- --------- --------- --------X --------- --------- --------- --------- ----0---- --------- xx
Теперь бот 2 может ходить куда угодно (кроме 38 и 84, конечно). Это продолжается до тех пор, пока кто-то не выиграет 3 из главных досок подряд. Затем идет второй матч, в котором bot2 - это X и он идет первым.
Это повторяется до тех пор, пока каждый бот не сыграет с каждым другим ботом.
счет
Скоринг работает так:
Победитель каждого матча получает 100 + number of open spots
очки. Таким образом, более ценно, если ваш бот быстро побеждает. Каждый раз, когда ваш бот делает неверный ход, он теряет 1 очко. Если после 250 раундов ни один бот не выиграл, каждый бот теряет 10 очков, и мы переходим к следующему раунду.
Все будет помещено в каталог, который содержит
Контроллер бот. Это программа на C ++, которую я написал. Вы можете посмотреть исходный код бота контроллера здесь. Пожалуйста, дайте мне знать, если вы видите что-то не так с контроллером.
Текстовый файл с именем
instructions.txt
Этот файл будет выглядеть примерно так:[Total number of bots that are competing] [bot1Name] [bot1 command to run] [bot2Name] [bot2 command to run] ...
Папка для каждого бота. Эта папка будет содержать вашу программу (будь то скрипт или бинарный файл) и ОДИН текстовый файл с именем,
data.txt
который ваш бот может читать и писать, что хочет.
Технические характеристики и разъяснения правил
Любой бот, который пытается что-то прочитать / написать из любой точки, находящейся вне его папки, будет исключен из игры.
Ваша программа должна быть в состоянии работать на MacBook под управлением Yosemite. В настоящее время поддерживаются следующие языки: Python (2.7.9 и 3.4.2), C / C ++, target-C, perl, ruby, bash, PHP, Java, C #, javascript и Haskell. Их намного больше, но это только те, о которых я могу думать прямо сейчас. Я добавлю больше со временем. Если вы хотите соревноваться на определенном языке, напишите мне или оставьте комментарий, и я добавлю его в список, если это возможно.
Если доска выиграна, но все еще есть место, вы все равно не сможете перейти в одно из открытых мест.
Обратите внимание, что рабочим каталогом вашего представления будет каталог, содержащий контроллер и все остальные боты, а НЕ каталог, содержащий ваш бот.
Пожалуйста, напишите вместе с кодом вашего контроллера бота правильную команду для компиляции (если применимо) и запуска вашего бота. Большая часть этого будет сделана из терминала OS X, который довольно похож на терминал Linux.
Боты должны завершить менее чем за секунду. К сожалению, я не достаточно компетентен, чтобы добавить таймер в бот контроллера. Тем не менее, я буду вручную время ботов.
Полученные результаты!
Ну, я был прав. Я забыл проверить бот контроллера, чтобы проверить, заполнен ли masterBoard. Если masterBoard заполнен, то КАЖДЫЙ ход недействителен, но он продолжает вызывать ботов, поэтому, вероятно, было так много недействительных ходов. Я исправил это сейчас. Вот официальные результаты с самой последней версией всех ботов.
Bot 1, goodRandBot, has 1 wins and made 0 illegal moves, for a total of 133 points.
Bot 2, naiveBot, has 3 wins and made 48 illegal moves, for a total of 361 points.
Bot 3, depthBot, has 5 wins and made 0 illegal moves, for a total of 664 points.
Bot 4, middleBot, has 1 wins and made 20 illegal moves, for a total of 114 points.
With 4 bots, This program took 477.471 seconds to finish.
Depth Bot - действующий чемпион! По крайней мере, прямо сейчас.
XXX000---
получаемой доски ? или это «никто не получает это, несмотря на то, что О выиграл это первым»?