Фон
Mu Torere - это игра, которая является одной из двух, в которую играют народы маори в Новой Зеландии до европейского влияния. Это делает ее очень уникальной игрой, поскольку она имеет «объективный критерий выигрыша» и правила игры, которые отличаются от большинства других существующих игр.
Игровой процесс:
Доска восьмиугольная. Есть связи между каждой смежной вершиной, и есть центральный узел, который связан со всеми вершинами. В любой момент времени восемь из девяти узлов заняты камнями. В начале есть четыре белых камня и четыре черных камня, каждый из которых занимает половину восьмиугольника, а центральный узел пуст. Черные движутся первыми.
Каждый ход игрок может перемещать один из своих камней вдоль одного из 16 ребер от одного узла к пустому узлу. Камень может быть перемещен из внешнего узла в центральный, только если камень находится рядом с камнем противника.
Игрок проигрывает, когда он не может сделать законный ход, что происходит, когда нет края, соединяющего камень с пустым узлом.
Вот сайт, который объясняет правила (с диаграммой) и предлагает некоторый анализ.
Соревнование
Ваша задача - написать самую короткую программу, способную сыграть в идеальную игру Му Торере против человека-оппонента. Ваша программа должна иметь возможность отображать и обновлять игровое поле, делать ходы и получать ходы от человека-оппонента. Самое главное, что он должен играть в идеальную игру.
Идеальная игра?
Да, идеальная игра. Я провел некоторый анализ игры и обнаружил, что игра длится бесконечное количество времени, если в нее идеально играют обе стороны. Это означает, что ваша программа никогда не должна проигрывать. Кроме того, ваша программа должна быть способна принести победу, когда оппонент совершает ошибку, которая позволяет программе вызывать победу. Что касается того, как ваша программа находит идеальный ход, это зависит от вас.
Детали
После каждого хода (и в начале игры) ваша программа должна печатать игровое поле. Однако вы решите отобразить плату, она должна показывать все узлы и быть полностью подключенной (все 16 соединительных линий должны быть нарисованы без пересеченных линий). В начале доска должна иметь правильную стартовую позицию. Один из способов сделать это - сделать игровое поле квадратным.
w-w-w
|\|/|
b-o-w
|/|\|
b-b-b
Два цвета - черный и белый, или темный / светлый. Доска должна показывать, какие узлы заняты какими-либо фигурами игрока, например помечать их буквой «b» или «w», а какой узел свободен. Участникам рекомендуется (но не обязательно) сделать игровое поле более графическим, нежели простым текстом.
Ваша игровая доска должна иметь систему нумерации, которая присваивает каждому узлу уникальный номер. Вы можете выбрать нумерацию доски, как вам нравится, но это должно быть объяснено в вашем ответе или в программе. Квадратная доска может быть пронумерована следующим образом:
1-2-3
|\|/|
4-5-6
|/|\|
7-8-9
Человек первым двигается. Его вход будет одним числом. Это будет номер узла, где в данный момент находится перемещенный камень. Если я хочу переместить камень из узла 4 в пустой узел 5, я наберу a 4
. 5 подразумевается, поскольку это единственный пустой узел.
Предположим, что человек всегда сделает законный ход.
После того, как человек делает свой ход, должна быть напечатана обновленная доска. После того, как ваша программа выберет законный ход, она должна напечатать еще одну обновленную доску, а затем подождать, пока человек не сделает еще один ход.
Ваша программа должна завершиться, как только она победит.
Примечания
Применяются стандартные правила игры в гольф, нет доступа к внешним файлам и т. Д. И т. Д. Кроме того, я собираюсь установить гибкий временной интервал в 15 секунд (на разумной машине), чтобы ваша программа выполняла каждый свой ход. Как уже говорилось, эта игра имеет возможность формировать бесконечные циклы, и я не хочу, чтобы поиск в глубину попадал в бесконечный цикл.
Ответы:
Рубин, 390 символов
Реализация в ruby, которая напрямую вычисляет дерево игры (которое требует довольно много кода) и, таким образом, всегда играет оптимально. Позиции платы спиральны наружу, как показано на следующем рисунке:
источник
Баш и друзья (
463447 символов)Человек играет как
b
, компьютер какw
. Положение доски нумеруется, как в приведенном здесь документе вверху. Оказывается, эвристика для игры в идеальную игру удивительно проста.С другой стороны, потерять интересный путь довольно сложно. http://ideone.com/sXJPy демонстрирует самое короткое возможное самоубийство против этого бота. Обратите внимание, что дополнительный 0 в конце должен проверить, правильно ли он выходит из цикла.
источник
read x
обязательным, но это сделало бы тестирование довольно неприятным. Я также мог бы сохранить персонажа, убрав пустую строку после доски, но ...