Ihre Aufgabe ist einfach: Sagen Sie mir, wer den Kampf der Buchstaben gewinnt.
Die Truppen
Es gibt drei verschiedene "Truppen" in dieser Schlacht, die in dieser Tabelle zusammengefasst sind.
name | health | damage
A 25 25
B 100 5
C 10 50
Sie können drei eindeutige Zeichen verwenden, um die Truppen darzustellen, müssen jedoch angeben, ob es sich nicht um diese Buchstaben handelt.
Der Kampf
Angenommen, wir haben eine Beispielschlacht:
ABC # army 1
CBA # army 2
Jede Armee schießt wiederholt auf die am weitesten links stehende Einheit, bis sie tot ist. dann bewegen sie sich zur Truppe rechts und wiederholen. Also greift Armee 2 A
in Armee 1 an, bis sie A
tot ist, und bewegt sich B
dann zu C
. Armee 1 greift C
dann zuerst an B
, dann A
. Angenommen, die Armeen greifen gleichzeitig an, und daher feuern die Truppen immer, wenn sie vor der Runde am Leben waren und sich gleichzeitig gegenseitig töten können. Sie feuern in der Reihenfolge von links nach rechts.
Die Schlacht würde so ablaufen:
ABC
CBA
BC # A (25 hp) killed by C (-50 hp), B (100 hp) attacked by B (-5 hp) and A (-25 hp), has 70 hp
BA # C (10 hp) killed by A (-25 hp), B (100 hp) attacked by B (-5 hp) and C (-50 hp), has 45 hp
BC # B (70 hp) attacked by B (-5 hp) and A (-25 hp), has 40 hp
A # B (45 hp) killed by B (-5 hp) and C (-50 hp)
BC # B (40 hp) attacked by A (-25 hp), has 15 health
# A (25 hp) killed by B (-5 hp) and C (-50 hp), army 2 dead
Daher gewinnt Armee 1 die Schlacht!
Eingang
Zwei Saiten, die erste repräsentiert Armee 1 und die zweite Armee 2. Sie sind nicht unbedingt gleich groß (denn wer hat gesagt, dass es ein fairer Kampf wäre?)
Ausgabe
Drei eindeutige, konstante Werte, die den Gewinn von Armee 1, den Gewinn von Armee 2 oder das unwahrscheinliche Ereignis eines Unentschieden darstellen. Ja, es ist möglich, dass sich die letzten Truppen gegenseitig töten und mit einem Unentschieden enden.
Kämpfe
ABC
CBA
Army 1
CCCCC
CCCCC
Tie
CABCAB
ABBABBA
Army 2
Es gelten Standardlücken . Sie müssen ein vollständiges Programm einreichen.
Dies ist Code-Golf , kürzeste Lösung gewinnt.
A
BeatsB
undC
KrawattenB
undA
KrawattenC
. Wenn Sie einen derA
Werte20
ändern, wird er unentschiedenB
.Antworten:
Pyth
14597 BytesEin bisschen weniger naiv als zuvor.
Probieren Sie es online aus!
Erklärungen:
Lassen Sie uns das Programm in mehrere Teile schneiden.
Das Wörterbuch
Y
lautet :{'A': [25, 25], 'C': [10, 50], 'B': [100, 5]}
. Dann:An dieser Stelle
K
befindet sich eine Liste von Paaren, die die erste Armee darstellt. Jedes Paar dieser Liste ist ein Brief der Armee und ist(health, damage)
für diesen Brief.J
ist genau das gleiche, aber für die zweite Armee.g
ist eine Funktion, die zwei Armeen nimmt und der ersten den von der zweiten Armee verursachten Schaden zufügt. Jetzt:Wenn die while - Schleife zu Ende ist,
K
undJ
deren Endwert haben. Wenn beide leer sind, ist es ein Unentschieden; sonst gewinnt die nicht leere Armee. Das erledigt der letzte Code:Das ist es!
quelle
Haskell ,
199193179176171 BytesProbieren Sie es online aus!
Kleiner Trick: Teilen Sie alle Armeestatistiken durch 5.
quelle
C #, 446 Bytes
Formatierte Version:
Gibt 1 aus, wenn Armee1 gewinnt, 2 für Armee2 und 0 für Unentschieden
quelle
int[]
ich denke, Sie können sie kombinieren, `` <= 0` ist das gleiche wie<1
sicher? Benötigen Sie dastry-catch
?Javascript (ES6) -
316269 BytesIch bin mir sicher, dass dies höllisch gespielt werden kann, aber das habe ich mir ausgedacht :) Ich habe es geschafft, 47 Bytes zu sparen!
Ausgabe 0 für Unentschieden, 1 für Team 1 und 2 für Team 2.
Lesbar :
Demo :
quelle