Das MU - Puzzle ist ein Puzzle , in dem Sie herausfinden, ob Sie drehen können MI
in MU
bestimmten den folgenden Operationen:
Wenn Ihre Zeichenfolge auf endet
I
, können Sie einU
am Ende hinzufügen . (zBMI -> MIU
)Wenn Ihre Zeichenfolge mit beginnt
M
, können Sie eine Kopie des Teils danachM
an die Zeichenfolge anhängen .
(zBMII -> MIIII
)Wenn Ihre Zeichenfolge drei aufeinanderfolgende Zeichenfolgen enthält
I
, können Sie sie in a ändernU
.
(zBMIII -> MU
)Wenn Ihre Zeichenfolge zwei aufeinanderfolgende Zeichenfolgen enthält
U
, können Sie diese löschen. (zBMUUU -> MU
).
Ihre Aufgabe ist es, ein Programm zu erstellen, das festlegt, ob dies für Start- und Zielzeichenfolgen möglich ist.
Ihr Programm nimmt zwei Zeichenfolgen als Eingabe. Jede Zeichenfolge besteht aus folgenden Elementen:
eins
M
.eine Zeichenfolge von bis zu neunundzwanzig
I
undU
.
Ihr Programm gibt dann true
(oder die Darstellung Ihrer Programmiersprache / YPLRT) zurück, wenn die zweite Zeichenfolge von der ersten Zeichenfolge aus erreichbar ist, und false
(oder YPLRT), wenn dies nicht der Fall ist.
Beispiel Ein- und Ausgänge:
MI MII
true
MI MU
false
MIIIIU MI
true
Der kürzeste Code in einer Sprache, um dies zu tun, gewinnt.
quelle
MI
denen aus erreicht werden kann, genau die, vonM(I|U)*
denen die AnzahlI
kein Vielfaches von 3 ist. Und eine solche direkte Prüfung führt mit Sicherheit zu einem kürzeren Code. Ich kenne auch keine A-priori-Grenze für die Länge der Zeichenfolgen, die für Zwischenschritte erforderlich sind, sodass die direkte Suche möglicherweise einfach unpraktisch ist.MI
einer bestimmten erreichbaren Zeichenfolge zu geben.IM
geliefert wird oderMUMMI
?Antworten:
SWI Prolog, 183 Zeichen
Wie wäre es mit einem Prolog (seit 6 Monaten hat niemand geantwortet). Verwenden Sie zum Ausführen einfach "s (mi, mu)". Der Code zerlegt Atome in Zeichen und sucht dann nach der Lösung.
quelle
s(mi,miiii)
und im Allgemeinen alles, was mehr als eine Anwendung von Regel 2 zum Nachweis erfordert.