Ваша задача проста: скажите мне, кто победит в битве букв.
Войска
В этой битве есть три разных «войска», которые представлены в этой таблице.
name | health | damage
A 25 25
B 100 5
C 10 50
Вы можете использовать любые три уникальных символа для обозначения войск, но должны указать, не являются ли они этими буквами.
Бой
Предположим, у нас есть образец битвы:
ABC # army 1
CBA # army 2
Каждая армия многократно стреляет в крайнее левое подразделение, пока оно не погибнет; затем они движутся к отряду вправо и повторяются. Итак, армия 2 атакует A
в армии 1, пока A
не умрет, затем перейдите к B
, затем C
. Армия 1 атакует C
сначала, потом B
, потом A
. Предположим, что армии атакуют одновременно, и поэтому войска всегда будут стрелять, если они были живы до раунда, и могут убивать друг друга в одно и то же время. Они стреляют в порядке слева направо.
Битва будет выглядеть так:
ABC
CBA
BC # A (25 hp) killed by C (-50 hp), B (100 hp) attacked by B (-5 hp) and A (-25 hp), has 70 hp
BA # C (10 hp) killed by A (-25 hp), B (100 hp) attacked by B (-5 hp) and C (-50 hp), has 45 hp
BC # B (70 hp) attacked by B (-5 hp) and A (-25 hp), has 40 hp
A # B (45 hp) killed by B (-5 hp) and C (-50 hp)
BC # B (40 hp) attacked by A (-25 hp), has 15 health
# A (25 hp) killed by B (-5 hp) and C (-50 hp), army 2 dead
Поэтому армия 1 выигрывает битву!
вход
Две строки, первая представляет армию 1, а вторая армию 2. Они не обязательно имеют одинаковый размер (потому что, кто сказал, что это будет честный бой?)
Вывод
Любые три уникальных постоянных значения, представляющих победу армии 1, армии 2 победы или маловероятное событие ничьей. Да, последние войска могут убивать друг друга, заканчивая ничьей.
Сражения
ABC
CBA
Army 1
CCCCC
CCCCC
Tie
CABCAB
ABBABBA
Army 2
Применяются стандартные лазейки . Вы должны представить полную программу.
Это Код-гольфкратчайшее решение выигрывает.
A
бьетB
иC
галстуки,B
иA
галстукиC
. Изменение любого изA
значений на20
заставит его связатьB
.Ответы:
Pyth
14597 байтЧуть менее наивно, чем раньше.
Попробуйте онлайн!
Пояснения:
Разрежем программу на несколько частей.
Словарь
Y
является:{'A': [25, 25], 'C': [10, 50], 'B': [100, 5]}
. Затем:На данный момент,
K
это список пар, который представляет первую армию. Каждая пара в этом списке является письмом армии и предназначена(health, damage)
для этого письма.J
точно такой же, но для второй армии.g
это функция, которая берет две армии и наносит урон, нанесенный второй армией, первой. Сейчас же:Когда цикл while закончен,
K
иJ
его окончательное значение Если они оба пусты, это галстук; в противном случае непустая армия победит. Это обрабатывается последним фрагментом кода:Это оно!
источник
Haskell ,
199193179176171 байтПопробуйте онлайн!
Небольшой трюк: разделить все показатели армии на 5.
источник
C #, 446 байт
Отформатированная версия:
Выводит 1, если армия1 выигрывает, 2 для армии2 и 0 для ничьей
источник
int[]
я думаю, вы можете объединить их, `` <= 0` это то же самое, что и<1
наверняка? Вам нуженtry-catch
?Javascript (ES6) -
316269 байтЯ уверен, что это может быть игра в гольф, как ад, но это то, что я придумал :) Хотя мне удалось сбрить 47 байтов!
Выходы 0 для ничьей, 1 для команды 1 и 2 для команды 2.
Читаемый :
Демо :
источник