G |`
HHeelllloo,, WWoorrlldd!!
$_&
(.)\1t?
$1
Pruébalo en línea!
Posiciones impares:
G|
Hello, World!
_
()1?$
Pruébalo en línea!
Posiciones pares:
`
Hello, World!$&
.\t
1
Pruébalo en línea!
Explicación
El programa completo:
G |`
Esto no hace nada en absoluto. La |
no es una opción de configuración existente. Esto lo G
convierte en una etapa de grep, pero realmente no hay nada que ser grepé y la expresión regular está vacía, por lo que esto no hace nada. El propósito de esta etapa es tener dos avances de línea frente al principal "¡Hola, mundo!" línea para que uno de ellos siempre sobreviva a la reducción. La razón para convertir esto en un ciervo grep es que necesitamos compensar la paridad de las líneas, y las etapas grep solo requieren una sola línea.
HHeelllloo,, WWoorrlldd!!
Esto convierte la cadena de trabajo (vacía) en la salida requerida con cada carácter duplicado.
$_&
Esto no hace nada. Los intentos de expresiones regulares para que coincida con una _
y &
después del final de la cadena, que es, por supuesto, imposible. Sin embargo, necesitaremos esos caracteres en la versión reducida, nuevamente para lidiar con los avances de línea que desaparecen.
(.)\1t?
$1
Finalmente, eliminamos los caracteres duplicados reemplazándolos (.)\1
con $1
. El t?
nunca se usa pero será necesario nuevamente en las versiones reducidas.
El programa extraño:
G|
Hello, World!
No G
puede coincidir con la entrada vacía, pero es por eso que tenemos |
que permitir una coincidencia vacía alternativa. Esto convierte la cadena de trabajo vacía en la salida deseada.
_
()1?$
Esto reemplaza los guiones bajos con ()1?$
, pero no hay guiones bajos en la cadena, por lo que no hace nada.
El programa par:
`
Hello, World!$&
El `
solo denota una cadena de configuración vacía, por lo que nuevamente usamos la expresión regular vacía para reemplazar la cadena de trabajo con la salida. Esta vez también insertamos, $&
pero esa es la coincidencia en sí, que está vacía, por supuesto, por lo que no hace nada.
.\t
1
Esto reemplazaría cualquier carácter seguido de una pestaña con un 1
, pero no tenemos pestañas, por lo que esto también es un no-op.