Когда я был ребенком, я часто играл в эту игру.
правила
Есть два игрока (назовем их A и B), и каждый игрок использует свои руки в качестве оружия. Есть три возможных хода:
Руки вверх, чтобы загрузить боеприпасы к вашему оружию.
Каждый пистолет начинается пустым. Загрузка увеличивает боеприпасы на один.
Руки, указывающие на другого игрока, чтобы стрелять.
Это уменьшает боеприпасы на один. Вы должны иметь хотя бы одну единицу патронов, чтобы стрелять.
Скрещенные руки, чтобы защитить себя от выстрела.
Оба игрока двигаются одновременно. Если оба игрока стреляют одновременно, пули попадают друг в друга, и игра продолжается. Игра заканчивается, когда один игрок стреляет, а другой заряжает боеприпасы.
Стрельба и пустое ружье считаются мошенничеством . Если игрок обманывает, в то время как другой совершает законное действие, обманщик немедленно проигрывает. Если оба игрока обманывают одновременно, игра продолжается.
Попытки обмана не уменьшают боеприпасы, поэтому они никогда не могут быть отрицательными.
Вызов
Учитывая ходы игроков A и B, выведите, какой игрок выиграл игру: 1
для игрока A, -1
для игрока B и 0
для ничьей. Вы можете использовать любую другую тройку возвращаемых значений, но вам нужно указать в своем ответе, какие из них вы используете.
Игра может:
- конец без необходимости обрабатывать все ходы;
- не заканчивается данными ходами, и поэтому считается ничьей.
Вход может быть взят:
- как строки
- как массивы / списки целых чисел
- любым другим способом, который не предварительно обрабатывает ввод
Полная программа или функции разрешены. Поскольку это код-гольф , выигрывает самый короткий ответ в байтах!
Контрольные примеры
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Ответы:
Желе,
333224 байтаЭто печатает 5 вместо -1 и 7 вместо 1 . Попробуйте онлайн! или проверьте все контрольные примеры .
Как это работает
источник
Pyth,
48464947 байтПопробуй это здесь!
Спасибо @isaacg за сохранение
24 байта!Принимает ввод в виде 2-х кортежей со списком ходов игрока A первым и ходов игрока B вторым. Выход такой же, как в задании.
объяснение
Краткий обзор
[cheating win, fair win]
с возможными значениями-1, 0, 1
для каждого из них, чтобы указать, выиграл ли игрок в этой точке (-1, 1
) или игра продолжается (0
)[0,0]
, и взять первый ненулевой элемент, который указывает победителяРазбивка кода
источник
m|Fd
так же, как|M
.M
делает брызги, а также. Кстати: вопрос о конфликтующих лямбда-переменных, которые мы обсуждали в чате, стоит мне несколько байт здесь: P,1 2
так же, какS2
Python, 217 байт
Объяснение : Принимает A и B как списки целых чисел. Просто проходит каждую пару ходов, добавляет или вычитает 1, если необходимо, и возвращается, когда кто-то обманывает или выигрывает. Делает то же самое дважды, используя другой цикл for, один раз для хода A и один раз для хода B. Добавляет 1, если x опускается ниже 0 до -1.
источник
Ява,
226212200196194 байта-14 байтов при переупорядочении логики
-12 байт благодаря мистеру Public, указывающему, как использовать троичную операцию для логики стрельбы
-4 байта, запихивая логику нагрузки в одно короткое замыкание, если
-2 байт , так как
==1
=== ,<2
когда входные данные могут быть только1
,2
,3
Использование и версия с отступом:
Реализация правил игры уже не так проста, но проста. Каждый цикл выполняет следующие операции:
r
к проигрышуr
нет0
, верните значение, потому что кто-то обманулx
является фиктивной переменной, используемой для того, чтобы компилятор позволил мне использовать троичное выражениеПодождите, Java короче, чем Python?
источник
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
затем продолжайте использовать x (так как это всего лишь фиктивная переменная, чтобы заставить троичную работать), какx=v==2?n<1?r++:r:n--;