So drücken Sie die Rücktaste und geben die Zeichenfolge erneut ein:
- Beginnen Sie mit der ersten Zeichenfolge.
- Entfernen Sie die Zeichen am Ende, bis das Ergebnis ein Präfix der zweiten Zeichenfolge ist. (Dies kann 0 Schritte dauern.)
- Fügen Sie am Ende Zeichen hinzu, bis das Ergebnis der zweiten Zeichenfolge entspricht. (Dies kann auch 0 Schritte dauern.)
Zum Beispiel sieht der Pfad von fooabc
nach so fooxyz
aus:
fooabc
fooab
fooa
foo
foox
fooxy
fooxyz
Aufgabe
Wenn Sie eine Liste von Wörtern haben, schreiben Sie ein Programm, das seinen Weg von der leeren Zeichenfolge mit der Rücktaste und erneuter Eingabe zu allen Wörtern in der Liste nacheinander zurück zur leeren Zeichenfolge führt. Alle Zwischenzeichenfolgen ausgeben.
In Anbetracht der Eingabeliste ["abc", "abd", "aefg", "h"]
sollte die Ausgabe beispielsweise wie folgt aussehen:
a
ab
abc
ab
abd
ab
a
ae
aef
aefg
aef
ae
a
h
Regeln
Sie können eine Liste von Zeichenfolgen oder eine einzelne Zeichenfolge mit einem Trennzeichen Ihrer Wahl zurückgeben oder drucken. Sie können optional die ersten und letzten leeren Zeichenfolgen einfügen. Die Eingabe enthält garantiert mindestens ein Wort, und jedes Wort enthält garantiert nur ASCII-Kleinbuchstaben ( a
- z
). Bearbeiten: Aufeinanderfolgende Zeichenfolgen in der Eingabe stimmen garantiert nicht überein.
Das ist Code-Golf ; kürzester Code in Bytes gewinnt.
Eine Referenzimplementierung in Python 3: Probieren Sie es online aus!
["abc","abc"]
?a,abc,abcde,abc,a,abc,abcde
Antworten:
Pyth,
2523 BytesProbieren Sie es online aus.
quelle
Perl, 43 Bytes
42 Byte Code +
-n
Flags.Um es auszuführen:
quelle
abc
es dreimal gedruckt wurde (aber beim ersten und dritten Mal fehlte das Leerzeichen). Ich habe es entfernt.Java 8, 144 Bytes
Diese ähnelt der Referenzimplementierung, kombiniert jedoch die beiden
while
Schleifen. Es ist ein Lambda-Ausdruck, der einenString[]
Parameter akzeptiert .Ungolfed
Danksagung
quelle
class B
alsinterface B
? Sie können von einer paketprivaten Klasse ausführen. Erwägen Sie auch, ein Lambda zu verwenden, da Sie Java8 bereits angegeben haben.interface B{static void main
ist kürzer alsclass B{public static void main
.a->{/*your code*/}
sein, eine Variable vom Typ zuzuweisenjava.util.function.Consumer<String[]>
. Ich kann im Moment jedoch nicht testen.Mathematica, 149 Bytes
quelle
Retina , 39 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Eingabe und Ausgabe sind durch Zeilenvorschub getrennte Listen. Die Ausgabe enthält die führende und die nachfolgende leere Zeichenfolge.
quelle
Jelly ,
312926 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Haskell ,
102 93 9190 BytesDie letzte Zeile ist eine anonyme Funktion, die eine Liste von Zeichenfolgen entgegennimmt und zurückgibt. Probieren Sie es online!
Erläuterung
Meine Lösung ist rekursiv. Erstens
?
ist es eine Helfer-Infix-Funktion:a?b
Gibt die erstenlength a
Zeichen vonb
oder das gesamteb
if an,a
das länger ist. Als nächstes definiere ich eine Infix-Funktion!
. Die Idee ist, dassa!x
, woa
eine Zeichenkette undx
eine Liste von Zeichenketten ist, der Pfad vona
zur ersten Zeichenkette in erzeugt wirdx
und zum Ende von zurückkehrtx
. In der letzten Zeile definiere ich eine anonyme Funktion, die die leere Zeichenfolge anfügt und dann!
auf die leere Zeichenfolge und die Eingabe angewendet wird .Erklärung von
!
:quelle
Python 2,
118107103979392 BytesDie Eingabe erfolgt als
['abc', 'abcdef', 'abcfed']
oder als ["abc", "abcdef", "abcfed"]
.Revision 1: -11 Bytes. Dank geht an @xnor für seinen Beitrag zu Python-Golftipps und an @Lynn, der mir den Tipp gegeben hat, und an mich, weil ich schlau bin. Es wurden zwei Änderungen vorgenommen: Anstelle von
not s.startswith(i)
, habe ich verwendets.find(i)
, und an Stelle von, habei!=s
ich verwendeti>s
.Revision 2: -4 Bytes. Mir wurde klar, dass ich einen wirklich blöden Fehler gemacht habe. Anstatt Einrückungen mit einem oder zwei Tabulatoren zu verwenden, habe ich Einrückungen mit einem oder zwei Tabulatoren verwendet.
Revision 3: -6 Bytes. Wir danken @ mbomb007 für den Vorschlag, die Whiles in eine einzige Zeile zu setzen. Ich habe auch einen Fehler behoben, indem ich zu geändert
s.find(i)
habei.find(s)
.Revision 4: -4 Bytes. Dank geht an @xnor, um festzustellen, dass ich die Eingabe nicht in einer Variablen speichern musste.
Revision 5: -1 Byte. Ich verdanke dem Verdienst, dass dies
['']
dasselbe ist, als[s]
wenn ich es dem Input hinzufüge.quelle
while
s jeweils in eine einzelne Zeile. Sie können auch<1
anstelle von verwendennot
.startswith
.while
s in eine einzelne Zeile setzen. Meinst du gernewhile s.find(i):s=s[:-1];print s
? Auch danke für den Vorschlag über<1
, aber ich habe dank einer von xnors Tipps auf dem Python-Tipps-Thread zu etwas noch Kürzerem gewechselt.GNU M4, 228 oder 232 Bytes¹
(¹ je nachdem, ob die Datei beendet werden soll
dnl\n
oder nicht - ich bin noch nicht mit Golfspielen und M4 vertraut)Zusätzlich könnten 3 Bytes gespart werden, indem das zweite Argument für
substr
from0
durch die leere Zeichenfolge ersetzt wird. Dies würde jedoch viele Warnungen für stderr auslösen.Ungolfed:
Verwendung:
quelle
PHP,
11611110183 BytesHinweis: Verwendet die Windows-1252-Codierung.
Laufen Sie wie folgt:
Erläuterung
Optimierungen
trim($c^$w,"\0")
, um nach Übereinstimmungen mit der Teilzeichenfolge zu suchen$c&&strpos($w,$c)!==0
.~ÿ
, um eine Zeichenfolge mit einem NUL-Byte anstelle von zu erhalten"\0"
$c=$c.ÿ&$w
dem Suffix$c
für das nächste Zeichen von gespeichert$w
quelle
Batch,
296291 BytesDie Berechnung des gemeinsamen Präfixes war umständlich.
quelle
PHP, 153 Bytes
furchtbar lang :(
Laufen Sie mit
php -nr '<ode>' <text1> <text2> ...
.quelle
JavaScript (ES6), 135 Byte
Interessante Herausforderung! Verbrauch:
g(["abc", "abd", "aefg", "h"])
. Ich konnte scheinbar keine Bytes speichern, indem ich dies als eine Funktion schrieb, also sind es zwei. Zeilenumbrüche sind nicht in der Byteanzahl enthalten.Ich bin mir sicher, dass dies viel mehr reduziert werden kann. Fügt später eine ungolfed Version hinzu.
quelle
Javascript, 98 Bytes
Port of Jakobs Java-Antwort
quelle