^
1 N23456
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
.* (.).*
$1
Usa u
e d
para cima e para baixo.
Experimente online!
Explicação
Este programa funciona mantendo 1N23456
a sequência de instruções. Ele mantém o controle da engrenagem atual, tendo um espaço atrás dela. Depois, são necessárias uma instrução de cada vez até que não haja mais.
^
1 N23456
Comece colocando 1 N23456
antes da entrada. O espaço anterior N
indica que N
é a marcha atual.
+(` (.)?(\w*6)u
$1 $2
)`(.)? (\w*6)d
$1$2
Esses são dois estágios de substituição, agrupados e executados até que parem de alterar a sequência:
(.)?(\w*6)u
$1 $2
O primeiro lida com a mudança de marcha. Ele procurará qualquer número de marchas após o espaço, seguido de a e 6
, em seguida, seguido por u
( u
indica a instrução para mudar de marcha). Se houvesse caracteres antes do 6, ele trocaria o espaço pelo caractere imediatamente após, excluí-lo u
e deixaria o restante da string intacta. Como o jogo 6
é obrigatório na partida, ele só trocará o espaço com qualquer personagem antes do 6
. Ele nunca será trocado com o 6
.
(.)? (\w*6)d
$1$2
O segundo estágio lida com a mudança de marchas para baixo e funciona da mesma forma. Ele procura opcionalmente um personagem antes do espaço, depois outras artes depois de terminar 6
, seguido por d
. Ele troca o espaço com o personagem antes dele, exclui o d
e deixa o resto intacto. Se o espaço estava no início da sequência, não havia correspondência para um caractere antes do espaço, portanto, nenhuma troca ocorre.
.* (.).*
$1
Depois que nenhuma das substituições acima pode ser realizada, todas as trocas de marchas foram concluídas. A linha é limpa de tudo, exceto a engrenagem imediatamente após o espaço. Esta é a engrenagem final.