MU zagadka jest logiczna, w której dowiesz się, czy można włączyć MI
do MU
podanych następujących operacji:
Jeśli twój łańcuch kończy się na
I
, możesz dodać aU
na końcu. (np.MI -> MIU
)Jeśli ciąg zaczyna się od
M
, możesz dołączyć kopię części poM
nim.
(np.MII -> MIIII
)Jeśli Twój ciąg zawiera trzy kolejne
I
, możesz zmienić je naU
.
(np.MIII -> MU
)Jeśli Twój ciąg zawiera dwa kolejne
U
, możesz je usunąć. (npMUUU -> MU
.).
Twoim zadaniem jest zbudowanie programu, który określa, czy jest to wykonalne dla dowolnych ciągów początkowych i końcowych.
Twój program pobierze dwa ciągi jako dane wejściowe. Każdy ciąg składa się z następujących elementów:
jeden
M
.ciąg do dwudziestu dziewięciu
I
iU
tych.
Twój program zwróci następnie true
(lub jego reprezentację języka programowania / YPLRT), jeśli drugi łańcuch jest osiągalny z pierwszego łańcucha i false
(lub YPLRT), jeśli nie jest.
Przykładowe dane wejściowe i wyjściowe:
MI MII
true
MI MU
false
MIIIIU MI
true
Wygrywa najkrótszy kod w dowolnym języku, aby to zrobić.
MI
są dokładnie tam, M(I|U)*
gdzie liczba I
nie jest wielokrotnością 3. A takie bezpośrednie sprawdzenie z pewnością skraca kod. Ponadto nie znam a priori związanego z długością łańcuchów wymaganych dla pośrednich kroków, więc bezpośrednie wyszukiwanie może być po prostu niepraktyczne.
MI
danego osiągalnego ciągu.
IM
został dostarczony lub MUMMI
?