UPDATE : isaacg's Pyth Submission ist der Gewinner!
Viele von Ihnen müssen gehört haben, dass es eine coolere Version von JavaScript in der Stadt gibt (lesen Sie ES6), die eine Methode String.prototype.repeat
hat, mit der Sie dies tun können
"Hello, World!".repeat(3)
und bekomme
"Hello, World!Hello, World!Hello, World!"
als Ausgabe.
Ihre Aufgabe ist es, eine Funktion oder ein Programm in einer Sprache Ihrer Wahl zu schreiben, die erkennen, ob eine Zeichenkette einer solchen Transformation unterzogen wurde.
Das heißt, die Eingabezeichenfolge kann als genaue n
Wiederholung einer kleineren Zeichenfolge dargestellt werden. Die Ausgabe (als return-Anweisung der Funktion oder STDOUT) sollte wahr sein, wenn die Zeichenfolge fehlerhaft sein kann, oder wenn die Zeichenfolge nicht als Wiederholung einer kleineren Zeichenfolge dargestellt werden kann.
Einige Beispieleingaben:
"asdfasdfasdf" // true
"asdfasdfa" // false
"ĴĴĴĴĴĴĴĴĴ" // true
"ĴĴĴ123ĴĴĴ123" // true
"abcdefgh" // false
Beachten Sie, dass die letzte Eingabe falsch ist und n
daher größer als sein sollte1
Regeln vervollständigen
- Schreiben Sie eine Funktion / ein Programm in einer beliebigen Sprache, um (über Funktionsargumente / Befehlszeilenargumente / STDIN) eine Zeichenfolge einzugeben
- Gibt den Wahrheitswert zurück / druckt ihn aus, wenn die angegebene Zeichenfolge durch exakte Wiederholung einer kleineren Zeichenfolge gebildet wird, die mindestens zweimal wiederholt wird.
- Die maximale Größe der Eingabezeichenfolge ist idealerweise Unendlich
- String kann alle möglichen ASCII-Zeichen enthalten
- Dies ist ein Code-Golf, so dass der kleinste Code in Zeichen gewinnt.
Antworten:
Pyth , 9
Oder
Dies sind beide enge Übersetzungen von @ xnors Python-Antwort, mit der Ausnahme, dass sie Eingaben von STDIN entgegennehmen und sie ausdrucken. Das erste ist äquivalent zu:
0 für falsch, 1 für wahr.
Die zweite Zeile entspricht:
Falsch für Falsch, wahr für wahr.
Pyths offizieller Compiler hatte einen Fehler im Zusammenhang mit dem zweiten, den ich gerade gepatcht habe. Der erste ist also meine offizielle Einreichung.
quelle
x
war zu lang ...Python (24)
Überprüft, ob die Zeichenfolge eine zweimal verkettete Teilzeichenfolge ist, wobei das erste und das letzte Zeichen entfernt werden, um triviale Übereinstimmungen zu vermeiden. Wenn ja, muss es sich um eine nichttriviale zyklische Permutation von sich selbst und damit um die Summe der wiederholten Segmente handeln.
quelle
..+);(;\?)
abcabc
.s+s
macht es zuabcabcabcabc
. die[1:-1]
hiebe der beiden enden nachgebenbcabcabcabcab
. und danns in ...
versucht,abcabc
als Teilzeichenfolge davon zu finden . Diese Teilzeichenfolge kann in keiner der ursprünglichen Hälften gefunden werden, da beide gekürzt wurden und sich daher über beide Hälften erstrecken müssen. Insbesondere muss es vor seinem Start ein eigenes Ende haben, was bedeutet, dass es aus identischen (wiederholten) Teilzeichenfolgen bestehen muss.ab
wirdabab
wirdba
, also gibt es false zurück, währendaa
wirdaaaa
wirdaa
, was true zurückgibt.qweqweqwe
inweqweqweqweqweqw
istTrue
.Regex (ECMAScript-Variante), 11 Byte
Klingt nach einem Job für Regex!
Teste es hier.
Ich habe mich für ECMAScript entschieden, weil es (wie ich weiß) die einzige Variante ist, die
[^]
zu einem Zeichen passt. In allen anderen Fällen benötige ich entweder eine Markierung, um das Verhalten zu ändern,.
oder verwende[\s\S]
eine drei Zeichen längere Markierung.Je nachdem, wie wir das Flag zählen, könnte das natürlich ein Byte kürzer sein. Wenn wir z. B. Muster + Flags zählen (z. B. Trennzeichen ignorieren), ist dies das PCRE / Perl-Äquivalent
Das sind 10 Bytes, wobei die Begrenzer ignoriert werden.
Teste es hier.
Dies entspricht nur Zeichenfolgen, die aus mindestens zwei Wiederholungen einer Teilzeichenfolge bestehen.
Hier ist eine vollständige 26-Byte-ES6-Funktion, aber ich behaupte, dass Einsendungen von regulären Ausdrücken allgemein gültig sind:
quelle
^(.+)\1+$
funktioniert bei mir, das sind 9 bytes. Funktioniert es bei dir nicht?asd\nasd\nasd\n
. Es funktioniert\
wenn ich\n
manuell schreibeCJam, 9
Ähnlich wie die Idee von xnor.
quelle
)
? Ich denke, es ist vernünftig, -1 bedeutet FALSCH und> = 0 bedeutet WAHRg
und?
.#
? Sicherlich ist das Ergebnis davon auch aus der Perspektive von Erfolg gegen Misserfolg "wahr"?APL, 11
Bei der Erläuterung werden
⍞
Zeichenfolgeneingaben vom Bildschirm übernommen,x←
die einer Variablenx
,⍨
zugewiesen werden, die die Zeichenfolge mit derx⍷
Suchex
in der resultierenden Zeichenfolge verknüpft. Gibt ein Array zurück, das aus Einsen an der Startposition einer Übereinstimmung und Nullen an einer anderen Stelle besteht.+/
summiert die Array-2<
Prüfung, wenn die Summe größer als 2 ist (da es 2 triviale Übereinstimmungen gibt)quelle
CJam, 10 Bytes
Ich habe den CJam-Fehler entdeckt. Meine erste Antwort, damit kann man wohl noch etwas mehr golfen:
Ausgänge -1 für FALSE und eine Zahl> = 0 für TRUE
quelle
GolfScript, 10 Bytes
Eine weitere Implementierung von xnors cleverer Idee.
quelle
)
allerdings; Wenn es keine Übereinstimmung gibt, wird gedruckt-1
. Wenn du das als Antwort posten willst, lösche ich gerne meine.)
kurz bevor du deine Antwort gepostet hast (ich habe den Kommentar bearbeitet)q__+)@+#)
. In GolfScript funktioniert es nicht.Python -
5957quelle
Pure Bash, 30 Bytes
Einfache Portierung der cleveren Antwort von @ xnor :
Der Exit-Code ist 0 für TRUE und 1 für FALSE:
Hinweis
=~
innerhalb[[ ... ]]
ist der Regex - Operator in bash . Jedoch „kann ein beliebiger Teil des Musters zitiert werden sie zu zwingen , als String angepasst werden“ . Wie so oft bei bash, ist es sehr wichtig, die richtigen Anführungszeichen zu setzen - hier wollen wir nur auf einen String-Submatch und nicht auf eine Regex-Übereinstimmung prüfen.quelle
TI-BASIC - 32
Ich dachte, ich würde eine Token-Sprache ausprobieren. Führen Sie den Befehl mit der Zeichenfolge in Ans aus, und geben Sie bei false 0 und bei true die Länge der wiederholten Zeichenfolge zurück.
Erstaunlich, wie es ein Einzeiler ist.
quelle
ECMAScript 6 (189)
Das ist doch die einzig gültige Lösung? Beispielsweise wird das Wort (Zeichenfolge)
nana
nicht unbedingt aus erstellt"na".repeat(2)
quelle
"nana"
ist nicht, aber die Frage ist nicht zu testen, ob.repeat
verwendet wurde oder nicht. Eher, ob die Zeichenfolge eine wiederholte ist oder nichtECMAScript 6 (34
36)Eine weitere Antwort von ES6, aber ohne den Trick
repeat
von xnor zu verwenden :Muss in der Konsole eines ES6-fähigen Browsers wie Firefox ausgeführt werden.
quelle
C 85
Es hat sich als ziemlich lang herausgestellt, aber externe Funktionen sind immer so. Mir fiel ein, dass ich jede String-Funktion neu schreiben konnte, indem ich sie durch eine Schleife oder eine rekursive ersetzte. Aber meiner Erfahrung nach würde es länger dauern und ehrlich gesagt möchte ich das nicht ausprobieren.
Nach einigen Recherchen sah ich Lösungen für hohe Leistung, aber nicht so clever (und kurz) wie die von xnor. nur um originell zu sein ... ich habe die gleiche idee in c umgeschrieben.
Erläuterung:
quelle
ECMAScript 6 (59
626773)Kein Gewinner, aber es scheint, dass es in ES6 mindestens eine Antwort auf diese Frage geben sollte, die tatsächlich die
repeat
Funktion verwendet:Muss in der Konsole eines ES6-fähigen Browsers wie Firefox ausgeführt werden.
Es macht eine Menge unnötiger Iterationen, aber warum sollte es länger dauern, nur um das zu vermeiden, oder?
quelle
[...i]
statti.split('')
0..N
. Vielen Dank!.slice(0,j)
ist ein Zeichen kürzer als.substr(0,j)
. Außerdem kann die Konvertierung in eine Ganzzahl, die unnötig zu|0
sein scheint , entfernt werden (wenn Sie diese Option verwenden,|0
wird die Nützlichkeit der Methode verringert, da sie bei Wiederholungen, die 2 ^ 31 überschreiten, fehlschlägt).Gelee , 3 Bytes
Probieren Sie es online!
Genauso wie diese Antwort (vielleicht ist die spätere Herausforderung eine Verallgemeinerung dieser?).
quelle
Java 8, 28 Bytes
Probieren Sie es online aus.
Erläuterung:
Überprüft, ob der Eingabe-String mit dem regulären Ausdruck übereinstimmt. Dabei wird
String#matches
implizit hinzugefügt^...$
, dass er mit dem gesamten String übereinstimmt.Erklärung des regulären Ausdrucks selbst:
Es wird also grundsätzlich geprüft, ob eine Teilzeichenfolge zwei- oder mehrmals wiederholt wird (Unterstützung von Zeilenumbrüchen).
quelle