Головоломка MU - головоломка , в которой вы узнаете, можно ли включить MI
в MU
данных следующих операций:
Если ваша строка заканчивается
I
, вы можете добавитьU
в конец. (напримерMI -> MIU
)Если ваша строка начинается с
M
, вы можете добавить копию части послеM
строки.
(напримерMII -> MIIII
)Если ваша строка содержит три последовательных
I
, вы можете изменить их наU
.
(напримерMIII -> MU
)Если ваша строка содержит два последовательных
U
, вы можете удалить их. (напримерMUUU -> MU
).
Ваша задача - создать программу, которая определяет, выполнимо ли это для любых начальных и конечных строк.
Ваша программа примет две строки в качестве входных данных. Каждая строка будет состоять из следующего:
один
M
.строка до двадцати девяти
I
«s иU
» s.
Затем ваша программа вернет true
(или представление вашего языка программирования / YPLRT), если вторая строка достижима из первой строки, и false
(или YPLRT), если это не так.
Пример входов и выходов:
MI MII
true
MI MU
false
MIIIIU MI
true
Самый короткий код на любом языке для этого выигрывает.
источник
MI
- это именно то место,M(I|U)*
где числоI
не кратно 3. И такая прямая проверка, безусловно, способствует сокращению кода. Кроме того, я не знаю априорной оценки длин строк, необходимых для промежуточных шагов, поэтому прямой поиск может быть просто непрактичным.MI
заданной достижимой строки.IM
поставлен илиMUMMI
?Ответы:
SWI Пролог, 183 персонажа
Как насчет Пролога (так как никто не ответил через 6 месяцев). Для запуска просто используйте «s (mi, mu)». Код разбивает атомы на символы, а затем ищет решение.
источник
s(mi,miiii)
, и в целом все, что требует более одного применения правила 2 для доказательства.