G |`
HHeelllloo,, WWoorrlldd!!
$_&
(.)\1t?
$1
Wypróbuj online!
Dziwne pozycje:
G|
Hello, World!
_
()1?$
Wypróbuj online!
Równe pozycje:
`
Hello, World!$&
.\t
1
Wypróbuj online!
Wyjaśnienie
Pełny program:
G |`
To nic nie robi. To |
nie jest istniejąca opcja konfiguracji. To G
sprawia, że jest to etap grep, ale tak naprawdę nie ma nic do grepowania, a wyrażenie regularne jest puste, więc to nic nie robi. Celem tego etapu jest ustawienie dwóch kanałów przed głównym „Witaj, świecie!” tak, aby jeden z nich zawsze przetrwał redukcję. Powodem, dla którego jest to jeleń grep, jest to, że musimy zrównoważyć parzystość linii, a etapy grep wymagają tylko jednej linii.
HHeelllloo,, WWoorrlldd!!
Powoduje to przekształcenie (pustego) ciągu roboczego w wymagany wynik z podwojeniem każdego znaku.
$_&
To nic nie robi. Wyrażenie regularne próbuje dopasować a _
i a &
po końcu łańcucha, co jest oczywiście niemożliwe. Będziemy jednak potrzebować tych postaci w zmniejszonej wersji, ponownie, aby poradzić sobie z znikającymi liniami.
(.)\1t?
$1
Na koniec usuwamy zduplikowane znaki, zastępując (.)\1
je $1
. Thet?
Nigdy nie jest używany, ale znów będzie to konieczne w obniżonej wersji.
Program nieparzysty:
G|
Hello, World!
Nie G
można dopasować pustego wejścia, ale dlatego musimy |
zezwolić na alternatywne puste dopasowanie. To zamienia pusty ciąg roboczy w pożądane wyjście.
_
()1?$
Zastępuje to podkreślenia ()1?$
, ale w ciągu nie ma żadnych podkreślników, więc to nic nie robi.
Program parzysty:
`
Hello, World!$&
Po `
prostu oznacza pusty ciąg konfiguracji, więc ponownie używamy pustego wyrażenia regularnego, aby zastąpić ciąg roboczy wyjściem. Tym razem również wstawiamy, $&
ale to samo dopasowanie, które jest oczywiście puste, więc nic nie robi.
.\t
1
Zastąpiłoby to dowolny znak, a po nim tabulację 1
, ale nie mamy żadnych tabulatorów, więc nie można tego zrobić.