Wprowadzenie
Nie widzę tu wielu wyzwań wyrażeń regularnych, więc chciałbym zaoferować to zwodniczo proste, które można wykonać na wiele sposobów, używając wielu smaków wyrażeń regularnych. Mam nadzieję, że zapewni entuzjastom regex trochę radości z gry w golfa.
Wyzwanie
Wyzwanie polega na dopasowaniu tego, co bardzo luźno nazwałam serią „egalitarną”: serią jednakowej liczby różnych postaci. Najlepiej to opisuje przykłady.
Mecz:
aaabbbccc
xyz
iillppddff
ggggggoooooollllllffffff
abc
banana
Nie pasuj:
aabc
xxxyyzzz
iilllpppddff
ggggggoooooollllllfff
aaaaaabbbccc
aaabbbc
abbaa
aabbbc
Uogólniając, chcemy dopasować temat formularza ( dla dowolnej listy znaków do , gdzie dla wszystkichc1)n(c2)n(c3)n...(ck)n
c1
ck
ci != ci+1
i, k > 1, and n > 0.
Wyjaśnienia:
Dane wejściowe nie będą puste.
Znak może się powtórzyć później w ciągu (np. „Banan”)
k > 1
, więc w łańcuchu zawsze będą znajdować się co najmniej 2 różne znaki.Możesz założyć, że tylko znaki ASCII będą przekazywane jako dane wejściowe, a żaden znak nie będzie zakończeniem linii.
Zasady
(Dziękuję Martinowi Enderowi za ten doskonale określony blok zasad)
Twoja odpowiedź powinna składać się z jednego wyrażenia regularnego, bez dodatkowego kodu (z wyjątkiem, opcjonalnie, listy modyfikatorów wyrażeń regularnych wymaganych do działania rozwiązania). Nie wolno używać funkcji smaku regularnego swojego języka, które pozwalają na wywołanie kodu w języku hostingowym (np. e
Modyfikator Perla ).
Możesz użyć dowolnego smaku wyrażenia regularnego, który istniał przed tym wyzwaniem, ale określ go.
Nie zakładaj, że wyrażenie regularne jest zakotwiczone niejawnie, np. Jeśli używasz języka Python, załóż, że wyrażenie regularne jest używane z re.search, a nie z re.match. Twoje wyrażenie regularne musi pasować do całego łańcucha dla prawidłowych łańcuchów egalitarnych i nie może dawać żadnych dopasowań dla łańcuchów nieprawidłowych. Możesz użyć dowolnej liczby grup przechwytywania.
Możesz założyć, że wejście będzie zawsze ciągiem dwóch lub więcej znaków ASCII niezawierających żadnych terminatorów linii.
To jest wyrażenie regularne, więc wygrywa najkrótszy wyrażenie regularne w bajtach. Jeśli twój język wymaga (zwykle /.../
) ograniczników do wyrażenia regularnego, nie licz samych ograniczników. Jeśli Twoje rozwiązanie wymaga modyfikatorów, dodaj jeden bajt na modyfikator.
Kryteria
To dobry golf, więc zapomnij o wydajności i po prostu staraj się, aby regex był jak najmniejszy.
Podaj użyty smak wyrażenia regularnego i, jeśli to możliwe, dołącz link pokazujący demonstrację online wyrażenia w akcji.
banana
egalitarna.