Das Spiel Waving Hands befindet sich irgendwo zwischen einer Stift-Papier-Magie: The Gathering und einer sehr aufwändigen Steinpapierschere. In jeder Runde schreiben Sie eine von acht Gesten für jede Hand auf:
- wiggled
F
Ingers - angebotene
P
Alm S
NickerchenW
aveD
igit zeigtC
Runde- sta
B
N
etwas anderes
Es gibt nur wenige wichtige Regeln, die Vorrang vor den anderen haben:
- Wenn beide Hände Geste
P
automatisch übergeben . (Dies ist eine Vereinfachung, aber wir werden damit weitermachen.) - Es kann immer nur eine Hand gestikulieren
B
.
Eine Reihe von Gesten, die von derselben Hand ausgeführt werden, können einen Zauber wirken, wobei jeder Zauber an eine bestimmte Sequenz gebunden ist. Diese Sequenzen können sich überschneiden, aber jede Geste kann nur als letzte Geste eines einzelnen Zaubers verwendet werden (Sie können also bis zu zwei Zaubersprüche in einer einzigen Runde erstellen). Bei einigen Zaubersprüchen muss eine Geste mit beiden Händen gleichzeitig ausgeführt werden.
Ihre Aufgabe ist es, anhand einer Liste von Gesten für jede Hand zu bestimmen, welche Zauber in der aktuellen Runde gewirkt werden können. Für jede Hand repräsentiert der letzte Buchstabe in der Liste die Geste, die für die aktuelle Runde ausgewählt wurde.
Hier ist die Liste der Gestensequenzen. Großbuchstaben beziehen sich auf eine Geste, die von einer einzelnen Hand ausgeführt wird, Kleinbuchstaben beziehen sich auf eine Geste, die mit beiden Händen ausgeführt wird.
B Stab
cDPW Dispel magic
cSWWS Summon elemental
cw Magic mirror
DFFDD Lightning bolt
DFPW Cure heavy wounds
DFW Cure light wounds
DPP Amnesia
DSF Confusion
DSFFFc Disease
DWFFd Blindness
DWSSSP Delayed effect
DWWFWc Raise dead
DWWFWD Poison
FFF Paralysis
FPSFW Summon troll
FSSDD Fireball
P Shield
p Surrender
PDWP Remove enchantment
PPws Invisibility
PSDD Charm monster
PSDF Charm person
PSFW Summon ogre
PWPFSSSD Finger of death
PWPWWc Haste
SD Missile
SFW Summon goblin
SPF Antispell
SPFPSDW Permanency
SPPc Time stop
SSFP Resist cold
SWD Fear
SWWc Fire storm
WDDc Lightning bolt
WFP Cause light wounds
WFPSFW Summon giant
WPFD Cause heavy wounds
WPP Counterspell
WSSc Ice storm
WWFP Resist heat
WWP Protection from evil
WWS Counterspell
Ja, Lightning bolt
und Counterspell
haben jeweils zwei verschiedene Sequenzen.
Sie können ein Programm oder eine Funktion über STDIN, Befehlszeilenargument oder Funktionsargument schreiben und Eingaben in einem beliebigen Listen- oder Zeichenfolgenformat vornehmen, sofern diese nicht vorverarbeitet sind. Sie können Zauberpaare über den Rückgabewert oder durch Drucken auf STDOUT ausgeben. Auch hier können Sie ein beliebiges praktisches Listen- oder Zeichenfolgenformat verwenden, solange die Ausgabe eindeutig ist.
Sie können davon ausgehen, dass die Sequenzen für die linke und die rechte Hand gleich lang und gültig sind (insbesondere B
werden sie niemals von zwei Händen gleichzeitig ausgeführt). Beachten Sie, dass die Eingabe nur Großbuchstaben enthält. In der obigen Liste werden nur Kleinbuchstaben verwendet, um anzuzeigen, dass beide Hände dieselbe Geste (in Großbuchstaben) ausführen müssen.
Bei Zaubersprüchen, die mit einer Zweihandbewegung enden, sollten Sie nur einen einzigen Zauberspruch ausgeben. Wenn eine Hand keinen Zauber ausführen kann, muss dies durch eine Zeichenfolge angezeigt werden, die nur einen Bindestrich enthält -
.
Dies ist Code Golf, daher gewinnt die kürzeste Antwort (in Bytes).
Beispiele
Jedes Beispiel besteht aus drei Zeilen: der linken Sequenz, der rechten Sequenz (beide Eingaben; die Geste ganz rechts ist die aktuellste) und der Liste aller möglichen Zauberkombinationen (der Ausgabe).
WFP
WWS
[["Cause light wounds","Counterspell"],["Shield","Counterspell"]]
SD
BB
[["Missile","Stab"]]
WWP
WPP
[["Surrender"]]
DFW
CCW
[["Cure light wounds","-"]]
FFW
WWF
[["-","-"]]
DCW
CCW
[["Magic mirror"]]
WFPSFW
PPDDPP
[["Summon goblin","Shield"],["Summon ogre","Shield"],["Summon troll","Shield"],
["Summon giant","Shield"],["Summon goblin","Amnesia"],["Summon ogre","Amnesia"],
["Summon troll","Amnesia"],["Summon giant","Amnesia"]]
BSWWS
CSWWS
[["Counterspell","Counterspell"]]
CSWWS
CSWWS
[["Counterspell","Counterspell"],["Counterspell","Summon elemental"],
["Summon elemental","Counterspell"],["Summon elemental","Summon elemental"]]
PWPWWC
BBSPPC
[["Haste"],["Time stop"]]
Antworten:
CJam,
987 931 925663 BytesBeachten Sie, dass dies nur alle ASCII-Zeichen des ASCII-Codes 32 bis 255 enthält. Einige Zeichen werden möglicherweise von SE übersprungen. Kopieren Sie den Code daher besser über den obigen Link
Dieser obige Code ist eine basiskonvertierte Version der folgenden 925-Byte-Lösung:
Newlines sind nur zur Show.
Dies kann viel Golf gespielt werden , aber zumindest habe ich es geschafft, alle Testfälle -_- zu bestehen.Dies dauerte länger als erwartet.
UPDATE 1 - hat den Code-Teil ein bisschen gespielt. Noch Spielraum für mehr. Der Saitenteil kann auch mit Golf / Basis umgebaut werden, aber ich werde jetzt darauf verzichten, da alle anderen Antworten dies auch nicht tun.
UPDATE 2 - Fertig mit dem Golfspielen, jetzt Zeit zum Komprimieren dieser Saite.
UPDATE 3 - Base hat die Zeichenfolge konvertiert, um die Codegröße auf 663 Byte zu reduzieren (Sie kann auf 640 Byte reduziert werden, aber es gibt auch 0 bis 31 ASCII-Codezeichen, die wirklich schwer zu verarbeiten sind und auf die ich nur eingehen werde wenn ich wieder geschlagen werde).
Probieren Sie es hier online aus
quelle
Python 2, 685
Definiert eine Funktion
f
, die zwei Zeichenfolgen akzeptiert. Der Rückgabewert ist die Zeichenfolge,Surrender
wenn sich der Spieler ergibt . Andernfalls besteht ein Satz aus Zeichenfolgen (die Zweihandzauber anzeigen) und Tupeln mit einer Länge von 2 Zeichenfolgen (die separate Zaubersprüche für jede Hand anzeigen).Base64-codierte Quelle:
Die Quelle hat die Form
exec "eu352909HE%#NTHQh".decode('zip')
, die den folgenden Code ausführt:quelle
Java,
15651388Rufen Sie an mit
java M %leftString %rightString
. Ausgaben,Surrender
wenn sich der Spieler ergibt. Andernfalls wird eine Zeichenfolge in dieser Form ausgegebenbothHandSpell;oneHandSpell,oneHandSpell;...
. Beachten Sie, dass dies eine Einzeilerlösung für ein ziemlich kompliziertes Problem ist. :)Eingerückt:
Bearbeiten: Verwendet Peters Vorschlag, um ein String-Array mit weniger Code zu erstellen.
Hinweise zur Verbesserung wären willkommen.
quelle
JavaScript (ES6),
1070941Base64-codiert:
Sie führen es
eval(atob("Zj0obCxyK..."))
in der Firefox-Konsole aus.Golfcode (kann Zeichen enthalten, die von Stack Exchange nicht unterstützt werden):
Da das Zauberwörterbuch nur aus Buchstaben besteht, können wir es als base64-codierte Zeichenfolge behandeln und Zahlen als Trennzeichen und Leerzeichen verwenden. Ich habe die base64-ähnliche Zeichenfolge in eine binäre Zeichenfolge "dekodiert", die 3/4 der Größe des Originals entspricht.
Mild ungolfed:
Ein Golf, den ich besonders mag, ist das Testen auf leere Arrays mit
array - 1
.[] - 1 => "" - 1 => 0 - 1 => -1 (truthy)
["foo"] - 1 => "foo" - 1 => NaN (falsey)
quelle