Inspirado por esta conversa no chat.
Seu objetivo neste desafio é imitar um ninja e contar quantas mortes ele deixou.
Especificações
Seu ninja começa com 9 mortes restantes. Ele também recebe uma saúde inicial integral como insumo.
Então, ele toma como entrada uma lista de eventos em sua vida que alteram sua saúde. Estes podem ser números inteiros negativos, positivos ou zero.
A qualquer momento, se sua saúde atingir um valor igual ou inferior a zero, ele perde uma vida e sua saúde volta ao estado inicial.
Seu programa deve relatar o número de mortes que ele deixou. Se ele tiver zero ou menos à esquerda, você deve imprimir dead
.
Isso é código-golfe , então o código mais curto em bytes vence!
Casos de teste
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
fonte
fonte
Respostas:
Geléia ,
302826 bytesExperimente online!
Como funciona
fonte
Japt,
403932 bytesExperimente online!
Como funciona
Ao tentar golf esta última noite (longe de um computador, não menos), deparei com um substituto interessante para
>0
:¬
. Nos números, isso leva a raiz quadrada, que retornaNaN
para números negativos.NaN
é falso, então isso retorna exatamente o mesmo de verdade / falsidade que>0
.Estendendo este truque um pouco mais, podemos redefinir T de U sse é
>=0
em apenas cinco bytes:T¬²ªU
. Como é que isso funciona? Vamos dar uma olhada:Como você pode ver,
T¬²
retornaNaN
seT
for negativo; caso contrário, ele retornaráT
. DesdeNaN
e0
ambos são falsos, isso fornece uma maneira fácil de restaurar a saúde dos ninjasªU
. Esse truque também é usado para devolver a vida do ninja, se esse número for positivo ou"dead"
negativo.Juntando tudo isso:
Se a entrada for garantida como não negativa ou até positiva, podemos jogar golfe de 1 ou 4 bytes:
fonte
JavaScript ES6,
62 6058 bytesGuardado 4 bytes graças a @ETHproductions
Experimente online (todos os navegadores funcionam)
Explicação
fonte
d--&&a
oub.reduce(...)&&d<1?"dead":d
?map
batereduce
na maioria dos cenários:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
é 57..reduce(...)&&
funcionaria por causa dos.reduce
retornos0
, não funcionará.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
vez disso, funcionaria?CJam, 35 bytes
Experimente online!
fonte
Haskell,
817775 bytesExemplo de uso:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
fonte
Pyth, 32
Observe que há um espaço à esquerda. Esta provavelmente não é a melhor abordagem, mas foi a primeira coisa que veio à mente. Reduz o excesso de entrada adicionando valores à saúde do ninja, aumentando um contador e redefinindo a saúde quando cai abaixo de zero. Adicionamos um zero ao final da lista para contar se a última alteração mata o ninja e, em seguida, apenas verificamos se o ninja está morto. O caso de integridade inicial zero é codificado.
Suíte de teste
fonte
MATL, 32
Explicação
A pilha agora se parece com esta (para entrada
100, [-20, 5, -50, 15, -30, -30, 10]
):Estale a matriz e faça um loop
Se a saúde for zero, defina o contador de mortes como zero. Manuseio de caso especial para
initial health = 0
.Excluir o valor de recarga da pilha
Se o contador de mortes for zero ou menos, exclua-o e imprima 'morto'.
fonte
TeaScript ,
36 3431 bytesSemelhante à minha resposta JavaScript. os últimos 4 caracteres são a descompactação da string "dead".
O intérprete on-line do TeaScript não suporta entrada de matriz, portanto, você precisará abrir o console e executar isso digitando:
Explicação
fonte
Python 2.7,
826655106 bytesGraças a @RikerW por -16 bytes.:(Graças a @ Maltysen por -11 bytes.:(Primeiro digite health, depois insira e depois os eventos em forma de lista.
fonte
C # 207
Leva a entrada através do fluxo de argumentos. O primeiro argumento é a quantidade de integridade e todo o resto é a lista de eventos.
Versão legível / não protegida
Exemplos:
CSharp.exe 3 => 9
CSharp.exe 100 -20 5 -50 15 -30 -30 10 => 8
(Psst.) CSharp.exe é o nome usado como exemplo. Você deve chamar assim na realidade: argumentos [program_name.exe], sem os parênteses quadrados.
fonte