Le puzzle MU est un puzzle dans lequel vous découvrez si vous pouvez vous transformer MI
en MU
étant donné les opérations suivantes:
Si votre chaîne se termine par
I
, vous pouvez ajouter unU
à la fin. (par exempleMI -> MIU
)Si votre chaîne commence par
M
, vous pouvez ajouter une copie de la partie suivanteM
à la chaîne.
(par exempleMII -> MIIII
)Si votre chaîne contient trois consécutifs
I
, vous pouvez les changer en aU
.
(par exempleMIII -> MU
)Si votre chaîne contient deux consécutifs
U
, vous pouvez les supprimer. (par exempleMUUU -> MU
).
Votre tâche consiste à créer un programme qui détermine si cela est possible pour les chaînes de début et de fin.
Votre programme prendra deux chaînes en entrée. Chaque chaîne comprendra les éléments suivants:
un
M
.une chaîne de jusqu'à vingt-neuf
I
etU
.
Votre programme retournera alors true
(ou la représentation de votre langage de programmation / YPLRT) si la deuxième chaîne est accessible à partir de la première chaîne, et false
(ou YPLRT) si ce n'est pas le cas.
Exemples d'entrées et sorties:
MI MII
true
MI MU
false
MIIIIU MI
true
Le code le plus court dans n'importe quelle langue pour ce faire gagne.
la source
MI
sont exactement ceuxM(I|U)*
où le nombre deI
n'est pas un multiple de 3. Et une telle vérification directe rend sûrement le code plus court. De plus, je ne connais pas de limite a-priori sur les longueurs de chaînes requises pour les étapes intermédiaires, donc la recherche directe peut être tout simplement impossible.MI
d'une chaîne accessible donnée.IM
est fournie ouMUMMI
?Réponses:
SWI Prolog, 183 caractères
Que diriez-vous d'un Prolog, (puisque personne n'a répondu dans 6 mois). Pour exécuter, utilisez simplement "s (mi, mu)". Le code décompose les atomes en caractères, puis recherche la solution.
la source
s(mi,miiii)
et, en général, tout élément nécessitant plus d'une application de la règle 2 pour prouver.