O quebra - cabeça MU é um quebra-cabeça no qual você descobre se pode se transformar MI
nas MU
seguintes operações:
Se sua string terminar
I
, você poderá adicionarU
a no final. (por exemploMI -> MIU
)Se sua sequência começar
M
, você poderá anexar uma cópia da peça depoisM
à sequência.
(por exemploMII -> MIIII
)Se a sua string contiver três consecutivas
I
, você poderá alterá-las para aU
.
(por exemploMIII -> MU
)Se sua string contiver dois consecutivos
U
, você poderá excluí-los. (por exemploMUUU -> MU
).
Sua tarefa é criar um programa que determine se isso é possível para qualquer sequência de início e fim.
Seu programa terá duas seqüências de caracteres como entrada. Cada sequência consistirá no seguinte:
um
M
.uma sequência de até vinte e nove
I
'eU
'.
Seu programa retornará true
(ou a representação da sua linguagem de programação / YPLRT) se a segunda string estiver acessível a partir da primeira string e false
(ou YPLRT) se não estiver.
Exemplos de entradas e saídas:
MI MII
true
MI MU
false
MIIIIU MI
true
O código mais curto em qualquer idioma para fazer isso vence.
MI
são exatamente M(I|U)*
onde o número de I
não é um múltiplo de 3. E essa verificação direta certamente contribui para um código mais curto. Além disso, não conheço um limite a priori no comprimento das seqüências necessárias para etapas intermediárias, portanto, a pesquisa direta pode ser simplesmente impraticável.
MI
de uma determinada sequência acessível.
IM
for fornecida ou MUMMI
?