Алак был изобретен математиком А. К. Дьюдни и описан в его книге Planiverse 1984 года. Правила Алака просты:
Алак - это игра для двух игроков на одномерной доске с одиннадцатью слотами. Каждый слот может содержать не более одного куска одновременно. Есть два вида фигур: «х» и «о». Х принадлежат одному игроку, О - другому. Начальная конфигурация платы:
xxxx___oooo
Игроки ходят по очереди. На каждом ходу каждый игрок может перемещать только одну фигуру, один раз. Игрок не может отказаться от своего хода. Игрок может переместить любую из своих фигур в следующий незанятый слот вправо или влево, что может включать перепрыгивание через занятые слоты. Игрок не может сдвинуть фигуру со стороны доски.
Если ход создает рисунок, в котором фигуры противника с обеих сторон окружены двумя фигурами цвета движителя (без промежуточной пустой ячейки), то эти окруженные фигуры удаляются с доски.
Цель игры состоит в том, чтобы убрать все фигуры противника, после чего игра заканчивается. Удаление «все, кроме одного» также завершает игру, так как противник не может окружить вас одним куском, и в любом случае он всегда проигрывает в течение нескольких ходов.
Я нашел эту игру онлайн и подумал: а можно ли играть в гольф?
Правила игры в гольф
- Ваш код должен соответствовать всем правилам игры, обработке захватов, правильному перемещению и т. Д. (Единственное исключение - вам не нужно добавлять бота, но вы должны как-то контролировать обоих игроков, а один игрок должен быть человеком).
- Ввод должен быть перемещением фигуры на плитке X на плитку Y или выходом. Например, вы можете использовать,
1 4
чтобы сказать «переместить этот кусок из плитки 1 в плитку 4».quit
завершит программу, хотя использование Control- Cбудет приемлемым. Вы также должны проверить, является ли ход недействительным (выйдя за пределы доски или переместившись куда-нибудь, что вам нужно будет пересечь незанятые места, чтобы добраться до или отправить сообщение, которое не является парой плиток илиquit
). - Выходы для игроков - победителей и инвалиду должны быть
P1 WINS
,P2 WINS
иINVALID
, соответственно. (Все это 7 символов.) - Выход должен показать плату. Это все, что требуется.
- Не имеет значения, используете ли вы какие-либо вспомогательные средства, например пронумерованные плитки или другие элементы.
Задача заканчивается, если:
- Один ответ получает 50 голосов
- Один ответ остается самым популярным в течение 3 недель, и другие ответы за это время не были опубликованы.
и задача имеет как минимум 3 ответа (так что есть реальная конкуренция).
Правила игры
- Игрок слева должен начать первым.
- Только один кусок занимает квадрат за раз. Вы перемещаете кусок влево или вправо, пока он не попадет на незанятое место. Доска не оборачивается, и вы не можете перемещаться по незанятым областям. Например:
xoo__o
, Здесьx
перемещение вправо изменит доску на_oox_o
.xxooo_
, Здесь крайний левыйx
мог двигаться к сдаче_xooox
, которая захватываетo
s, оставляя_x___x
.x__oox
, Здесьo
s не фиксируются (все еще есть разрыв). Захват невозможен, потому что вы не можете перемещаться по незанятым пространствам.x
Слева может двигаться только одно место, потому что нет никаких других частей между (выезд_x_oox
).
- Несколько смежных фигур могут быть захвачены одновременно, если группа окружена фигурами противника. Например, от
x_oox
до_xoox
будет захватывать обаo
с и в результате_x__x
. - Если после хода вы сначала захватываете фигуры противника , прежде чем проверять, следует ли удалить свою фигуру. Возьмите два примера:
o_oxx
кoxox_
. Сначалаo
захватывается второй ,ox_x_
поэтому первыйx
остается на доске.o_oox
кoxoo_
. На этот раз ни один изo
s не захвачен, поэтомуx
вместо этого захватывается.- Если у вас есть только одна фигура, игра заканчивается, потому что вы не можете захватить только одну фигуру.
Пусть игра начнется! Я с нетерпением жду встречи с тем, что вы придумали.
источник
Ответы:
C
617592 байтаразгадали:
Я действительно хотел получить это в ~ 400 байтов, но здесь есть много маленьких правил, и обработка ввода закончилась довольно неприятно. Я определенно не закончил с этим. Вот набор примеров, который охватывает практически все:
Если я что-то неправильно понял, пожалуйста, дайте мне знать!
источник
printf("INVALID");
наputs("INVALID");
,o<2||x<2
сo<2|x<2
иprintf(b);while(!q){
наfor(printf(b);!q;){
PHP - 505
Уведомления должны быть подавлены путем перенаправления
STDERR
на/dev/null
.Со здравым пробелом:
С помощью тестовых случаев BrainSteel:
источник
/dev/null
./dev/null
.Python 2,
536509448441 байтЗвоните через
a()
; ходы должны быть введены в формеpiece,destination
(то есть,1,4
); выйти с помощью Ctrl-C. Если кто-то может увидеть больше возможностей для игры в гольф, я весь в ушах.источник
SpecBAS - 718 байт
SpecBAS - это обновленная версия Sinclair / ZX BASIC, которая может работать вне эмулятора. (Все еще интерпретируется).
Использовали некоторые из новых функций, чтобы уменьшить размер, насколько я мог.
В строке 12 задается регулярное выражение для поиска «зажатых» кусочков с использованием встроенного IF, а в строке 18 используется перенос значения INC (вместо того, чтобы говорить
INC p: IF p=3 THEN LET p=1
)Вывод (невозможно скопировать из выходной вдовы, поэтому снимок экрана)
источник
C #, 730 байт
Я полагаю, что дальнейшие улучшения возможны. С другой стороны, я интерпретировал
INVALID
вывод как завершение выполнения, поэтому мне может потребоваться исправить эту проблему, чтобы соответствовать другим ответам.источник