Musisz napisać program lub funkcję, która, gdy dali niepusty ciąg S z N znaków ASCII druku † , wyprowadza program, który zakończy się z kodem wyjścia C , gdzie C jest na kod ASCII w pozycji 0 w S . Ten program piszesz dodatkowo wyjście program P , tak, że po uruchomieniu, to wychodzi z kodem wyjścia C " , gdzie C ' jest na kod ASCII w pozycji 1 w S . Program P wygeneruje inny program P ′ . Ten proces powtarza się, dopóki w S nie pozostaną żadne znaki. Po wykonaniu tej czynności nie musisz nic generować, a następnie opcjonalny nowy wiersz; i powinien wyjść z kodem wyjścia 0.
† Znaki pomiędzy 0x20
i 0x7e
włącznie.
Kilka innych zasad:
- Programy samomodyfikujące są niedozwolone: musisz wyprowadzić źródło do STDOUT (lub początkowo zwrócić wartość)
- Nie możesz odczytać własnego kodu źródłowego.
Zwycięży najkrótszy taki program w bajtach.
Do niektórych podstawowych testów można użyć tego skryptu ruby . (Pierwszy argument to sposób wywoływania skryptu, drugi to program, a trzeci to ciąg wejściowy.)
Przykład hipotetyczny
Powiedz, że program jest FOO
. Gdy podano ciąg „ABC”, wyświetla wynik BARA
. Ten program kończy działanie z kodem 65
i wyjściami BARB
. To z kolei kończy się wraz z kodem 66
i wyjściami BARC
. Ten program kończy działanie z kodem 67
i wyjściami BAR!
. To nic nie wyprowadza i kończy działanie wraz z kodem 0
.
33 throw
dowolną liczbę. Używasz negatywów dla poziomu systemu operacyjnego, a przesunięcie wynosi -512. Też bardzo nie lubię, ale szukam tutaj: Complang.tuwien.ac.at/forth/gforth/Docs-html/...
0
to sukces. tio.run/nexus/…