pannenkoek2012 zielt darauf ab, Super Mario 64 mit so wenig Drücken wie möglich der A-Taste zu beenden , was Mario zum Springen bringt. Jede "A-Presse" besteht aus drei Teilen:
- Drücken Sie die Taste
- Halten Sie es für eine beliebige Zeitdauer
- Loslassen
In diesem Video (1:15 - 3:23) finden Sie eine gute Erklärung, die das obige Bild enthält. (Diese Herausforderung wird jedoch nicht die Halb-A-Presse-Terminologie verwenden und wird Hindernisse aufzeigen, die das Freigeben von A erfordern.)
Aufgabe:
Bei einer bestimmten Anzahl von Hindernissen, die das Drücken (P), Halten (H) oder Loslassen (R) der A-Taste erfordern, wird die kleinste Anzahl von Drücken ausgegeben, die erforderlich sind, um diese Hindernisse in der angegebenen Reihenfolge zu überwinden. Die A-Taste wird zunächst nicht gedrückt.
Formell ausgedrückt: PHR
Betrachten Sie bei gegebener Zeichenfolge S (PH*R)*
als Teilfolge Zeichenfolgen , die S enthalten, und geben Sie die kleinstmögliche Anzahl von Zeichen P
in einer solchen Zeichenfolge aus. Oder finden Sie alternativ die kleinste Anzahl von Stücken der Form P?H*R?
, in die S aufgeteilt werden kann.
Beispiel
Schauen wir uns die Eingabe an RHRPHHHR
. Die A-Taste wird nicht gedrückt gehalten. Um das ursprüngliche Hindernis zu überwinden, R
muss die Taste gedrückt und dann losgelassen werden (Taste 1 drücken). Als nächstes müssen wir den Knopf H
gedrückt halten , was wiederum erfordert, dass er zuerst gedrückt wird (drücke # 2). Anschließend kann es wieder freigegeben werden, um das Nachher zu befriedigen R
. Zum Schluss kann der verbleibende PHHHR
Teil durch einmaliges Drücken (Drücken Sie # 3) und anschließendes Halten HHH
und Loslassen befriedigt werden R
. Die Ausgabezählung ist also 3.
Eine andere Möglichkeit, dies zu sehen, besteht darin, dass wir die Eingabezeichenfolge in drei Formularteile aufteilen können, in PHH..HHR
denen Buchstaben weggelassen werden können.
R
HR
PHHHR
Eingabeformat
Die Eingabe ist eine Liste oder eine Folge von Elementen, die das Drücken, Halten und Loslassen wie folgt darstellen:
P, H, R
p, h, r
1, 2, 3
0, 1, 2
in der angegebenen Reihenfolge abgeglichen. Die Eingabe wird nicht leer sein.
Testfälle:
P 1
H 1
R 1
HP 2
RHP 3
HHR 1
PHRH 2
RHRPHHHR 3
HHHHHH 1
PPRRHHPP 6
HPPRHRPRHPPRHPPHRP 12
PRHRHPHHPRRRHPPRHHPPRRRHRHPRPHPRPRHHRPPPRHPRP 28
Bestenliste:
Antworten:
Netzhaut , 9 Bytes
Probieren Sie es online!
quelle
Pyth , 13 Bytes
Probieren Sie es hier aus! oder Überprüfen Sie alle Testfälle.
Beachten Sie, dass
1
auch anstelle von funktioniert3
.Wie es funktioniert?
Mehr zum Regex:
quelle
Gelee , 10 Bytes
Eine monadische Kette, die eine Liste (die
P,H,R : 0,1,2
Option) aufnimmt und eine Ganzzahl zurückgibt, die Anzahl.Probieren Sie es online! oder sehen Sie sich die Testsuite an
Wie?
Effektiv wirkt durch alle benachbarten Paare dann jede Zählung , die nicht immer „Fortsetzungs pairs“ sind (
PR
,PH
,HR
, oderHH
) und eine Zugabe.Vorherige 11-Byte-Lösung:
Probieren Sie es online! oder sehen Sie sich die Testsuite an
Wie?
Funktioniert wie oben, aber ganz anders ...
und noch eine, nochmal ganz andere:
(Addiere 19 zu jedem, dann führe für benachbarte Paare Exponentiation durch, modulo um 13, modulo um 2, summiere und addiere eins).
quelle
Batch, 69 Bytes
Nimmt Eingaben als Liste mit 0-indizierten Befehlszeilenparametern entgegen, Sie können jedoch eine Liste mit Buchstaben
p, h, r
in Groß- oder Kleinbuchstaben verwenden, wenn Sie dieseset /a p=0, h=1, r=2
zuerst eingeben . Erläuterung:b
Behält die letzte Eingabe (standardmäßig2
für freigegeben) undn
die Anzahl der Druckvorgänge bei. Jeder Eingang fügt eine Presse hinzu, wenn der letzte Eingang ein Release war oder der aktuelle Eingang eine Presse ist.quelle
set
können mehrere Variablen gleichzeitig gesetzt werden? Gut zu wissen.set /a
ist eine arithmetische Auswertung. Solange alle Variablen, die Sie festlegen möchten, numerisch sind, können Sie die Zuweisungsausdrücke einfach mit dem Komma-Operator verketten.Python 2, 44 Bytes
Verwendet P-> 1 H-> 2 R-> 3
quelle
Deorst , 11 Bytes
Probieren Sie es online!
Verwendet Herr Xcoder der regex
quelle
Japt, 11 Bytes
Versuchen Sie es | Überprüfen Sie alle Testfälle
è
zählt die Anzahl der Übereinstimmungen des RegEx in der Eingabe undÉ
subtrahiert 1.quelle
Python 2 , 48 Bytes
Probieren Sie es online!
Nimmt
0,1,2
als Eingabe.quelle
Schale ,
65 BytesProbieren Sie es online! Die Eingabe erfolgt über eine Liste
0,1,2
(der TIO-Link verwendet Buchstaben, um das Einfügen von Testfällen zu vereinfachen).Erläuterung
Ich verwende die gleiche allgemeine Idee wie Jonathan Allans Jelly-Antwort : Aufteilen nach Vorkommen der "Diskontinuitätspaare" PP, HP, RH, RR und RP und Zählen der resultierenden Blöcke. In der 0,1,2-Codierung sind diese Paare genau diejenigen, deren linkes Element 2 ist oder deren rechtes Element 0 ist.
quelle
Javascript (ES6), 30 Byte
quelle
Haskell , 36 Bytes
Probieren Sie es online!
Verwendet die
0,1,2
Codierung.quelle
Gelee , 10 Bytes
Probieren Sie es online! oder Testsuite! (
Gestohlenvon Jonathan ausgeliehen.)Alternative:
Probieren Sie es online!
Jelly , 11 Bytes
1 Byte mit Hilfe von Caird Coinheringaahing gespeichert.
Probieren Sie es online!
quelle
μ
aus dem drittenKotlin , 36 Bytes
Verschönert
Prüfung
TIO
TryItOnline
quelle
J ,
18 -17 Bytes-1 Danke an @FrownyFrog
Nimmt Eingaben in Form von
0,1,2
. Die Hilfsfunktion von TIO konvertiert die Testfälle in dieses Formular.Probieren Sie es online!
Die Logik der Vergleiche mag immer noch golffähig sein. Ich verknote mein Gehirn und versuche, mir gleichwertige und kürzere Aussagen zu überlegen.
Erklärung (vorherige Lösung)
Der einzige Unterschied zwischen der aktuellen und der vorherigen Lösung besteht darin, wie die Vergleiche erstellt werden. Die aktuelle Lösung vergleicht explizit benachbarte Elemente, indem sie das Array versetzt, und die vorherige Lösung vergleicht benachbarte Elemente, indem sie die Infixe von 2 betrachtet.
Dies wäre viel sauberer, wenn zwei Laderäume nichts bewirken würden. Der Code nimmt Infixe von zwei und prüft, ob sie nicht aufsteigend sind und nicht zwei Griffe. Wenn dies der Fall ist, addieren wir eine zu unserer endgültigen Zählung. Wir müssen 1 zum Ende hinzufügen, da wir sonst um eins versetzt sind (oder Sie können einen
_
oder einen Wert voranstellen , der größer als 2 ist).Die Art und Weise, wie überprüft wird, ob das Infix zwei Griffe enthält, besteht darin, die beiden Werte miteinander zu multiplizieren und festzustellen, ob es ein Wert ist (zwei Griffe sind es
1 1
).quelle
1+1#.}:(<+:1=*)}.
ist einer kürzer.1+1#.0=}.*2-}:
Vim +
wc
, 25 Bytes␊
ist die Eingabetaste und␘
ist Ctrl+XProbieren Sie es online!
Erläuterung
quelle