Сюжет : Джимми пропал; мы должны найти его. Мы должны расстаться.
Поворот сюжета : Джимми уже мертв.
Но наш актерский состав этого не знает, поэтому им все равно нужно искать всю область. Существует N столбцов x M рядов (1 <= M, N <= 256) сеток ячеек, либо помеченных как «S» для начальной точки, «.» для открытого пространства, или "#" для препятствия. Это карта .
Есть 0 <= p <= 26 костюмов , 0 <= q <= 26 дополнений и 1 звезда . Каждый изначально находится в клетке, помеченной S.
Правила
У каждого человека радиус прицеливания показан ниже:
...
.....
..@..
.....
...
Звезда обозначается буквой «@», костары - заглавными буквами, начиная с «А», а дополнительные - строчными буквами, начиная с «а». Первоначально радиус прицела, окружающий начальную точку, уже помечен как искомый. Если это составляет все открытое пространство карты, игра заканчивается. Каждый ход в следующем порядке :
- Каждый человек одновременно делает ход короля (либо стоит на месте, либо переходит в одну из 8 соседних клеток).
- Все ячейки в радиусе обзора вокруг каждого человека считаются найденными.
- Если коллега больше никого не видит, она умирает. Если дополнительный не может видеть ни Costar, звезду, или по крайней мере 2 других дополнительных, он умирает. Это происходит одновременно, то есть не может быть цепной реакции смертей за один ход; вышеуказанные условия проверены, и каждый, кто умрет, умирает сразу.
- Если все открытое пространство на карте было найдено, поиск окончен.
Заметки
Несколько человек могут находиться на одной площади в любой точке, и эти люди могут видеть друг друга.
Препятствия никогда не мешают зрению, только движению; люди могут видеть друг друга через ... лаву?
Открытые пространства на карте гарантированно связаны королевскими ходами.
Начальная буква «S» также считается открытым пространством, а не препятствием.
Любой ход короля, который приземляется на открытом пространстве, действителен. Например, следующий ход является законным:
.... ....
.@#. ---> ..#.
.#.. .#@.
.... ....
вход
Ввод будет в формате
N M p q
[N cols x M rows grid with characters ".", "#", and "S"]
Примеры входных данных:
6 5 0 0
......
......
..S...
......
......
а также
9 9 1 1
S.......#
.......##
......##.
..#####..
...##....
...##....
...#.....
....#..#.
.........
p и q - количество костюмов и дополнений соответственно.
Выход
Выходные данные должны быть для каждого хода выполненными с указанием направления
789
456
123
Порядок ходов не имеет значения, так как все они принимаются одновременно. Недопустимо перечислять ход для человека, и это равносильно перемещению его в направлении 5. Движения должны быть перечислены в следующем формате:
@9 A2 a2 B7.
"" обозначает конец ваших ходов за ход.
После того, как на карте был произведен поиск, последняя строка выходных данных должна состоять из трех целых чисел, разделенных пробелами: количество ходов, которое потребовалось вам, чтобы завершить поиск на доске, количество живых существ и количество живых дополнений. Для первого примера ввода
6 5 0 0
......
......
..S...
......
......
следующий действительный вывод:
@4.
@6.
@6.
@6.
4 0 0
Последнее замечание: звезда не может умереть, и открытое пространство на карте гарантированно будет связано, поэтому поиск всегда будет успешным.
счет
Ваша оценка - это общее количество ходов, выполненных за набор тестов; Вы можете отправить свой тестовый пример вместе со своим ответом. Сумма количества живых карнавалов в наборе эталонов будет использоваться в качестве тай-брейка, а в случае, если все еще есть ничья, будет использоваться сумма количества живущих статистов.
Тестовый набор и контроллер
В настоящее время 5 карт онлайн на https://github.com/Tudwell/HorrorMovieSearchParty/ . Любой, кто отправляет ответ, может также представить тестовый пример, который я оставляю за собой право отклонить по любой причине (если я отклоню вашу карту по какой-либо причине, вы можете отправить другой). Они будут добавлены в набор тестов по моему усмотрению.
Контроллер Python (протестирован в 2.7.5) предоставляется на github как controller.py . Второй контроллер, controller_disp.py , идентичен, за исключением того, что он показывает графический вывод во время поиска (требуется библиотека Pygame).
Использование :
python controller.py <map file> <your execution line>
То есть:
python controller.py map1.txt python solver.py map1.txt
Контроллер имеет вывод (в stdin вашей программы ) вида
Turn 1
@:2,3 A:2,3 B:2,3.
##...##
#ooo..#
ooooo..
ooooo..
ooooo..
#ooo...
##.....
###....
----------------------------------------
Это номер хода (ход 1 - до того, как вы переместились), список всех актеров с окончанием «.» И их координаты x, y (верхний левый символ (0,0)), представление всего доска и линия с 40-х годов. Затем он ожидает ввода (от вашей программы на стандартный вывод ) вида
@9 A2 B7.
Это формат вывода, указанный выше. Контроллер выводит «o» для открытого пространства, в котором был произведен поиск, «.» для открытого пространства, которое не было обыскано, и '#' для препятствий. В список людей и их координаты входят только живые люди, а также отслеживаются все правила игры. Контроллер выйдет, если будет предпринята попытка незаконного перемещения. Если ходы для данного хода завершают поиск, результат не такой, как указано выше; вместо этого он имеет форму
Finished in 4 turns
4 1 0
«4 1 0» здесь обозначает 4 полных хода, 1 жилой костюм и 0 живых дополнений. Вам не нужно использовать контроллер; не стесняйтесь использовать это или изменить это для своей собственной записи. Если вы решите использовать его и столкнетесь с проблемами, дайте мне знать.
Спасибо @githubphagocyte за помощь в написании контроллера.
Изменить: Для рандомизированной записи, вы можете выбрать любой прогон на конкретной карте в качестве вашей оценки для этой карты. Обратите внимание, что из-за требований к оценке вы всегда должны выбирать наименьшее количество ходов, затем наименьшее количество мертвых костаров, а затем наименьшее количество мертвых дополнений для каждой карты.