Ein String x
erzeugt einen String, y
wenn y
es sich um einen Teilstring einer unendlichen Wiederholung von handelt x
. Zum Beispiel abc
erzeugt bcabcab
.
Schreiben Sie ein Programm, um die kürzeste, lexikografisch kleinste Zeichenfolge zu finden, die die Eingabe generiert. Sie erhalten bei der Standardeingabe eine einzelne Textzeile. Sie sollten den generierenden String auf die Standardausgabe drucken. Beispielsweise:
Eingang
bcabcabca
Ausgabe
abc
Kürzester Code gewinnt. Sie können davon ausgehen, dass die Eingabe nur die Zeichen az enthält (und, wenn Sie möchten, eine nachgestellte Zeile).
code-golf
kolmogorov-complexity
subsequence
Keith Randall
quelle
quelle
bac
in Ihrem Beispiel stattabc
?bac
s.(bca)^n
, wasbca
für das gegebene Beispiel genauso gilt wieabc
.bca
ist nicht die kleinste lexikografisch.Antworten:
Ruby 1.9, 40 Zeichen
Angenommen, die Eingabe wird nicht durch einen Zeilenumbruch beendet. Außerdem ist es für größere Ergebnisse wahrscheinlich lächerlich langsam.
quelle
Python
88185 ZeichenAusgabe:
quelle
bacabac
korrekt verarbeitet.Haskell,
299128 ZeichenDanke an jloy! Jetzt ist die Version beide viel kürzer und ich glaube richtig.
quelle
cabcabcabc
erzeugtabcabc
, sodass diese Lösung nicht ganz da ist. Ich denke, Sie müssen modifizierenq++q++q
, um das gewünschte Ergebnis zu erzielen . Mein schneller Versuch, gestoßene Dinge wieder auf 145 Zeichen zu bringen. (Spoiler sind hier: gist.github.com/1035161 )(/=)""
Kondition? Es scheint nichts zu tun. Außerdem hilft es, Lambdas loszuwerden: Sie können w mithilfe des.
Operators ganz loswerden und die Hauptfunktion auf ändernmain=interact s
, um ein paar Zeichen zu speichern.permutations
anstelle von zu verwendentails
.Python,
121137129 ZeichenBEARBEITEN: Der von JiminP entdeckte Fehler wurde behoben
quelle
aabab
für Zeichenfolgeababa
... :(Ruby 1.9, 36
Verwendet den gleichen Ansatz wie die Lösung von Ventero.
quelle
Python,
161 159 166 140 141 134132 ZeichenEDIT : Golfed den Code nach dem Lesen von Jules Olléon Kommentar. Ein Fehler, der dazu führte, wurde
bcdabcdab
behobenabbc
.EDIT2 : Der von Jules Olléon entdeckte Fehler (
abaa
resultiert inaaa
) wurde behoben.Ich weiß nicht gut über Python Bescheid, daher ist dieser Code wahrscheinlich "nicht golfen".
Ich liebe diese Regel:
Sie können davon ausgehen, dass die Eingabe nur die Zeichen az enthält ...
Eingänge Ausgänge
quelle
i-=1
anstelle von tuni=i-1
. Ebenso für das Inkrement.Mathematica 124 Bytes
Leerzeichen und Zeilenumbrüche (bei Vorhandensein von Semikolons am Zeilenende) haben in Mathematica keine Bedeutung und werden hier zur besseren Lesbarkeit angegeben.
Die Eingabe erfolgt zwischen den Anführungszeichen in der ersten Zeile. Wenn Recast als Funktion ausgeführt wird, werden Zeichenfolgen wie folgt eingegeben:
dann sind es 128 Bytes.
Die
For
Schleife nimmt die ersteni
Zeichen der Eingabe und wiederholt sie mindestens bis zur Länge der Eingabe. Anschließend prüft sie, ob die Eingabe eine Teilzeichenfolge des Ergebnisses ist. Nachdem derStringPartition
Befehl die Länge des Zeitraums der Zeichenfolge ermittelt hat, verknüpft er zwei Kopien dieses Zeitraums und entnimmt ihm alle Teilzeichenfolgen dieser Länge (im Grunde genommen erhält er alle zyklischen Permutationen) undFirst@Sort
findet dann die erste von ihnen, wenn sie lexikografisch geordnet ist.quelle
Javascript 96 Zeichen.
Working Plunkr
quelle