G |`
HHeelllloo,, WWoorrlldd!!
$_&
(.)\1t?
$1
Experimente online!
Posições ímpares:
G|
Hello, World!
_
()1?$
Experimente online!
Posições pares:
`
Hello, World!$&
.\t
1
Experimente online!
Explicação
O programa completo:
G |`
Isso não faz nada. A |opção não é uma configuração existente. O Gtorna esta uma fase grep, mas não há realmente nada a ser grepped ea regex é esvaziar qualquer, então isso não faz nada. O objetivo desse estágio é ter dois feeds de linha na frente do "Olá, mundo!" linha para que um deles sempre sobreviva à redução. A razão para fazer disso um grep stag é que precisamos compensar a paridade das linhas, e os estágios grep requerem apenas uma única linha.
HHeelllloo,, WWoorrlldd!!
Isso transforma a sequência de trabalho (vazia) na saída necessária, com cada caractere dobrado.
$_&
Isso não faz nada. As tentativas de regex para corresponder a um _e um &após o final da cadeia que é obviamente impossível. No entanto, precisaremos desses caracteres na versão reduzida, novamente para lidar com os desaparecimentos de linha.
(.)\1t?
$1
Finalmente, removemos os caracteres duplicados substituindo (.)\1por $1. O t?nunca é usado, mas será novamente necessário nas versões reduzidas.
O programa ímpar:
G|
Hello, World!
O Gnão pode corresponder à entrada vazia, mas é por isso que temos |que permitir uma correspondência vazia alternativa. Isso transforma a cadeia de trabalho vazia na saída desejada.
_
()1?$
Isso substitui os sublinhados por ()1?$, mas não há sublinhados na sequência, portanto, isso não faz nada.
O programa par:
`
Hello, World!$&
O `just denota uma string de configuração vazia, então usamos novamente o regex vazio para substituir a string de trabalho pela saída. Desta vez, também inserimos, $&mas essa é a correspondência em si, que está vazia, é claro, para que não faça nada.
.\t
1
Isso substituiria qualquer caractere seguido por uma guia por a 1, mas não temos nenhuma guia , portanto, isso também é um não-op.