Estou tentando escrever um algoritmo de Markov normal em um emulador para trocar dois números ternários separados pelo símbolo "^". Por exemplo, para a entrada "120^210", o resultado deve ser "210^120".
Eu tentei estas regras:
^0 -> 0@^
^1 -> 1@^
^2 -> 2@^
@^0 -> 0@^
@^1 -> 1@^
@^2 -> 2@^
@^ -> ^
^->@
@0 -> ^0
@1 -> ^1
@2 -> ^2
@ -> ^
Mas não funcionou corretamente; só recebo "120210^".
Quando o
^
símbolo se moveu para a extrema direita, e é substituído por@
, então não há mais regras que se aplicam. Por exemplo,@0
,@1
,@2
nunca ocorrerá, então as regras correspondentes nunca serão ativadas, e então isso@
é substituído de volta para^
sem ter realizado nada.Eu sugeriria dividir a tarefa nestas fases:
Você pode usar um marcador diferente para cada fase para saber "onde você está".
Aqui está uma possível implementação em JavaScript do algoritmo de Markov, dado um conjunto de regras que aplicarão as fases acima: