Einführung
Ich sehe hier nicht viele Regex-Herausforderungen, daher möchte ich diese täuschend einfache anbieten, die auf verschiedene Arten mit einer Reihe von Regex-Varianten durchgeführt werden kann. Ich hoffe, es bietet Regex-Enthusiasten ein bisschen Spaß beim Golfen.
Herausforderung
Die Herausforderung besteht darin, zu einer "egalitären" Serie zu passen, die ich sehr locker genannt habe: eine Serie mit der gleichen Anzahl verschiedener Charaktere. Dies lässt sich am besten anhand von Beispielen beschreiben.
Spiel:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
Nicht übereinstimmen:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
Verallgemeinern wollen wir einen Gegenstand der Form entsprechen ( für jede Liste von Zeichen auf , wo für allec1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
Klarstellungen:
Die Eingabe wird nicht leer sein.
Ein Zeichen kann sich später in der Zeichenfolge wiederholen (z. B. "Banane")
k > 1
Es werden also immer mindestens 2 verschiedene Zeichen in der Zeichenkette sein.Sie können davon ausgehen, dass nur ASCII-Zeichen als Eingabe übergeben werden und kein Zeichen ein Zeilenabschlusszeichen ist.
Regeln
(Vielen Dank an Martin Ender für dieses hervorragend formulierte Regelwerk)
Ihre Antwort sollte aus einem einzelnen regulären Ausdruck ohne zusätzlichen Code bestehen (mit Ausnahme einer optionalen Liste von regulären Ausdrucksmodifikatoren, die erforderlich sind, damit Ihre Lösung funktioniert). Sie dürfen keine Funktionen der Regex-Variante Ihrer Sprache verwenden, mit denen Sie Code in der Hosting-Sprache aufrufen können (z. B. der Perl- e
Modifikator).
Sie können jedes Regex-Aroma verwenden, das vor dieser Herausforderung existierte, aber geben Sie das Aroma an.
Gehen Sie nicht davon aus, dass der reguläre Ausdruck implizit verankert ist, z. B. wenn Sie Python verwenden, gehen Sie davon aus, dass der reguläre Ausdruck mit re.search und nicht mit re.match verwendet wird. Ihre Regex muss für gültige egalitäre Zeichenfolgen mit der gesamten Zeichenfolge übereinstimmen und für ungültige Zeichenfolgen keine Übereinstimmungen ergeben. Sie können beliebig viele Erfassungsgruppen verwenden.
Sie können davon ausgehen, dass die Eingabe immer eine Zeichenfolge aus zwei oder mehr ASCII-Zeichen ohne Zeilenabschluss ist.
Dies ist Regex-Golf, also gewinnt der kürzeste Regex in Bytes. Wenn in Ihrer Sprache (normalerweise /.../
) Begrenzer für reguläre Ausdrücke erforderlich sind, zählen Sie die Begrenzer nicht selbst. Wenn Ihre Lösung Modifikatoren erfordert, fügen Sie ein Byte pro Modifikator hinzu.
Kriterien
Dies ist ein altmodisches Golfspiel. Vergessen Sie also die Effizienz und versuchen Sie einfach, Ihre Regex so klein wie möglich zu halten.
Bitte geben Sie an, welche Regex-Variante Sie verwendet haben, und fügen Sie nach Möglichkeit einen Link hinzu, der eine Online-Demo Ihres Ausdrucks in Aktion zeigt.
banana
ist egalitär.