Koronkorko to fińskie słowo określające odsetki złożone . Nie chcemy złożonego zainteresowania naszymi ciągami, więc znajdźmy możliwie najkrótsze wyrażenie regularne, aby je wykluczyć.
Biorąc pod uwagę ciąg znaków składający się wyłącznie z wielkich liter alfabetu AZ, określ możliwie najkrótsze wyrażenie regularne pasujące do ciągu, jeśli nie zawiera ono podłańcucha KORONKORKO
. KORONKORKO
Wyrażenie regularne nie powinno pasować do żadnego łańcucha zawierającego jako podłańcuch.
Tylko znaki A
- Z
, [
, ]
, -
, ^
, ,
?
, *
, +
, |
, (
, i )
powinny być wykorzystywane w wyrażeniu.
Myślę, że można to zrobić za pomocą 118 znaków w wyrażeniu. Czy możesz to skrócić?
Uwaga: To wyzwanie pochodzi od Ohjelmointiputka (po fińsku).
!
był dozwoloną postacią, mógłbyś zrobić^((?!KORONKORO).)*$
dla 19 bajtów.!
nie jest dozwolone.-
i^
wewnątrz klas znaków (więc^
nie może być używana jako kotwica), a dopasowanie jest liczone tylko wtedy, gdy cały ciąg jest dopasowany przez wyrażenie regularne (tj. Niejawne otoczenie^$
, ponieważ w przeciwieństwie do normalnych „wyrażeń regularnych”, które liczą ciąg jako pasujący, jeśli jakakolwiek jego część pasuje do wyrażenia regularnego)Odpowiedzi:
204 znaki
Generowany przez przekształcenie
.*KORONKORKO.*
w maszynę skończoną, odwrócenie maszyny skończonej i przekształcenie jej z powrotem w wyrażenie regularne.źródło
Python,
777997118 bajtówEdycja 3: Przepisz. Wykorzystuje zagnieżdżone wyprzedzenia
Regex 101
Edycja 2: Dodano „$ |” w całym wyrażeniu regularnym. Teraz, jeśli dopasowano prefiks KORONKORKO, następnym pasującym elementem jest koniec łańcucha, znak kończący prefiks lub znak rozszerzający prefiks, jeśli następuje po nim coś, co kończy prefiks.
Ten regex działa z
re.fullmatch()
, co zostało dodane w Pythonie 3.4. Aby użyć zre.match()
,^
i$
należy dodać odpowiednio na początku i na końcu wzorca, dla jeszcze 2 bajtów.Link Regex101
Poprzednie nieprawidłowe rozwiązanie (patrz komentarze):
Edycja: Dodano pojedynczy K
źródło
K
.KKORONKORKO
^
i koniec$
nie są konieczne. Również=
i$
nie są dozwolone.