Ich habe mir kürzlich eine Nostalgie in Form von Bookworm Deluxe gegönnt:
Falls Sie es noch nicht gesehen haben, ist es ein Wortspiel, bei dem benachbarte Kacheln zu Wörtern verbunden werden sollen. Um festzustellen, ob ein String ein gültiges Wort ist, vergleicht er es mit seinem internen Wörterbuch, das in einem komprimierten Format gespeichert ist, das wie folgt aussieht:
aa
2h
3ed
ing
s
2l
3iis
s
2rdvark
8s
4wolf
7ves
Die Regeln zum Entpacken des Wörterbuchs sind einfach:
Lesen Sie die Nummer am Anfang der Zeile und kopieren Sie so viele Zeichen vom Anfang des vorherigen Wortes. (Wenn keine Nummer vorhanden ist, kopieren Sie so viele Zeichen wie beim letzten Mal.)
Fügen Sie die folgenden Buchstaben an das Wort an.
Also, unser erstes Wort ist aa
, gefolgt von 2h
, was bedeutet, dass sich "die ersten beiden Buchstaben kopieren aa
und anhängen h
" bilden aah
. Dann 3ed
wird aahed
, und da die nächste Zeile keine Nummer hat, kopieren wir 3 Zeichen erneut zu bilden aahing
. Dieser Vorgang wird im gesamten restlichen Wörterbuch fortgesetzt. Die resultierenden Wörter aus der kleinen Beispieleingabe sind:
aa
aah
aahed
aahing
aahs
aal
aaliis
aals
aardvark
aardvarks
aardwolf
aardwolves
Ihre Herausforderung besteht darin, dieses Entpacken in so wenigen Bytes wie möglich durchzuführen.
Jede Eingabezeile enthält keine oder mehrere Ziffern, 0-9
gefolgt von einem oder mehreren Kleinbuchstaben a-z
. Sie können die Eingabe und Ausgabe entweder als Liste von Zeichenfolgen oder als einzelne Zeichenfolge mit Wörtern, die durch andere Zeichen als 0-9
/ getrennt sind, vornehmen a-z
.
Hier ist ein weiterer kleiner Testfall mit einigen Randfällen, die im Beispiel nicht behandelt werden:
abc cba 1de fg hi 0jkl mno abcdefghijk 10l
=> abc cba cde cfg chi jkl mno abcdefghijk abcdefghijl
Sie können Ihren Code auch im gesamten Wörterbuch testen: Eingabe , Ausgabe .
0
führenden0
s haben wird?locate
Programm verwendet diese Art der Codierung für Pfadnamen.Antworten:
Vim, 57 Bytes
Probieren Sie es online!
quelle
<H<G
anstelle der letzten Auswechslung funktionieren?<
Lösung ausreichend oft nicht berücksichtigt wird.:%s/ *
anstelle der letzten Ersetzung zwei Bytes speichern.JavaScript (ES6),
66 6261 BytesProbieren Sie es online!
Kommentiert
quelle
Perl 6 ,
5048 Bytes-2 bytes dank nwellnhof
Probieren Sie es online!
Ein Hafen von Arnauld's Lösung . Mann, dieser
R||
Trick war eine Achterbahnfahrt von "Ich denke, das könnte möglich sein", zu "nah, es ist unmöglich", zu "irgendwie vielleicht möglich" und schließlich zu "aha!"Erläuterung:
Der
$l [R||]=~$/
Teil wird grob übersetzt, hat$l= ~$/||+$l
aber die gleiche Anzahl von Bytes:(
. Ursprünglich wurden die Bytes mithilfe einer anonymen Variablen gespeichert, sodass dasmy$l
nicht mehr funktioniert, da der Gültigkeitsbereich jetzt die Ersetzung und nicht dermap
Codeblock ist. Naja. Wie auch immer,R
ist der umgekehrte metaoperator, so dass er die Argumente umkehrt||
, so dass der$l
variable endet die neue Nummer zugeordnet wird (~$/
) , wenn es vorhanden ist , sonst selbst wieder.Es könnten 47 Bytes sein, wenn Perl 6 keinen redundanten Compiler-Fehler verursacht
=~
.quelle
Ruby ,
494543 BytesProbieren Sie es online!
Erläuterung
quelle
C,
6557 BytesProbieren Sie es online!
Erläuterung:
quelle
Brainfuck , 201 Bytes
Probieren Sie es online!
Benötigt eine abschließende neue Zeile am Ende der Eingabe. Eine Version ohne diese Anforderung ist 6 Byte länger:
Brainfuck , 207 Bytes
Probieren Sie es online!
Bei beiden Versionen wird davon ausgegangen, dass alle Zahlen streng unter 255 liegen.
Erläuterung
Das Band ist wie folgt aufgebaut:
Die "Zahl" -Zelle ist gleich 0, wenn keine Ziffern eingegeben werden, und n + 1, wenn die Zahl n eingegeben wird. Die Eingabe erfolgt in der mit "85" gekennzeichneten Zelle.
quelle
Python 3.6+,
172195156123122121104 BytesProbieren Sie es online!
Erläuterung
Ich gab nach und benutzte reguläre Ausdrücke. Dies sparte mindestens 17 Bytes. :
Wenn die Zeichenfolge überhaupt nicht mit einer Ziffer beginnt, beträgt die Länge dieser Zeichenfolge
0
. Das bedeutet, dass:wird sein,
n
wennt
leer ist, undint(t)
ansonsten.Entfernt die Zahl, von der der reguläre Ausdruck gefunden wurde
s
(wenn keine Zahl gefunden wurde, werden0
Zeichen entfernt, die nichts
gekürzt werden) und allen
Zeichen bis auf die ersten Zeichen des vorherigen Wortes werden durch das aktuelle Wortfragment ersetzt. und:gibt das aktuelle Wort aus.
quelle
Haskell,
8281 BytesNimmt und gibt eine Liste von Zeichenfolgen zurück.
Probieren Sie es online!
Edit: -1 Byte dank @Nitrodon.
quelle
Japt,
191817 BytesUrsprünglich inspiriert von Arnauld's JS-Lösung .
Versuch es
quelle
Gelee , 16 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 2 , 118 Bytes
Probieren Sie es online!
quelle
Retina 0,8,2 , 69 Bytes
Probieren Sie es online! Link enthält härtere Testfälle. Erläuterung:
Kopieren Sie für alle Zeilen, die mit Buchstaben beginnen, die Nummer aus der vorherigen Zeile, und wiederholen Sie den Vorgang, bis alle Zeilen mit einer Nummer beginnen.
Wandle die Zahl in eine unäre um.
Verwenden Sie Bilanzkreise, um alle
1
s durch den entsprechenden Buchstaben aus der vorherigen Zeile zu ersetzen . (Dies stellt sich als etwas golfer heraus, als alle Läufe von1
s zu ersetzen .)quelle
Rot , 143 Bytes
Probieren Sie es online!
quelle
Java (JDK) , 150 Byte
Probieren Sie es online!
quelle
Groovy , 74 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Gelee , 27 Bytes
Probieren Sie es online!
quelle
Perl 5
-p
,4541 BytesProbieren Sie es online!
Erläuterung:
quelle
Groovy ,
103 bis99 BytesProbieren Sie es online!
quelle
05AB1E ,
201917 BytesProbieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
Common Lisp, 181 Bytes
Probieren Sie es online!
Ungolfed:
Die langen Identifikatoren von Common Lisp machen es wie üblich nicht besonders für PPCG geeignet.
quelle
Python 2 ,
10110099 BytesProbieren Sie es online!
quelle
C # (Visual C # Interactive Compiler) , 134 Byte
Probieren Sie es online!
-9 Bytes dank @ASCIIOnly!
Weniger golfen ...
quelle
l=n>0?n:l
,l=m>0?n:l
weil es den Fall nicht aufgegriffen hat, als eine Zeile mit Null (0jkl
) begann. Danke für den Tipp!Scala ,
226129102 BytesDanke @ ASCII-only für die Arbeit hier (und für die Groovy-Antwort).
Probieren Sie es online!
quelle