Tor:
Bei zwei Kreaturen mit optionalen Kampffähigkeiten werden eindeutige, aber konsistente Werte zurückgegeben, die angeben, welche Kreaturen gegebenenfalls gestorben sind.
Eingang:
#Longest form:
[[P,T, "<abilities>"], [P,T, "<abilities>"]]
#Shortest form:
[[P,T], [P,T]]
Jede Kreatur wird in der Form von gegeben [P,T,"<abilities>"]
. Es wird in der Form sein [P,T]
, [P,T,""]
oder [P,T,0]
wenn es keine Fähigkeiten hat, deine Wahl in der Form. P ist eine ganze Zahl> = 0, T ist eine ganze Zahl> = 1. <abilities>
ist eine Teilmenge von "DFI"
oder kann auf Wunsch über eine einzelne Zahl / Bitfolge dargestellt werden. Die Reihenfolge der Flaggen liegt ebenfalls bei Ihnen.
Kampfmechanik:
Jede Kreatur hat zwei Werte, Kraft und Zähigkeit in dieser Reihenfolge und optionale Fähigkeiten. Die Stärke einer Kreatur ist> = 0. Die Zähigkeit einer Kreatur ist> = 1.
Jede Kreatur fügt der gegnerischen Kreatur gleichzeitig Schaden in Höhe ihrer Stärke zu (es sei denn, man hat einen Erstschlag ausgeführt). Wenn der Wert größer oder gleich der Zähigkeit des Gegners ist, stirbt er (sofern er nicht unzerstörbar ist).
Beispiel: Alice ist a 2/2
, Bob ist a 3/4
, beide ohne Fähigkeiten. Alice fügt Bob 2 Schadenspunkte zu und erhält 3 Schadenspunkte zurück. Alice's Zähigkeit ist 2, also wird es sterben, Bob's Zähigkeit ist 4, also wird es leben.
Es gibt nur 3 optionale Fähigkeiten, die wir berücksichtigen werden (obwohl es mehr im Spiel gibt). Dies werden Ein-Zeichen-Flags sein:
- [D] eathtouch: Jeder Schaden (X> 0) gilt als tödlich.
- [F] irst Strike: Verursacht zuerst seinen Schaden und kann die andere Kreatur töten, bevor sie zurückgreifen kann. Wenn beide Kreaturen einen Erstschlag haben, löse den Kampf wie gewohnt.
- [I] unzerstörbar: Keine Schadensmenge gilt als tödlich, einschließlich Todesberührung.
Ausgabe:
Beliebiger konsistenter Wert für jeden der folgenden vier Fälle. Geben Sie bitte die vier Werte in Ihrer Antwort an. Beispiel für einen Rückgabewert in Parens:
- Keine der Kreaturen ist gestorben (0)
- 1. Kreatur gestorben (1)
- 2. Kreatur gestorben (2)
- Beide Kreaturen starben (3)
Regeln:
- Bei der Eingabe sind garantiert zwei korrekt formatierte Kreaturen vorhanden.
- Wenn Sie Charaktere für Fähigkeiten verwenden, können Sie davon ausgehen, dass diese nach Ihren Wünschen sortiert sind. Geben Sie jedoch gegebenenfalls die verwendete Reihenfolge an.
- Wenn Sie eine Zahl / Bitfolge für Fähigkeiten verwenden, geben Sie an, welche Codierung Sie verwenden. zB:
111
istD/F/I
,7
istD/F/I
, etc. - Wenn eine Kreatur keine Fähigkeiten besitzt, kann sie auch als
[P,T, ""]
oder in der entsprechenden Anzahl genommen werden - Standardschlupflöcher verboten
- Das ist Code-Golf, also gewinnt der kürzeste Code.
Beispiele:
Input: [[2,2], [1,1]]
Output: 2nd Dies
Input: [[0,2], [0,1]] #0/2 vs 0/1
Output: Neither Die
Input: [[2,1], [2,1]] #2/1 vs 2/1
Output: Both Die
Input: [[1,1, "D"], [2,2]] #1/1 Deathtoucher vs 2/2
Output: Both Die
Input: [[2,2], [0,1, "D"]] #2/2 vs 0/1 Deathtoucher
Output: 2nd Dies
Input: [[2,2], [1,1, "DF"]] #2/2 vs 1/1 Deathtouch First-striker
Output: 1st Dies
Input: [[0,2, "D"], [0,1, "DF"]] #0/2 Deathtoucher vs 0/1 Deathtouch First-striker
Output: Neither Die
Input: [[2,2], [2,2, "F"]] #2/2 vs 2/2 First-striker
Output: 1st Dies
Input: [[2,2, "I"], [1,1, "DF"]] #2/2 Indestructible vs 1/1 Deathtouch First-striker
Output: 2nd Dies
Input: [[9999,9999], [1,1, "I"]] #9999/9999 vs 1/1 Indestructible
Output: Neither Die
Input: [[2,2, "F"], [1,1, "F"]] #2/2 First-Striker vs 1/1 First-Striker
Output: 2nd Dies
#9/9 Deathtouch, Indestructible First-Striker vs 9/9 Deathtouch, Indestructible First-Striker
Input: [[9,9, "DFI"], [9,9, "DFI"]]
Output: Neither Die
quelle
D => 0, F => 1, I => 2
Antworten:
Perl 5 , 248 Bytes
... ohne Leerzeichen und Zeilenumbrüche:
Probieren Sie es online!
Meine ungolfed Version mit den zehn Tests von @Veskah (OP) besteht die folgenden Tests:
quelle
JavaScript,
137125120111 BytesIch benutze Bitmap-Nummern für Fähigkeiten D = 4 F = 2 I = 1
"DFI"
wäre7
. Meine Ausgabe ist Weder Gestorben0
, 1. Gestorben1
, 2. Gestorben2
, Beide sind gestorben3
.Tests mit:
Dies war mein erster Arbeitscode
Was ich auf dieses Zwischenprodukt reduziert habe:
quelle
JavaScript (ES6),
83-76ByteNimmt Eingaben als 6 verschiedene Argumente auf: 2 x (Kraft, Zähigkeit, Fähigkeiten). Fähigkeiten werden als Bitmasken erwartet mit:
Probieren Sie es online!
Kommentiert
quelle
C (GCC) ,
11411395 BytesViel Golf dank Ceilingcat und Logern.
Kompilieren mit
-DZ=P,T,F,p,t,f)
.Probieren Sie es online!
Wir überprüfen (unabhängig, aufgrund der Symmetrie der Kampfmechanik), ob jede der Kreaturen den Kampf überlebt. Dies geschieht, wenn eine der beiden Bedingungen erfüllt ist:
(Die früheren Bedingungen sind wichtiger).
Die Eingaben sind Kraft und Zähigkeit als ganze Zahlen und Fähigkeiten als Bitfeld (1 = unzerstörbar, 2 = Todesberührung, 4 = Erstschlag), die Ausgabe ist auch ein Bitfeld (1 = Erste Kreatur überlebt, 2 = Zweite Kreatur überlebt).
quelle
-DZ=P,T,F,p,t,f)
96 Bytes-Probieren Sie es online!P=…
stattreturn …
und das Newline Entfernen führt zu 85 Byte.&&
,||
mit bitweise&
,|
Retina 0.8.2 , 123 Bytes
Probieren Sie es online! Link enthält Testfälle, obwohl ich ersetzt habe
9
für99999
für die Geschwindigkeit. Eingabe verwendet die BuchstabenDFI
obwohlD
muss precedeI
. Die Ausgabe erfolgt im Format1
für Überlebende und0
für Dies. Erläuterung:Konvertieren Sie die Statistiken in unary.
Tauschen Sie die Statistiken vorübergehend aus.
Zwei
F
s streichen aus.Todesberührung senkt die Zähigkeit des Gegners auf 1.
Unzerstörbar verringert die Kraft des Gegners auf 0.
Schalten Sie die Zähigkeit zurück, so dass Sie jetzt P2, T1, F1, P1, T2, F2 haben
Wenn die Zähigkeit höher ist als die Stärke des Gegners, überlebt sie.
Wenn beide sterben würden, überlebt der mit First Strike.
Ansonsten macht First Strike keinen Unterschied.
quelle
C ++,
177131127121 BytesHier ist meine nicht so kurze Lösung in C ++. Fähigkeiten sind 3 Bits für jede Kreatur:
Und es gibt einfach 0 zurück : wenn niemand stirbt, 1 : wenn die ersten Kreaturen sterben, 2 : wenn die zweiten Kreaturen sterben und 3 : wenn beide Kreaturen sterben.
Probieren Sie es online!
C ++,
8581 Bytes (alternativ)Durch leichtes Betrügen und Erfassen der Variablen in Lambda, ohne sie als Argumente zu übergeben, können 81 Byte erreicht werden. Ich weiß nicht, ob das eine akzeptable Lösung ist, also poste ich sie als Alternative.
Probieren Sie es online!
quelle
Perl 5, 245 Bytes
Laufen Sie mit
-lapE
Ungolfed:
"Todesberührung" bedeutet "Ihre Kraft wird jetzt mit der Zähigkeit Ihres Feindes multipliziert", und "unzerstörbar" bedeutet "die Kraft Ihres Feindes ist jetzt Null", wobei letzteres Vorrang hat. Der Code führt zwei Runden aus, eine, in der nur die Erstschlagenden angreifen können, und die andere, in der nur Nicht-Erstschlagende angreifen können. Wenn die erste Runde zum Tod führt, findet die zweite Runde nicht statt. Da wir uns bereits zu Beginn mit der Todesberührung befasst haben und unzerstörbar sind, ist "Tod" so einfach wie die Überprüfung, ob die Zähigkeit größer als Null ist oder nicht.
quelle