Головоломка MU - головоломка , в якій ви дізнаєтеся, чи можна включити MI
в MU
даних наступних операцій:
Якщо ваш рядок закінчується
I
, ви можете додати йогоU
до кінця. (наприкладMI -> MIU
)Якщо ваш рядок починається з
M
, ви можете додати копію частини після цьогоM
до рядка.
(наприкладMII -> MIIII
)Якщо ваша рядок містить три послідовних
I
, ви можете змінити їх наU
.
(наприкладMIII -> MU
)Якщо ваша рядок містить два послідовних
U
, ви можете їх видалити. (наприкладMUUU -> MU
).
Ваше завдання - створити програму, яка визначає, чи це можливо для будь-яких рядків початку та закінчення.
Ваша програма буде вводити два рядки як вхідні дані. Кожна рядок складається з наступного:
один
M
.рядок до двадцяти дев'яти
I
іU
з.
Потім ваша програма поверне true
(або представлення вашої мови програмування / YPLRT), якщо другий рядок буде доступний з першої струни, і false
(або YPLRT), якщо він не є.
Приклади входів і виходів:
MI MII
true
MI MU
false
MIIIIU MI
true
Найкоротший код будь-якої мови для цього виграє.
MI
це саме те, M(I|U)*
де кількість I
не кратна 3. І така пряма перевірка, безумовно, передбачає коротший код. Крім того, я не знаю апріорі, обмеженого довжинами рядків, необхідних для проміжних кроків, тому прямий пошук може бути просто недоцільним.
MI
заданої рядки, що доступна.
IM
він подається або MUMMI
?