Найти результат игры войны
Когда я учился в начальной школе, была игра «Каменные ножницы», в которую мы играли во время собраний, в ожидании учителя, на переменах и т. Д. Мы называли это «Войной». Однако после некоторого поиска выясняется, что это гораздо более простой вариант «игры с дробовиком» (согласно WikiHow) . Я собираюсь назвать это «Войной», так как правила немного отличаются:
2 человека сидят напротив друг друга. Цель игры - «убить» другого игрока. Каждый ход вы можете сыграть один из 3 ходов:
Перезагрузка : у вас есть пистолет, который держит один выстрел. Это должно быть перезаряжено прежде, чем это может быть запущено каждый раз. Перезагрузка, когда у вас уже есть боеприпасы, законна, но ничего не делает. Перезагрузка была символизирована постукиванием по храму обеими руками. Каждый игрок начинает с 0 патронов.
Охрана : единственный безопасный ход. Если вы стреляете во время охраны, вы не умрете. Символом охраны было скрещивание рук на груди.
Огонь : стрелять из пистолета. Чтобы успешно стрелять, вы должны перезагрузить с момента последнего выстрела. Если ваш противник перезагружается, вы выигрываете. Если они тоже стреляют, и у вас обоих есть патроны, это ничья. Если они охраняют, вы потратили впустую боеприпасы. Хотя стрельба без боеприпасов - законный ход, он ничего не делает и оставляет вас уязвимыми, как перезарядка. Стрельба была символизирована указанием на другого игрока.
Игра была похожа на RPS, в которой каждый игрок одновременно отказывался от своего выбора (мы постукивали по ногам дважды между поворотами, чтобы поддерживать ритм друг с другом, но это не важно для вызова).
Соревнование:
Ваша задача - найти результат игры War. Это может быть функция или полная программа.
вход
Опция, которую каждый игрок выбрал каждый ход, будет представлена символом / строкой:
r : перезагрузить
г : охранник
ф : огонь
Входными данными будут список пар, строка с разделителями / неограниченной линией или что-либо еще в этих строках.
Пример ввода в Python может быть следующим: [("r", "g"), ("f", "r")]
первый игрок перезагружается, а второй игрок охраняется. Во второй ход первый игрок стреляет, а второй перезагружается. Первый игрок выигрывает в этой игре. Же вход может необязательно быть представлена в виде "r g f r"
, "rgfr"
, "rg fr"
"rg-fr"
...
Вы можете предположить следующее:
Ввод будет соответствовать выбранному вами формату и будет содержать только допустимые символы.
Кто-то умрет в течение 100 ходов.
Однако вы не можете предполагать, что ходы заканчиваются, когда кто-то умирает.
Выход
Значение, указывающее, кто победил (или кто победил первым *
). Вы можете выбрать, что выводить для каждого сценария, но должны учитывать следующее:
Игрок 1 выигрывает
Игрок 2 выигрывает
Они убивают друг друга (рисуют)
Каждый результат должен иметь значение района и всегда должен быть одинаковым для каждого сценария.
В качестве примера: вы можете выводить, 1
когда игрок 1 выигрывает, 2
когда игрок 2 выигрывает, и 0
в случае ничьей. Затем вы должны всегда выводить, 1
когда игрок 1 выигрывает, 2
когда игрок 2 выигрывает, и 0
в случае ничьей.
Его можно вернуть или распечатать на стандартный вывод. Задний пробел в порядке.
Ясно, что единственный сценарий, который приводит к ничьей, - это если оба игрока стреляют, и у обоих есть патроны.
*
Поскольку в этом вызове ходы могут продолжаться после смерти, возможно, в конечном итоге выиграет более 1 игрока. Вам нужно найти, кто победил первым по входу.
Тестовые случаи (при условии, 1
когда выигрывает P1, 2
когда выигрывает P2 и 0
для ничьей):
"rg fr" => 1 (P1 shot P2 while they were reloading)
"rg ff" => 1 (They both shot, but only P1 had ammo)
"rr ff" => 0 (Both had ammo and shot each other)
"rr ff rr fg" => 0 (Both had ammo and shot each other. Everything after the first win is ignored)
"rr fg rf" => 2 (P2 shot P1 while they were reloading)
"rf gg rr fg rr fr" => 1
(P2 tried to shoot but didn't have any ammo, then they both guarded, then they both reloaded, then P2 blocked a shot, then they both reloaded again [but P2 still only has 1 ammo!], then P1 shoots P2 while they're reloading.
"rr gf fr rf gg rg ff" => 1
^ Player 1 wins here. The rest to the right has no effect on the output
Это код гольф, поэтому выигрывает наименьшее количество байтов!
Обратите внимание, как показывают тестовые примеры, вы должны обрабатывать «тупые» ходы. Для игрока вполне допустимо стрелять, когда у него нет боеприпасов, или перезаряжать 2 хода подряд (и накапливать только один боеприпас).
{"rff","rgf"}
?