Als ich ein Kind war, habe ich dieses Spiel oft gespielt.
Regeln
Es gibt zwei Spieler (nennen wir sie A und B), und jeder Spieler benutzt seine Hände als Waffen. Es gibt drei mögliche Züge:
Hände hoch, um Munition in Ihre Waffe zu laden.
Jede Waffe beginnt leer. Das Laden erhöht die Munition um eins.
Hände zeigen auf den anderen Spieler, um zu schießen.
Dies verringert die Munition um eins. Sie müssen mindestens eine Munitionseinheit haben, um schießen zu können.
Verschränkte Arme, um sich vor einem Schuss zu schützen.
Beide Spieler bewegen sich gleichzeitig. Wenn beide Spieler gleichzeitig schießen, treffen sich die Kugeln und das Spiel geht weiter. Das Spiel endet, wenn ein Spieler schießt, während der andere Munition lädt.
Schießen und leere Waffe gilt als Betrug . Wenn ein Spieler betrügt, während der andere eine rechtliche Handlung ausführt, verliert der Betrüger sofort. Wenn beide Spieler gleichzeitig schummeln, wird das Spiel fortgesetzt.
Betrugsversuche verringern die Munition nicht, daher kann sie niemals negativ sein.
Herausforderung
Geben Sie bei den Zügen der Spieler A und B an, welcher Spieler das Spiel gewonnen hat: 1
für Spieler A, -1
für Spieler B und 0
für ein Unentschieden. Sie können jedes andere Dreifach der Rückgabewerte verwenden, müssen jedoch in Ihrer Antwort angeben, welche Sie verwenden.
Das Spiel kann:
- enden, ohne alle Züge verarbeiten zu müssen;
- nicht mit den gegebenen Zügen enden, und daher wird es als Unentschieden betrachtet.
Die Eingabe kann erfolgen:
- als Saiten
- als Arrays / Listen von ganzen Zahlen
- auf andere Weise, die die Eingabe nicht vorverarbeitet
Vollständiges Programm oder Funktionen erlaubt. Da dies Code-Golf ist , gewinnt die kürzeste Antwort in Bytes!
Testfälle
A: "123331123"
B: "131122332"
-----^ Player B shoots player A and wins.
Output: -1
A: "111322213312"
B: "131332221133"
-------^ Player B cheats and loses.
Output: 1
A: "1333211232221"
B: "1213211322221"
----------^^ Both players cheat at the same time. The game continues.
Output: 0
A: "12333213112222212"
B: "13122213312232211"
| || ^---- Player A shoots player B and wins.
^-------^^------ Both players cheat at the same time. The game continues.
Output: 1
Antworten:
Gelee,
333224 BytesDies gibt 5 anstelle von -1 und 7 anstelle von 1 aus . Probieren Sie es online aus! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
Pyth,
48464947 BytesProbieren Sie es hier aus!
Vielen Dank an @isaacg für das Speichern von
24 Bytes!Nimmt die Eingabe als 2-Tupel mit der Liste der Züge von Spieler A zuerst und den Zügen von Spieler B zweitens vor. Die Ausgabe ist die gleiche wie bei der Herausforderung.
Erläuterung
Kurzübersicht
[cheating win, fair win]
mit den möglichen Werten-1, 0, 1
für jedes Tupel zu , um anzuzeigen, ob ein Spieler an diesem Punkt gewonnen hat (-1, 1
) oder ob das Spiel weitergeht (0
)[0,0]
, und das erste Nicht-Null-Element davon nehmen, das den Gewinner angibtCode-Aufschlüsselung
quelle
m|Fd
ist das gleiche wie|M
.M
das auch Splatting macht. Übrigens: Das Problem mit widersprüchlichen Lambda-Variablen, das wir im Chat besprochen haben, kostet mich hier mehrere Bytes: P,1 2
ist das gleiche wieS2
Python, 217 Bytes
Erläuterung : Nimmt A und B als Listen von Ganzzahlen. Geht einfach jedes Zugpaar durch, addiert oder subtrahiert bei Bedarf 1 und kehrt zurück, wenn jemand betrügt oder gewinnt. Macht dasselbe zweimal mit einer anderen for-Schleife, einmal für die Bewegung von A und einmal für die Bewegung von B. Addiert 1, wenn x unter 0 bis -1 fällt.
quelle
Java,
226212200196194 Bytes-14 Bytes durch Neuordnung der Logik
-12 Bytes dank Herrn Public , der darauf hinweist, wie eine ternäre Operation für die Aufnahmelogik verwendet werden kann
-4 Bytes durch Zusammendrücken der Lastlogik in einen Kurzschluss, wenn
-2 - Bytes , weil
==1
===<2
Eingang , wenn nur sein1
,2
,3
Verwendung und eingerückte Version:
Nicht mehr so einfach, die Spielregeln umzusetzen, aber einfach. Jeder Zyklus führt diese Operationen aus:
r
zum Verlierenr
nicht der Fall ist0
, geben Sie den Wert zurück, weil jemand betrogen hatx
ist eine Dummy-Variable, mit der der Compiler einen ternären Ausdruck verwenden kann.Warten Sie, Java ist kürzer als Python?
quelle
w==2&&m<1?r--:m++
int x=w==2?m<1?r--:r:m--;
Verwenden Sie für das erste Ternär weiterhin das x (da dies nur eine Dummy-Variable ist, damit das Ternär funktioniert) wiex=v==2?n<1?r++:r:n--;