Вдохновлен этим разговором в чате.
Ваша цель в этом испытании - подражать ниндзя и подсчитать, сколько смертей он оставил.
Спекуляции
Ваш ниндзя начинается с 9 смертей. Он также получает неотъемлемое начальное здоровье в качестве входа.
Затем он принимает в качестве входных данных список событий в своей жизни, которые влияют на его здоровье. Это могут быть отрицательные, положительные или нулевые целые числа.
В любой момент, если его здоровье достигает или ниже нуля, он теряет жизнь, и его здоровье возвращается к исходному.
Ваша программа должна сообщать о количестве смертей, которые он оставил. Если у него осталось ноль или меньше, вы должны dead
вместо этого вывести .
Это код-гольф , поэтому выигрывает самый короткий код в байтах !
Тестовые случаи
3, [] -> 9
100, [-20, 5, -50, 15, -30, -30, 10] -> 8
10, [-10, -10, -10, -10] -> 5
10, [-10, -10, -10, -10, -10, -10, -10, -10, -10] -> dead
0, [] -> dead
0, [1] -> dead
100, [10, -100] -> 9
code-golf
number
simulation
Maltysen
источник
источник
Ответы:
Желе ,
302826 байтПопробуйте онлайн!
Как это устроено
источник
Japt,
403932 байтаПопробуйте онлайн!
Как это устроено
Стараясь не гольф этой последней ночью (вдали от компьютера, не меньше), я наткнулся на интересную замену для
>0
:¬
. Для чисел это принимает квадратный корень, который возвращаетNaN
отрицательные числа.NaN
ложно, так что это возвращает точно так же верно / ложно, как>0
.Продолжая этот трюк немного дальше, мы можем сбросить T на U тогда и только тогда это
>=0
всего пять байт:T¬²ªU
. Как это работает? Давайте взглянем:Как видите,
T¬²
возвращает,NaN
еслиT
отрицательно; в противном случае он возвращаетсяT
. ТакNaN
и0
оба falsy, это обеспечивает легкий способ сбросить здоровье ниндзя сªU
. Этот трюк также используется для возврата оставшихся жизней ниндзя, если это число положительное или"dead"
отрицательное.Собираем все это вместе:
Если входные данные гарантированно будут неотрицательными или даже положительными, мы можем обработать 1 или 4 байта:
источник
JavaScript ES6,
62 6058 байтСохранено 4 байта благодаря @ETHproductions
Попробуйте онлайн (все браузеры работают)
объяснение
источник
d--&&a
работать илиb.reduce(...)&&d<1?"dead":d
?map
бьетreduce
в большинстве сценариев:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
это 57..reduce(...)&&
будет работать из-за.reduce
возвратов0
, это не будет работать.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
работать вместо этого?CJam, 35 байт
Попробуйте онлайн!
источник
Haskell,
817775 байтПример использования:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
источник
Пиф, 32
Обратите внимание, что есть ведущий пробел. Вероятно, это не лучший подход, но это было первое, что пришло на ум. Он уменьшает избыточные входные данные, добавляя значения к здоровью ниндзя, увеличивая счетчик и сбрасывая здоровье, когда оно падает ниже нуля. Мы добавляем ноль в конец списка, чтобы подсчитать, убило ли последнее изменение ниндзя, а затем просто проверим, не умер ли ниндзя. Случай с нулевым начальным состоянием здоровья жестко закодирован.
Тестирование
источник
МАТЛ, 32
объяснение
Стек теперь выглядит так (для ввода
100, [-20, 5, -50, 15, -30, -30, 10]
):Поп массив и цикл
Если здоровье равно нулю, установите счетчик смерти на ноль. Обработка особых случаев для
initial health = 0
.Удалить значение перезагрузки из стека
Если счетчик смерти равен нулю или меньше, удалите его и выведите «dead».
источник
TeaScript ,
36 3431 байтПохоже на мой ответ JavaScript. последние 4 символа являются декомпрессией строки «dead».
Онлайн-интерпретатор TeaScript не поддерживает ввод в массив, поэтому вам нужно открыть консоль и запустить ее, набрав:
объяснение
источник
Python 2.7,
826655106 байтСпасибо @RikerW за -16 байтов.:(Спасибо @Maltysen за -11 байтов.:(Сначала введите здоровье, затем введите, затем события в форме списка.
источник
C # 207
Принимает ввод через поток аргументов. Первый аргумент - это количество здоровья, а все остальное - список событий.
Читаемая / разглаженная версия
Примеры:
CSharp.exe 3 => 9
CSharp.exe 100 -20 5 -50 15 -30 -30 10 => 8
(Psst.) CSharp.exe это имя, используемое в качестве примера. В действительности вы должны вызывать так: аргументы [program_name.exe] без квадратных скобок.
источник