Inspiriert von diesem Gespräch im Chat.
Ihr Ziel bei dieser Herausforderung ist es, einen Ninja zu emulieren und zu zählen, wie viele Todesfälle er noch hat.
Technische Daten
Ihr Ninja beginnt mit 9 Toten. Er erhält auch eine integrale Startgesundheit als Input.
Dann nimmt er eine Liste von Ereignissen in seinem Leben als Eingabe, die seine Gesundheit verändern. Dies können negative, positive oder ganze Zahlen von Null sein.
Zu jedem Zeitpunkt, wenn sein Gesundheitszustand auf oder unter Null sinkt, verliert er ein Leben und sein Gesundheitszustand kehrt zum Ausgangszustand zurück.
Ihr Programm sollte die Anzahl der Todesfälle anzeigen, die er hinterlassen hat. Wenn er null oder weniger übrig hat, sollten Sie dead
stattdessen ausgeben .
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes !
Testfälle
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
quelle
Antworten:
Jelly ,
302826 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Japt,
403932 BytesProbieren Sie es online!
Wie es funktioniert
Während diese letzte Nacht zum Golf versuchen (weg von einem Computer, nicht weniger), lief ich auf einen interessanten Ersatz für
>0
:¬
. Für Zahlen wird die Quadratwurzel verwendet, dieNaN
für negative Zahlen zurückgegeben wird.NaN
ist falsch, so dass dies genau das Gleiche wie wahrheitsgemäß / falsch zurückgibt>0
.Die Ausweitung dieser Trick etwas weiter, können wir T U zurückgesetzt iff es ist
>=0
in nur fünf Bytes:T¬²ªU
. Wie funktioniert das? Lass uns einen Blick darauf werfen:Wie Sie sehen, wird
T¬²
zurückgegeben,NaN
wennT
negativ ist. Andernfalls wird es zurückgegebenT
. DaNaN
und0
sind beide falsch, bietet dies eine einfache Möglichkeit, die Gesundheit des Ninja mit zurückzusetzenªU
. Dieser Trick wird auch verwendet, um die verbleibenden Leben der Ninja zurückzugeben, wenn diese Zahl positiv oder"dead"
negativ ist.Alles zusammen:
Wenn die Eingabe garantiert nicht negativ oder sogar positiv ist, können wir 1 oder 4 Bytes Golf spielen:
quelle
JavaScript ES6,
62 6058 Bytes4 Bytes gespart dank @ETHproductions
Online ausprobieren (Alle Browser funktionieren)
Erläuterung
quelle
d--&&a
funktionieren, oderb.reduce(...)&&d<1?"dead":d
?map
Schlägereduce
in den meisten Szenarien:(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i)&&d<1?"dead":d
ist 57..reduce(...)&&
es aufgrund von.reduce
Rücksendungen funktionieren würde0
, es wird nicht funktionieren.(a,b,d=9,l=a)=>b.map(i=>l=l+i<1?d--&&a:l+i,a)|d<1?"dead":d
stattdessen funktionieren?CJam, 35 Bytes
Probieren Sie es online!
quelle
Haskell,
817775 BytesAnwendungsbeispiel:
p 10 0 100 [-20, 5, -50, 15, -30, -30, 10]
->"8"
quelle
Pyth, 32
Beachten Sie, dass ein führendes Leerzeichen vorhanden ist. Dies ist wahrscheinlich nicht der beste Ansatz, aber es war das erste, was mir in den Sinn kam. Die Eingabe wird reduziert, indem die Werte zum Gesundheitszustand des Ninjas addiert werden und ein Zähler erhöht und der Gesundheitszustand zurückgesetzt wird, wenn er unter Null fällt. Wir fügen am Ende der Liste eine Null hinzu, um zu zählen, ob die letzte Änderung den Ninja tötet, und prüfen dann, ob der Ninja tot ist. Der Null-Start-Gesundheitsfall ist fest codiert.
Test Suite
quelle
MATL, 32
Erläuterung
Der Stack sieht jetzt so aus (für die Eingabe
100, [-20, 5, -50, 15, -30, -30, 10]
):Pop das Array und die Schleife
Wenn der Gesundheitszustand Null ist, setzen Sie den Todeszähler auf Null. Sonderfallbearbeitung für
initial health = 0
.Löschen Sie den Reload-Wert vom Stack
Wenn der Todeszähler Null oder weniger ist, löschen Sie ihn und drucken Sie stattdessen "tot".
quelle
TeaScript ,
36 3431 BytesÄhnlich wie bei meiner JavaScript-Antwort. Die letzten 4 Zeichen sind die Dekomprimierung der Zeichenfolge "dead".
Der Online-Interpreter von TeaScript unterstützt keine Array-Eingaben, daher müssen Sie die Konsole öffnen und Folgendes eingeben:
Erläuterung
quelle
Python 2.7,
826655106 BytesDanke an @RikerW für -16 Bytes.:(Vielen Dank an @Maltysen für -11 Bytes.:(Geben Sie zuerst health, dann enter und dann events in Listenform ein.
quelle
C # 207
Übernimmt die Eingabe durch den Argumentstrom. Das erste Argument ist die Menge an Gesundheit und der Rest ist die Liste der Ereignisse.
Lesbare / unbenutzte Version
Beispiele:
CSharp.exe 3 => 9
CSharp.exe 100 -20 5 -50 15 -30 -30 10 => 8
(Psst.) CSharp.exe ist der Name, der als Beispiel verwendet wird. In der Realität müssen Sie folgendermaßen vorgehen: [program_name.exe] Argumente ohne die eckigen Klammern.
quelle