Shantae Dance Matching

8

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 UDLRABfü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 → Affe
  • UUU.DLUAB → Elefant
  • L.DDBALL → Harpyie
  • LRLRDURURLABKeine Übereinstimmung
  • DUBLBR → Banditenstadt
  • DURLBAKeine Übereinstimmung
  • DDUDR → Affe
  • RLABKeine Übereinstimmung
  • .DUUBBB → Tinkerbat
  • DADRDL → Spinne
  • .DURRBADR → Oasenstadt
  • DURR.BAKeine Ü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.
Beefster
quelle
1
Verwandte
Beefster
Jetzt endet Testfall 4 in DURLABWater Town
Skidsdev
@ Skidsdev. Guter Fang. Ich wollte das dort zu einem No-Match-Testfall machen.
Beefster
1
Sie können dies auf jede bequeme Weise codieren : Dürfen wir die passende Sequenz zurückgeben, z. B. "DURRBA" für Oasis Town?
Arnauld
1
Zufällig: Vor langer Zeit wurden die Casinos (in einem Land, das ich nicht erwähne und das Sie wahrscheinlich nicht erraten und das nicht mein Land ist) (verbunden mit nur "Eingabe" und "Warten" (dh zeitgesteuerte Münzeinträge) verwendet Ich nur durch "Internet") hatte ihre Spielautomaten-Software an der Quelle gehackt, so dass ein Spieler seinen Input-Pot mit einer größeren Zahl multiplizieren konnte. Sie spielten, gewannen oder verloren und zahlten mit weit mehr aus, als sie eingegeben hatten. Es wurde zu gegebener Zeit entdeckt und behoben. Ich identifizierte die Methode anhand einer allgemeinen Beschreibung dessen, was insgesamt geschah - geliefert von einem verwirrten Sicherheitsermittler.
Russell McMahon

Antworten:

3

JavaScript (ES6),  92 88 61  59 Byte

2 Bytes dank eines Vorschlags von @tsh gespeichert

Erwartet UdLRABdie Tanzbewegungen und das .Warten. Ausgaben entweder undefiniert, wenn keine Übereinstimmung vorliegt , oder die Reihenfolge des übereinstimmenden Tanzes (z. B. dRfür Monkey oder dURLABWater Town).

s=>(/d([A-R]|U(U|A|LR|RLAB|RRBA|LLBA|BLBR))/.exec(s)||0)[0]

Probieren Sie es online aus!

oder Versuchen Sie es mit verbesserter Ausgabe

Arnauld
quelle
R|L|A|B-> [RLAB]?
tsh
@tsh Eigentlich d([A-R]|U...)ist es anscheinend in Ordnung, da jede bequeme Codierung auch für die Eingabe verwendet werden kann. Vielen Dank!
Arnauld
2

JavaScript (Node.js) , 179 164 153 148 137 115 Bytes

d=>{for(;d;d=d.slice(1))for(z of "R.L.A.B.UU.UA.ULR.URLAB.URRBA.ULLBA.UBLBR".split`.`)if(!d.search('D'+z))return z}

Probieren 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 Dfür ein Match oder undefinedfür kein Match aus.

Die Ganzzahl entspricht dem Index der Übereinstimmung in diesem Array (0-indiziert):

0  - Monkey: DR
1  - Elephant: DL
2  - Spider: DA
3  - Harpy: DB
4  - Tinkerbat: DUU
5  - Heal: DUA
6  - Scuttle Town: DULR
7  - Water Town: DURLAB
8  - Oasis Town: DURRBA
9  - Zombie Caravan: DULLBA
10 - Bandit Town: DUBLBR

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

dist eine Zeichenfolge, in JS sind leere Zeichenfolgen falsey " dist nicht leer".

Innere Schleife

Dies ist das Zeug, das in jeder Schleife passiert:

for(z of "R.L.A.B.UU.UA.ULR.URLAB.URRBA.ULLBA.UBLBR".split`.`)

Also definieren wir zuerst ein Array mit:

"R.L.A.B.UU.UA.ULR.URLAB.URRBA.ULLBA.UBLBR".split`.`

Dadurch wird eine Reihe aller Tanzbewegungszeichenfolgen erstellt, wobei die Dam Anfang jeder von ihnen fehlen (alle beginnen mit D). Wir werden dieses Array nennen. x
Hier gibt es wahrscheinlich ein beträchtliches Golfpotential.

Wir durchlaufen dann jedes Element in x(gespeichert in z) und führen Folgendes aus:

if(!d.search('D'+z))return z

Dies wird verwendet d.search, um den Index in der Zeichenfolge von zurückzugeben 'D'+z. Wenn und nur wenn d beginnt mit 'D'+z, kehrt das 0, was ein Falsey Wert in JS ist.
Als solches !d.searchwird nur wahr sein, wenn die Zeichenfolge mit beginnt 'D'+z.

Hinweis: Aus diesem Grund lassen wir das Ds in weg x, da es uns 10 Bytes (1 pro Tanz) spart und uns bei dieser Suche nur ein einziges Byte kostet

Wenn die Suche übereinstimmt, kehren wir zurück z. Dies ist der Tanz, den wir gefunden haben, ohne die Führung D.

Wenn nicht, schleifen wir weiter.

Äußerer Pfosten

Dies geschieht am Ende jeder Iteration der äußeren Schleife:

d=d.slice(1)

Entfernen Sie einfach das erste Zeichen aus d

Keine Übereinstimmung

Wenn dleer wird und keine Übereinstimmung gefunden wurde, ist das Ende der Funktion erreicht. Dies wird implizit undefinedgemäß dem Standardverhalten von JavaScript zurückgegeben

Skidsdev
quelle
@Shaggy Ich hatte die substr -> sliceÄnderung gerade selbst vorgenommen und vergesse immer wieder, dass des 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 vergessen
Skidsdev
@ Shaggy ah schön! Ich gehe davon aus d.search, dass 0 zurückgegeben wird, wenn sich die dSuchzeichenfolge am Anfang von befindet , was natürlich ein Falsey-Wert ist
Skidsdev
Ja. Es ist ein bisschen wie, indexOfaber es unterstützt RegEx, was hier irrelevant ist.
Shaggy
Und natürlich ist es auch 1 Byte kürzer;)
Skidsdev
82 Bytes
Shaggy
2

Netzhaut ,53 43 42 37 Bytes

0L`;\w|;:(:|A|LR|RLAB|RRBA|LLBA|BLBR)

Probieren Sie es online aus!

Weicht geringfügig von der Standardeingabe und -ausgabe ab, um ;:as zu DUverwenden. 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 Lund 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.

FryAmTheEggman
quelle
43 Bytes . Kann mit 1!anstelle von in Retina 0.8.2 übersetzt werden 0L, aber in diesem Fall funktioniert die Fußzeile nicht ( 1M!funktioniert auch mit der Fußzeile).
Neil
@Neil Danke für den Golf, den ich immer vergessen habe L.
FryAmTheEggman
Vielleicht R|L|A|B-> [RLAB]?
tsh
@tsh Danke! Das war ein Überbleibsel von meinem vorherigen Ansatz und ich habe es nie überprüft.
FryAmTheEggman
Noch ein Schritt, was ist D[RLAB]|DU(...)stattdessen?
tsh
1

Perl 5 -p , 47 Bytes

/D([RLAB]|U(U|A|LR|LLBA|RLAB|RRBA|BLBR))/;$_=$&

Probieren Sie es online aus!

Gibt den Code des Tanzes zurück (zulässig gemäß @ Arnauld's Kommentar) oder leer, wenn keine Übereinstimmung vorliegt.

Xcali
quelle
1

Holzkohle , 48 Bytes

≔⌊E⁺D⪪”{➙∧⪫⁻Y⟧¹⊟AOP9GKπ⁸Pa↷VB”D⟦⌕⁺θιιLι⟧η✂θ§η⁰Ση

Probieren Sie es online aus! Der Link führt zur ausführlichen Version des Codes. Erläuterung:

⁺D⪪”{➙∧⪫⁻Y⟧¹⊟AOP9GKπ⁸Pa↷VB”D

Teilen Sie die komprimierte Zeichenfolge RDLDADBDUUDUADULRDURLABDURRBADULLBADUBLBR(die alle Tänze außer der führenden enthält D) auf Dund stellen Sie dann Djedem Eintrag das Zurück voran.

E...⟦⌕⁺θιιLι⟧

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.

Neil
quelle
1

Gelee , 33 28 Bytes

“¡ịḟ½NỵC\HỤĊȷṗ~’b6ṣ0;€0ɓUwⱮM

Probieren Sie es online aus!

Nimmt als Eingabe eine Liste von Ganzzahlen, die die Bewegungen darstellen:

0 D
1 U
2 R
3 B
4 L
5 A
6 .

Gibt eine umschlossene Ganzzahl für die Antwort oder eine Liste aller dieser Ganzzahlen für keine Übereinstimmung zurück:

1 Monkey
2 Harpy
3 Elephant
4 Spider
5 Tinkerbat
6 Heal
7 ScuttleTown
8 OasisTown
9 WaterTown
10 BanditTown
11 ZombieCaravan
1,2,3,4,5,6,7,8,9,10,11 NoMatch

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.

Nick Kennedy
quelle
0

05AB1E , 104 Bytes

'dð.•—Áå•«•¼L?D/8¢Am.Z¼ž•6BSèJ#«å.•g³ç¼…¬ÿ¬Õ‚YÙ•“ÆÚàæɾ ÿ“#.•664Îè¡HĆ∍•¸«“scuttle„©Ê´ bandit“#ð“‰à“«««sÏ

Probieren Sie es online aus!


Ich habe diese Monstrosität geschrieben, ohne zu wissen, dass ich Zahlen für Namensbewegungen verwenden könnte ...

Magische Krakenurne
quelle
0

sfk , 119 91 Bytes

xex -i -firsthit
_DR_
_DL_
_DA_
_DB_
_DUU_
_DUA_
_DULR_
_DURLAB_
_DURRBA_
_DULLBA_
_DUBLBR_

Probieren Sie es online aus!

Gibt den ersten Tanz als Folge von Bewegungen.

( xexist nur ein Stream-Editor und in diesem Fall _<pattern>_Suchtext)

Οurous
quelle
0

05AB1E , 28 27 Bytes

1 Byte dank Grimy gespeichert

Œ.Δ•1Λ*#$ß‘«∍@…9\÷•6B1¡1ìQZ

Probieren Sie es online aus!

Gibt entweder die Übereinstimmung (dh 10für Monkey) oder -1keine Übereinstimmung aus

1 = D
0 = R
2 = L
3 = A
4 = B
5 = U
6 = .

Erläuterung

Œ.Δ                           # Find the first substring of the input
                         Q    # that is equal to
                          Z   # any element in
   •1Λ*#$ß‘«∍@…9\÷•           # 29058694378496950170872579685936
                   6B         # converted to base-6
                     1¡       # split on 1's
                       1ì     # with a 1 prepended to each
Emigna
quelle
@Grimy: Danke! Ich hatte eine frühere (längere) Version, in der ich die nicht brauchte ¦, aber ich dachte nicht daran, sie neu zu ordnen, nachdem ich die Bedeutung der Zahlen geändert hatte :)
Emigna