MU bulmaca Eğer açabilirsiniz olup olmadığını öğrenmek olduğu bir bulmaca MI
haline MU
verilen aşağıdaki işlemleri:
Dizeniz bitiyorsa sonuna sonuna
I
bir ekleyebilirsinizU
. (ör.MI -> MIU
)Dizeniz ile başlıyorsa, dizenin
M
arkasına parçanın bir kopyasını ekleyebilirsinizM
.
(ör.MII -> MIIII
)Dizeniz art arda üç tane içeriyorsa
I
, bunları birU
.
(ör.MIII -> MU
)Dizeniz art arda iki tane içeriyorsa
U
bunları silebilirsiniz. (örneğinMUUU -> MU
).
Göreviniz, bunun herhangi bir başlangıç ve bitiş dizesi için geçerli olup olmadığını belirleyen bir program oluşturmaktır.
Programınız girdi olarak iki dize alacaktır. Her dize aşağıdakilerden oluşur:
bir
M
.en fazla yirmi dokuz
I
s veU
s.
true
İkinci dizeye ilk dizeden erişilebilirse programınız geri döner (veya programlama dilinizin temsili / YPLRT) ve değilse false
(veya YPLRT).
Örnek giriş ve çıkışlar:
MI MII
true
MI MU
false
MIIIIU MI
true
Bunu yapmak için herhangi bir dilde en kısa kod kazanır.
MI
tam olarak M(I|U)*
sayısı nerede I
3'ün katı değil Ve böyle bir direkt onay mutlaka kısa kodu için yapar. Ayrıca, ara adımlar için gerekli dizelerin uzunluklarına bağlı bir a priori bilmiyorum, bu yüzden doğrudan arama sadece pratik olmayabilir.
MI
belirli bir ulaşılabilir dizeden başlayarak bir türetme ver .
IM
Verilmişse çıkış ne olmalı veya MUMMI
?