Im ursprünglichen Shantae-Spiel gibt es Transformationstänze, die Sie rechtzeitig mit dem D-Pad, A und B eingeben müssen. Wenn Sie während des Tanzens eine vordefinierte Sequenz abschließen, verwandeln Sie sich in die entsprechende Form (oder teleportieren oder heilen). . Ihre Aufgabe ist es, den entsprechenden Effekt auszugeben, wenn Sie eine Eingabe erhalten. Der Haken ist, dass Sie möglicherweise vorher und nachher irrelevante Tanzbewegungen in der Eingabe erhalten und dass möglicherweise nicht einmal ein Tanz in der Eingabe vorhanden ist.
Die Tänze
Verwendung UDLRAB
für Tanzbewegungen:
- Affe:
DR
- Elefant:
DL
- Spinne:
DA
- Harpyie:
DB
- Tinkerbat:
DUU
- Heilen:
DUA
- Scuttle Town:
DULR
- Wasserstadt:
DURLAB
- Oasenstadt:
DURRBA
- Zombie-Karawane:
DULLBA
- Banditenstadt:
DUBLBR
Codierung
Eingabe: Eine Folge von Tanzbewegungen. Dies kann die Werte Up, Down, Left, Right, B, A und Wait enthalten. Verwenden Sie eine geeignete Codierung.
Ausgabe: Ein Wert, der dem ersten übereinstimmenden Tanz in der Sequenz entspricht, oder ein eindeutiger Wert, wenn keine Übereinstimmung vorliegt. Sie können dies auf jede bequeme Weise codieren.
Beispiele
Verwenden .
zum Warten:
DR
→ AffeUUU.DLUAB
→ ElefantL.DDBALL
→ HarpyieLRLRDURURLAB
→ Keine ÜbereinstimmungDUBLBR
→ BanditenstadtDURLBA
→ Keine ÜbereinstimmungDDUDR
→ AffeRLAB
→ Keine Übereinstimmung.DUUBBB
→ TinkerbatDADRDL
→ Spinne.DURRBADR
→ OasenstadtDURR.BA
→ Keine Übereinstimmung
Andere Regeln / Hinweise
- Es gelten Standardregeln für Lücken und E / A-Methoden
- Beschreiben Sie Ihre Kodierung für Tanzbewegungen und passende Tänze.
- Die Eingabe kann mehr als einen Tanz enthalten. Wenn dies der Fall ist, stimmen Sie nur mit dem ersten überein, der in der Eingabe angezeigt wird.
- Warten unterbricht Tänze.
quelle
DURLAB
Water TownAntworten:
JavaScript (ES6),
92 88 6159 Byte2 Bytes dank eines Vorschlags von @tsh gespeichert
Erwartet
UdLRAB
die Tanzbewegungen und das.
Warten. Ausgaben entweder undefiniert, wenn keine Übereinstimmung vorliegt , oder die Reihenfolge des übereinstimmenden Tanzes (z. B.dR
für Monkey oderdURLAB
Water Town).Probieren Sie es online aus!
oder Versuchen Sie es mit verbesserter Ausgabe
quelle
R|L|A|B
->[RLAB]
?d([A-R]|U...)
ist es anscheinend in Ordnung, da jede bequeme Codierung auch für die Eingabe verwendet werden kann. Vielen Dank!JavaScript (Node.js) ,
179164153148137115 BytesProbieren Sie es online aus!
-11 Bytes dank Arnauld's Antwort, die mir klar macht, dass die Ausgabe vereinfacht werden kann
-8 Bytes dank fehlerhaftem Chat, der mir hilft, leere Schecks für Golf-Arrays zu erstellen
-12 Bytes dank Shaggy
Übernimmt die Eingabe als Zeichenfolge in derselben Formatierung wie OP-Testfälle.
Gibt die übereinstimmende Tanzsaite abzüglich der Führung
D
für ein Match oderundefined
für kein Match aus.Die Ganzzahl entspricht dem Index der Übereinstimmung in diesem Array (0-indiziert):
Wahrscheinlich Platz zum Golfen, besonders beim Komprimieren des Tanzbewegungssets.
Erläuterung
Allgemeiner Ansatz
Durchlaufen Sie die Eingabezeichenfolge, entfernen Sie jedes Mal das erste Zeichen und prüfen Sie, ob die resultierende Zeichenfolge mit einer gültigen Tanzzeichenfolge beginnt.
Das Ganze ist nur eine for-Schleife innerhalb einer for-Schleife. Ich werde es in drei Teile
aufteilen : - Zustand
- innere Schleife
- äußerer Pfosten
Bedingung
Dies ist die Beendigungsbedingung für die äußere Schleife, dh während dies zutrifft, wird die Schleife fortgesetzt.
Ziemlich einfach:
d
ist eine Zeichenfolge, in JS sind leere Zeichenfolgen falsey "d
ist nicht leer".Innere Schleife
Dies ist das Zeug, das in jeder Schleife passiert:
Also definieren wir zuerst ein Array mit:
Dadurch wird eine Reihe aller Tanzbewegungszeichenfolgen erstellt, wobei die
D
am Anfang jeder von ihnen fehlen (alle beginnen mitD
). Wir werden dieses Array nennen.x
Hier gibt es wahrscheinlich ein beträchtliches Golfpotential.
Wir durchlaufen dann jedes Element in
x
(gespeichert inz
) und führen Folgendes aus:Dies wird verwendet
d.search
, um den Index in der Zeichenfolge von zurückzugeben'D'+z
. Wenn und nur wennd
beginnt mit'D'+z
, kehrt das0
, was ein Falsey Wert in JS ist.Als solches
!d.search
wird nur wahr sein, wenn die Zeichenfolge mit beginnt'D'+z
.Hinweis: Aus diesem Grund lassen wir das
D
s in wegx
, da es uns 10 Bytes (1 pro Tanz) spart und uns bei dieser Suche nur ein einziges Byte kostetWenn die Suche übereinstimmt, kehren wir zurück
z
. Dies ist der Tanz, den wir gefunden haben, ohne die FührungD
.Wenn nicht, schleifen wir weiter.
Äußerer Pfosten
Dies geschieht am Ende jeder Iteration der äußeren Schleife:
Entfernen Sie einfach das erste Zeichen aus
d
Keine Übereinstimmung
Wenn
d
leer wird und keine Übereinstimmung gefunden wurde, ist das Ende der Funktion erreicht. Dies wird implizitundefined
gemäß dem Standardverhalten von JavaScript zurückgegebenquelle
substr -> slice
Änderung gerade selbst vorgenommen und vergesse immer wieder, dassd
es sich um eine Zeichenfolge handelt, nicht um ein Array. Leere Saiten sind falsch: P Und guter Fang an den Zahnspangen, ich habe die ganze 1-Kind-Aussage vergessend.search
, dass 0 zurückgegeben wird, wenn sich died
Suchzeichenfolge am Anfang von befindet , was natürlich ein Falsey-Wert istindexOf
aber es unterstützt RegEx, was hier irrelevant ist.Netzhaut ,
53434237 BytesProbieren Sie es online aus!
Weicht geringfügig von der Standardeingabe und -ausgabe ab, um
;:
as zuDU
verwenden. Inspiration von tsh , spart 5 Bytes.Passt zum ersten Tanz und gibt ihn aus, nachdem er Arnauld's Antwort gesehen hat . 10 Bytes wurden gespart, da Neil vorgeschlagen hat , die Listenstufe zu verwenden
L
und die Ausgabe auf die erste Übereinstimmung zu beschränken. Ein Byte gespart dank tsh Verkürzung der Regex.Die Kopf- und Fußzeile ermöglichen nur mehrere Eingaben und machen die Ausgabe lesbar.
quelle
1!
anstelle von in Retina 0.8.2 übersetzt werden0L
, aber in diesem Fall funktioniert die Fußzeile nicht (1M!
funktioniert auch mit der Fußzeile).L
.R|L|A|B
->[RLAB]
?D[RLAB]|DU(...)
stattdessen?Perl 5
-p
, 47 BytesProbieren Sie es online aus!
Gibt den Code des Tanzes zurück (zulässig gemäß @ Arnauld's Kommentar) oder leer, wenn keine Übereinstimmung vorliegt.
quelle
Holzkohle , 48 Bytes
Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:
Teilen Sie die komprimierte Zeichenfolge
RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR
(die alle Tänze außer der führenden enthältD
) aufD
und stellen Sie dannD
jedem Eintrag das Zurück voran.Verketten Sie ihn für jeden Tanz mit der Eingabe und suchen Sie die erste Position des Tanzes in der Verkettung. Nehmen Sie auch die Länge des Tanzes. Für Tänze, die nicht gefunden wurden, bedeutet dies, dass das Ergebnis die Länge der Eingabezeichenfolge anstelle von ist
-1
.Nehmen Sie das Minimum dieser Ergebnisse, dh die Position und Länge des Tanzes, der zuerst erschien.
Extrahieren Sie diesen Tanz aus der Originalsaite.
quelle
Gelee ,
3328 BytesProbieren Sie es online aus!
Nimmt als Eingabe eine Liste von Ganzzahlen, die die Bewegungen darstellen:
Gibt eine umschlossene Ganzzahl für die Antwort oder eine Liste aller dieser Ganzzahlen für keine Übereinstimmung zurück:
Der TIO-Link enthält Code in der Fußzeile, um diese wieder in die Zeichenfolgen in der Frage zu übersetzen. Er wird jedoch nicht benötigt, damit das Programm mit den hier angegebenen Ganzzahlen funktioniert.
quelle
05AB1E , 104 Bytes
Probieren Sie es online aus!
Ich habe diese Monstrosität geschrieben, ohne zu wissen, dass ich Zahlen für Namensbewegungen verwenden könnte ...
quelle
sfk ,
11991 BytesProbieren Sie es online aus!
Gibt den ersten Tanz als Folge von Bewegungen.
(
xex
ist nur ein Stream-Editor und in diesem Fall_<pattern>_
Suchtext)quelle
05AB1E ,
2827 Bytes1 Byte dank Grimy gespeichert
Probieren Sie es online aus!
Gibt entweder die Übereinstimmung (dh
10
für Monkey) oder-1
keine Übereinstimmung ausErläuterung
quelle
¦
, aber ich dachte nicht daran, sie neu zu ordnen, nachdem ich die Bedeutung der Zahlen geändert hatte :)