灵感来自于聊天中的这对话。
你在这个挑战中的目标是模仿一个忍者,并计算他已经死了多少人。
你的忍者开始时还剩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发布于 2016-01-09 02:54:16
q~_@{+_1<{W$}&}/](\,_A<@*A@-"dead"?在网上试试!
发布于 2016-01-09 07:22:51
u+?>GZG&=hZQH+E0Q?&Q<Z9-9Z"dead请注意,这里有一个前导空间。这可能不是最好的方法,但这是首先想到的事情。它通过将值添加到忍者的健康值,并增加计数器和重置当它下降到零时,减少了过多的输入。我们在列表的末尾加一个0来计算最后一次更改是否杀死了忍者,然后做一些检查,看看忍者是否死了。零开始健康案例是硬编码。
发布于 2016-01-09 20:03:34
9yi"@+t0>~?x1-y]]g*wxt0>~?x'dead'9 # push 9
y # duplicate 2nd value to top (there is none -> get it from input first)
i # get input and push it堆栈现在看起来如下(用于输入100, [-20, 5, -50, 15, -30, -30, 10]):
100 9 100 [-20, 5, -50, 15, -30, -30, 10]
reload deaths health
value left弹出数组和循环
" ] # loop
@+ # add to health
t0>~? ] # if health is zero or less
x1-y # delete health counter, decrement life counter, reload health如果健康状况为零,则将死亡计数器设置为零。initial health = 0的特殊案例处理。
g # health to bool
* # multiply with death counter从堆栈中删除重新加载值
wx如果死亡计数器是零或更少,删除它并打印‘死’代替。
t0>~?x'dead'https://codegolf.stackexchange.com/questions/68943
复制相似问题