El rompecabezas MU es un rompecabezas en el que descubres si puedes convertirte MI
en MU
las siguientes operaciones:
Si su cadena termina en
I
, puede agregar unU
al final. (por ejemploMI -> MIU
)Si su cadena comienza con
M
, puede agregar una copia de la parte posteriorM
a la cadena.
(por ejemploMII -> MIIII
)Si su cadena contiene tres
I
' consecutivos , puede cambiarlos a aU
.
(por ejemploMIII -> MU
)Si su cadena contiene dos
U
' consecutivos , puede eliminarlos. (por ejemploMUUU -> MU
)
Su tarea es crear un programa que determine si esto es factible para cualquier cadena de inicio y finalización.
Su programa tomará dos cadenas como entrada. Cada cadena constará de lo siguiente:
uno
M
.una cadena de hasta veintinueve
I
yU
s.
Su programa luego regresará true
(o la representación del mismo en su lenguaje de programación / YPLRT) si la segunda cadena es accesible desde la primera cadena, y false
(o YPLRT) si no lo es.
Ejemplo de entradas y salidas:
MI MII
true
MI MU
false
MIIIIU MI
true
El código más corto en cualquier idioma para hacer esto gana.
fuente
MI
son exactamenteM(I|U)*
donde el número deI
no es múltiplo de 3. Y una verificación tan directa seguramente genera un código más corto. Además, no conozco un límite a priori en la longitud de las cadenas requeridas para los pasos intermedios, por lo que la búsqueda directa podría ser simplemente poco práctica.MI
de una cadena alcanzable dada.IM
se suministra oMUMMI
?Respuestas:
SWI Prolog, 183 caracteres
¿Qué tal un Prolog, (ya que nadie ha respondido en 6 meses). Para correr, simplemente use "s (mi, mu)". El código divide los átomos en caracteres, luego busca la solución.
fuente
s(mi,miiii)
, y en general cualquier cosa que requiera más de una aplicación de la regla 2 para probar.