Dodano nowe linie dla jasności:
(a(:^)*(!()):#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>(0)(!()){:^}(1)(){:^}(2)(:*){:^}(
3)(::**){:^}(4)(:*:*){:^}(5)(::*:**){:^}(6)(:*::**){:^}(7)(::*::***){:^}(8)(:*:*:*){:^}(9)(
::**::**){:^}R^^S):^
Dałem sobie ograniczenie, że musi czytać ze STDIN, a nie ze szczytu stosu, jak to zwykle bywało w przypadku niedociążenia. Użyłem również poprawnego, dziesiętnego wejścia, które stanowi większość kodu.
Wyjaśnienie:
Zawijam program w quine-wrapper: (a(:^)*
i ):^
. Oznacza to, że cały kod wewnątrz opakowania quine będzie miał kod źródłowy programu na dole stosu.
Aby przekonwertować cyfry na normalną liczbę kościelną, używam techniki zastępowania każdej cyfry kodem, aby pomnożyć przez 10 i dodać tę cyfrę:
0 -> (::*:**:*)*
1 -> (::*:**:*)*(:)~*(*)*
2 -> (::*:**:*)*(::)~*(**)*
3 -> (::*:**:*)*(:::)~*(***)*
Jest tu wiele powtórzeń, więc spakujmy go do podprogramu, który pobierze cyfrę Kościoła z góry stosu i użyje jej do skonstruowania „ciągu cyfr”:
:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*
Umieszczam to w nowym środowisku, aby można było szybko uzyskać do niego dostęp:
#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>
Teraz mogę utworzyć kod zastępczy dla R
. R
wykorzystuje górne elementy stosu, aby utworzyć tabelę odnośników w celu zastąpienia ciągu STDIN kodem Betaload. Działa to tak:
()
(0)(code for 0)
(1)(code for 1)
(2)(code for 2)
...
R
Możemy jednak użyć podprogramu, który właśnie utworzyliśmy, aby wygenerować segmenty kodu:
(0)(!()){:^}
(1)(){:^}
(2)(:*){:^}
(3)(::**){:^}
...
Po R
uruchomieniu przekształci dane wejściowe w serię podprogramów, które tworzą cyfrę Kościoła. Kiedy ten podprogram jest wykonywany, tworzy ten numer kościelny na następnym elemencie na stosie (0, który został umieszczony wcześniej). Oznacza to, że później R^
najwyższą wartością na stosie będzie liczba kościelna. Następnie ^
jeszcze raz zastosujemy cyfrę Kościoła do ostatniego elementu na stosie (kodu źródłowego programu), aby uzyskać odpowiedź.
Ciekawostka: mam MD na to zgłoszenie od kilku miesięcy. Zatrzymałem je po niezrozumieniu pytania (którego nie mogę już znaleźć). Musiałem go wykopać z Kosza, aby opublikować tutaj.