Inspiré par cette conversation dans le chat.
Votre objectif dans ce défi est d'imiter un ninja et de compter le nombre de morts qu'il lui reste.
Spécifications
Votre ninja commence avec 9 morts. Il obtient également une santé de départ intégrale en entrée.
Ensuite, il prend en entrée une liste d'événements de sa vie qui altèrent sa santé. Il peut s'agir d'entiers négatifs, positifs ou nuls.
À tout moment, si sa santé atteint zéro ou moins, il perd une vie et sa santé revient à sa santé de départ.
Votre programme devrait signaler le nombre de décès qu'il lui reste. S'il reste zéro ou moins, vous devez dead
plutôt produire .
C'est le code-golf , donc le code le plus court en octets gagne!
Cas de test
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
la source
la source
Réponses:
Gelée ,
302826 octetsEssayez-le en ligne!
Comment ça fonctionne
la source
Japt,
403932 octetsEssayez-le en ligne!
Comment ça fonctionne
Tout en essayant de golf hier soir (loin d'un ordinateur, pas moins), je suis tombé sur un remplacement intéressant pour
>0
:¬
. Sur les nombres, cela prend la racine carrée, qui renvoieNaN
pour les nombres négatifs.NaN
est fausse, donc cela retourne exactement la même vérité / fausse que>0
.L' extension de cette astuce un peu plus loin, nous pouvons réinitialiser T à U ssi il est
>=0
en seulement cinq octets:T¬²ªU
. Comment cela marche-t-il? Nous allons jeter un coup d'oeil:Comme vous pouvez le voir,
T¬²
renvoieNaN
ifT
est négatif; sinon, il revientT
. DepuisNaN
et0
sont tous deux fausses, cela fournit un moyen facile de réinitialiser la santé du ninjaªU
. Cette astuce est également utilisée pour restituer les vies du ninja si ce nombre est positif ou"dead"
négatif.Mettre tout cela ensemble:
Si l'entrée est garantie non négative, voire positive, on peut jouer au golf de 1 ou 4 octets:
la source
JavaScript ES6,
62 6058 octets4 octets enregistrés grâce à @ETHproductions
Essayez-le en ligne (tous les navigateurs fonctionnent)
Explication
la source
d--&&a
, oub.reduce(...)&&d<1?"dead":d
?map
batreduce
dans la plupart des scénarios:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
est de 57..reduce(...)&&
cela fonctionnerait à cause des.reduce
retours0
, cela ne fonctionnera pas.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
place?CJam, 35 octets
Essayez-le en ligne!
la source
Haskell,
817775 octetsExemple d'utilisation:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
la source
Pyth, 32
Notez qu'il y a un espace de tête. Ce n'est probablement pas la meilleure approche, mais c'est la première chose qui m'est venue à l'esprit. Il réduit la sur-entrée en ajoutant des valeurs à la santé du ninja, en incrémentant un compteur et en réinitialisant la santé lorsqu'elle tombe en dessous de zéro. Nous ajoutons un zéro à la fin de la liste pour compter si le dernier changement tue le ninja, puis vérifions simplement si le ninja est mort. Le cas de santé de départ zéro est codé en dur.
Suite de tests
la source
MATL, 32
Explication
La pile ressemble maintenant à ceci (pour l'entrée
100, [-20, 5, -50, 15, -30, -30, 10]
):Pop le tableau et la boucle
Si la santé est nulle, mettez le compteur de morts à zéro. Traitement des cas spéciaux pour
initial health = 0
.Supprimer la valeur de rechargement de la pile
Si le compteur de décès est de zéro ou moins, supprimez-le et imprimez «mort» à la place.
la source
TeaScript ,
36 3431 octetsSimilaire à ma réponse JavaScript. les 4 derniers caractères sont la décompression de la chaîne "morte".
L'interpréteur en ligne de TeaScript ne prend pas en charge l'entrée de tableau, vous devrez donc ouvrir la console et l'exécuter en tapant:
Explication
la source
Python 2,7,
826655106 octetsMerci à @RikerW pour -16 octets.:(Merci à @Maltysen pour -11 octets.:(Saisissez d'abord la santé, puis entrez, puis les événements sous forme de liste.
la source
C # 207
Prend l'entrée via le flux d'arguments. Le premier argument est la quantité de santé et tout le reste est la liste des événements.
Version lisible / non golfée
Exemples:
CSharp.exe 3 => 9
CSharp.exe 100-20 5 -50 15-30-30 10 => 8
(Psst.) CSharp.exe est le nom utilisé comme exemple. Vous devez appeler comme ceci en réalité: [program_name.exe] arguments, sans les parenthèses carrées.
la source