Dies wird aus dieser Frage entnommen (mit Erlaubnis des Kurses). Ich zitiere:
Erstellen Sie eine Funktion, die eine Zeichenfolge akzeptiert. Je nachdem, ob die Eingabe nur aus einer wiederholten Zeichenfolge besteht, sollte sie true oder false zurückgeben . Die Länge des angegebenen Strings ist immer größer als 1 und die Zeichenfolge muss mindestens eine Wiederholung haben.
Einige Beispiele:
'aa' //true
'aaa' //true
'abcabcabc' //true
'aba' //false
'ababa' //false
'weqweqweqweqweqw' // false
Insbesondere kann die Prüfung auf eine Zeichenfolge, die ausschließlich aus sich wiederholenden Teilzeichenfolgen besteht ( Update ), eine beliebige wahre oder falsche Darstellung ausgeben, aber bitte keine Fehlerausgabe. Streng alphhanumerische Zeichenfolgen. Ansonsten Standard Code Golfregeln. Dies ist Code Golf, daher gewinnt die kürzeste Antwort in Bytes für jede Sprache.
quelle
Antworten:
Brachylog ,
43 BytesProbieren Sie es online!
Erläuterung
Das Programm druckt,
true.
ob die Bedingungen erfüllt werden können undfalse.
wenn nicht.quelle
~j↙
oder=Ṁc
Arbeit zu finden, bevor mir aufgefallen ist, dass Sie dies vor einer Stunde gepostet habenġ=Ṁ
Ṁ
ist eine Variable, die darauf beschränkt ist, eine Liste von zwei oder mehr Elementen zu sein)JavaScript (ES6), 22 Byte
Gibt einen Booleschen Wert zurück.
Probieren Sie es online!
Ohne regulären Ausdruck
3329 BytesGibt entweder
null
(falsch) oder ein Objekt (wahr) zurück.Probieren Sie es online!
quelle
grep, 19
Prüfung
Ausgabe:
quelle
Japt , 6 Bytes
Dank @Shaggy ein Byte gespeichert
Probieren Sie es online!
quelle
p<space>
mit²
einem Byte zu speichern.Java,
2524 Bytes-1 Byte Danke an Olivier Grégoire!
Langweilige Regex-Antwort
Probieren Sie es online!
Es ist nur 1 Byte länger als die Python Antwort aaaaaich jetzt gebunden bin :)quelle
$
da es sich bei dermatches
Methode um eine exakte Übereinstimmung handelt und nicht standardmäßig um eine Teilzeichenfolgenübereinstimmung.matches
fügt seine eigene$
Regex hinzu. Vielen Dank!Excel, 26 Bytes
Eingaben von A1, Ausgaben für jede Zelle, in die Sie diese Formel einfügen.
quelle
A
) und diesen als Ihre Eingabe festlegen.A1
auch eine "Variable", da er den Eingabewert enthält? :)R , 28 Bytes
Probieren Sie es online!
Einfache Regex-Version. R ist (manchmal) sehr ähnlich zu Python, dies ist also ähnlich zu TFelds Python 2-Regex-Antwort, wenn auch kürzer!
Frage (falls jemand die Antwort kennt)
Ich bin immer noch verwirrt, warum dies funktioniert, da die Teilzeichenfolge beliebig lang sein kann und immer funktioniert und immer noch funktioniert, wenn ich einen Buchstaben vor eine gültige Zeichenfolge setze, z. B. "cABABABABAB". Wenn ich persönlich den regulären Ausdruck lese, sehe ich
(.+)
, welcher jede Gruppe von beliebiger Länge erfasst. Und dann\\1+$
wiederholt sich die erfasste Gruppe beliebig oft bis zum Ende.Warum erfasst es also nicht einfach "AB" und stellt fest, dass es bis zum Ende der Zeichenfolge wiederholt wird, zumal keine Einschränkung festgelegt ist, wo die Teilzeichenfolge beginnen kann?
quelle
perl=TRUE
hinzufügen, stimmt sie erwartungsgemäß mit cABABAB überein. Diegrep -E '(.*)\1+$'
Ausführung in Bash entspricht auch cABABAB, obwohlgrep -E
ERE verwendet wird, das gleiche Regex-Aroma, das R unterstützen soll..+
zu Beginn eines Musters zu^.+
ist eine wichtige Optimierung, aber wenn sich das.+
Element innerhalb von Erfassungsparens befindet, ist es nicht mehr gültig.Retina 0.8.2 , 9 Bytes
Probieren Sie es online! Link enthält Testfälle.
quelle
Gelee ,
54 BytesIch sehe jetzt, dass der beste Weg ist, der Methode von xnor zu folgen !
Ein monadischer Link, der eine Liste von Zeichen akzeptiert und eine Ganzzahl ausgibt - die kürzestmögliche Länge eines sich wiederholenden Slice oder Null, falls keine vorhanden ist. Beachten Sie, dass Null falsch ist, während Zahlen ungleich Null in Jelly wahr sind.
Probieren Sie es online!
Wie?
quelle
Perl 5
-p
, 14 BytesProbieren Sie es online!
quelle
Python 2 , 24 Bytes
Probieren Sie es online!
Schamlos aus Xnors Antwort auf die ursprüngliche Frage gestohlen .
Intuitivere Version:
Python 2 ,
595553 BytesProbieren Sie es online!
Langweilige Regex-Version:
Python 2 , 44 Bytes
Probieren Sie es online!
quelle
Wolfram Language (Mathematica) ,
2423 BytesProbieren Sie es online!
quelle
Pyke , 4 Bytes
Probieren Sie es hier aus!
quelle
J ,
26 25 1514 BytesMit der xnor-Methode
Probieren Sie es online!
Original (zwei verschiedene Ansätze)
J , 25 Bytes
Probieren Sie es online!
J , 26 Bytes
Probieren Sie es online!
quelle
PowerShell,
23 bis24 Byte+1 Byte, um die Regeln vollständig zu erfüllen
Probieren Sie es online!
Ziemlich langweilig. Basierend auf den anderen Antworten von Regex. Zum Glück wird PowerShell nicht
\
als Fluchtcharakter verwendet!quelle
true
füraabcabc
C # (Visual C # Interactive Compiler) , 70 Byte
xnors schamlose Anpassung ( 46 Bytes )
Meine Nicht-Regex-Lösung:
Erläuterung:
Ersetzen Sie jede mögliche Teilzeichenfolge, die am Index 0 beginnt, durch eine leere Zeichenfolge. Wenn das Ergebnis eine leere Zeichenfolge ist, besteht die Zeichenfolge vollständig aus dieser Teilzeichenfolge. Da dies das Auswerten der gesamten Zeichenfolge mit sich selbst umfasst, muss die Anzahl der erwarteten Ergebnisse größer als 1 sein.
Beispiel: abcabc
Mögliche Teilstrings ab Index 0:
Wenn wir sie durch leere Zeichenketten ersetzen
Da es eine andere Teilzeichenfolge als 'abcabc' gibt, die eine leere Zeichenfolge zurückgibt, besteht die Zeichenfolge vollständig aus einer anderen Teilzeichenfolge ('abc').
Probieren Sie es online!
quelle
Python 3 ,
62605654 Bytes-4 Bytes Danke an ArBo
Probieren Sie es online!
quelle
f=
kann fallengelassen werden; anonyme Funktionen sind generell erlaubt.any
Japt , 10 Bytes
Gibt eine positive Zahl zurück, wenn wahr, und 0, wenn falsch. Wenn Sie eine Bool-Ausgabe möchten, fügen Sie einfach
-¡
flag hinzuProbieren Sie es online!
quelle
Schale , 6 Bytes
Probieren Sie es online!
Ich glaube, dies ist ein Byte mehr als optimal, aber ich konnte keine Anordnung finden, die die explizite Komposition
ȯ
unnötig machte.Erläuterung
quelle
€htD¹
vermeidet dieȯ
.λ€htD¹
aber ich wusste nicht, dass Lambdas implizit hinzugefügt werdenMathematica 11.x, 74 Bytes
wobei durchgehend
#
die Eingabezeichenfolge darstellt undfindet Teilstrings der Eingabezeichenfolge, die mit dem Muster übereinstimmen
Dieses Muster erfordert Übereinstimmungen,
x
muss am Anfang der Zeichenfolge beginnen und die Bedingung erfüllen, dass (1) die Übereinstimmung nicht die gesamte Eingabezeichenfolge ist und (2) das Auftreten der Übereinstimmung in der Eingabezeichenfolge durch die leere Zeichenfolge ersetzt wird Wir erhalten die leere Zeichenfolge. Abschließend wird die Liste der Übereinstimmungen mit der leeren Liste verglichen.ist,
True
wenn die Liste der Übereinstimmungen nicht leer ist undFalse
wenn die Liste der Übereinstimmungen leer ist.Testfälle:
und
quelle
Python 3, 84 Bytes
Verwendet
textwrap.wrap
(dank dieser Antwort ), um die Zeichenfolge in Stücke zu teilenn
, um jede mögliche Länge der sich wiederholenden Teilzeichenfolge zu testen. Die getrennten Teile werden dann miteinander verglichen, indem sie zu einem Satz hinzugefügt werden. Wenn alle Teile gleich sind und die Menge die Länge 1 hat, muss die Zeichenfolge eine sich wiederholende Zeichenfolge sein. Ich habe<2
stattdessen verwendet,==1
weil es ein Byte spart und die Länge der Eingabezeichenfolge garantiert größer als Null war.Wenn es keine gibt,
n
für die sich wiederholende Teilzeichenfolgen der Längen
die gesamte Zeichenfolge ausmachen, geben Sie false für die gesamte Funktion zurück.quelle
05AB1E , 5 Bytes
Die Methode von xnor aus der vorherigen Frage scheint auch in 05AB1E optimal zu sein.
Probieren Sie es online! oder als Test Suite
Erläuterung
quelle
Sauber , 73 Bytes
Regex wird nicht verwendet.
Probieren Sie es online!
Definiert
$ :: [Char] -> Bool
.Überprüft, ob die angegebene Zeichenfolge ein Präfix für die Wiederholung einer vom Ende abgeleiteten Teilzeichenfolge ist.
quelle
C ++ (gcc) , 36 Bytes
Probieren Sie es online!
Ein weiterer Port von xnors Lösung. Verwendet ein Makro, um das Argument in den Ausdruck zu erweitern. Es wird angenommen, dass das Argument vom Typ ist
std::string
.quelle
QlikView-Variable, 27 Byte
Dies sollte als Variable definiert werden, mit der Sie Parameter übergeben können, z. B.
$1
als Eingabewert.Es gibt
0
oder zurück-1
(entspricht derTRUE()
Funktion von QlikView ).quelle
Schnelle 196 Bytes
Probieren Sie es online!
quelle
Icon , 46 Bytes
Probieren Sie es online!
Ein weiterer Port von xnors Lösung.
quelle
K (oK) , 29 Bytes
Probieren Sie es online!
quelle
Rot , 72 Bytes
Probieren Sie es online!
Rückgabe
1
fürTrue
quelle
T-SQL, 47 Bytes
Verwendung der @ Xnor- Methode :
Behalten Sie die alte Antwort bei, da sie ein paar nette Golfer enthält (67 Bytes):
Erläuterung: Dieses Skript versucht wiederholt, die Eingabe '@y' durch die ersten '@'-Zeichen der Eingabe' @y 'zu ersetzen, während' @ 'erhöht wird.
Irgendwann wird das Ergebnis leer sein. Wenn dies passiert, wenn die Schleifenvariable der Länge des Varchars entspricht, ist das Kriterium false / 0, da '@' = len (@y) (es gab kein wiederholtes Varchar).
Darin kann man golfen
weil die Länge von '@y' nicht 0 sein kann und '@' niemals die Länge von @y überschreitet.
Probieren Sie es online aus
quelle