Rozgrzewka: Regex, papier, nożyczki
To wyzwanie, które pierwotnie chciałem postawić, zanim zdałem sobie sprawę, że istnieje bardzo krótkie rozwiązanie. Niemniej jednak zastanawianie się nad przygotowaniem do rzeczywistego wyzwania poniżej może być interesującym problemem.
Napisz trzy wyrażenia regularne R , P i S, tak aby pasowały do siebie w cykliczny sposób: Rock, Paper, Scissors. W szczególności R odpowiada S , S odpowiada P a P odpowiada R , a R nie pasuje P , S nie pasuje R i P nie pasuje S . Oto przydatny stolik:
Regex Matches Doesn't match
R S P
P R S
S P R
Nie ma znaczenia, co R , P i S robią na innych wejściach, w tym na nich samych.
W tym przypadku dopasowanie oznacza tylko, że niektóre (prawdopodobnie puste) podłańcuchy danych wejściowych są dopasowane. Dopasowanie nie musi obejmować całego wkładu.
Wyzwanie: Regex, papier, nożyczki, jaszczurka, spock
W tym wyzwaniu rozwiążesz trudniejszą wersję powyższego problemu, opartą na wariancie RPS Rock, Paper, Scissors, Lizard, Spock (spopularyzowany przez The Big Bang Theory ). W RPSLV istnieje pięć różnych symboli, które biją się w dwóch cyklach:
- Skała → Nożyczki → Jaszczurka → Papier → Spock → Skała
- Skała → Jaszczurka → Spock → Nożyczki → Papier → Skała
Powinieneś napisać pięć wyrażeń regularnych R , P , S , L i V, które naśladują tę strukturę, gdy są sobie przekazywane jako dane wejściowe. Oto odpowiednia tabela:
Regex Matches Doesn't match
R L, S V, P
L V, P S, R
V S, R P, L
S P, L R, V
P R, V L, S
Żeby było jasne, należy nie pasuje łańcuch R
, P
itp, ale inne Wyrażenia regularne. Na przykład, jeśli wyrażenie regularne R jest ^\w$
na przykład, wtedy P i V muszą być zgodne łańcuch ^\w$
, a S i L nie.
Ponownie, dopasowanie oznacza po prostu, że co najmniej jeden (być może pusty) podciąg wejściowy jest dopasowany. Dopasowanie nie musi obejmować całego wkładu. Na przykład \b
(granica słowa) pasuje hello
(na początku i na końcu), ale nie pasuje (^,^)
.
Możesz użyć dowolnego smaku wyrażenia regularnego, ale proszę podać wybór w swojej odpowiedzi i, jeśli to możliwe, podać link do testera online dla wybranego smaku. Nie możesz używać żadnych funkcji wyrażenia regularnego, które pozwalają wywoływać kod w języku macierzystym smaku (np. e
Modyfikator smaku Perla ).
Ograniczniki (podobne /regex/
) nie są uwzględniane w wyrażeniu regularnym, gdy są podawane jako dane wejściowe do innego, i nie można używać modyfikatorów, które znajdują się poza wyrażeniem regularnym. Niektóre smaki nadal pozwalają używać modyfikatorów z wbudowaną składnią, takich jak (?s)
.
Twój wynik to suma długości pięciu wyrażeń regularnych w bajtach. Niższe jest lepsze.
Okazuje się, że to dużo prostsze, aby znaleźć się roztwór roboczy tego problemu niż może się wydawać na pierwszy, ale mam nadzieję, że znalezienie optymalnego rozwiązania jest dość trudne.
\b
dopasowania hello
( granica słowa) (na początku i na końcu), ale nie pasuje (^,^)
”.