Нові рядки додані для наочності:
(a(:^)*(!()):#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>(0)(!()){:^}(1)(){:^}(2)(:*){:^}(
3)(::**){:^}(4)(:*:*){:^}(5)(::*:**){:^}(6)(:*::**){:^}(7)(::*::***){:^}(8)(:*:*:*){:^}(9)(
::**::**){:^}R^^S):^
Я дав собі обмеження, що він повинен читати з STDIN, а не з верхньої частини стека, як зазвичай відповідь Underload. Я також використав правильний, десятковий ввід, який складає більшу частину коду.
Пояснення:
Я загортаю програму в обгортку quine: (a(:^)*і ):^. Це означає, що весь код всередині заготівлі quine буде мати вихідний код програми в нижній частині стека.
Для того, щоб перетворити цифри в звичайну церковну цифру, я використовую техніку заміни кожної цифри кодом, щоб помножити на 10 і додати цю цифру:
0 -> (::*:**:*)*
1 -> (::*:**:*)*(:)~*(*)*
2 -> (::*:**:*)*(::)~*(**)*
3 -> (::*:**:*)*(:::)~*(***)*
Тут багато повторень, тому давайте упакуємо його в підпрограму, яка візьме церковну цифру вгорі стека і використаємо її для побудови "цифрного рядка:"
:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*
Я ставлю це до нового середовища, щоб швидко отримати доступ до нього:
#(}:(:)~^a((::*:**:*)*)~*(~*)*~(*)~^a*(*)*{)>
Тепер я можу створити код заміни для R. Rвикористовує верхні елементи стеку для формування таблиці пошуку для заміни рядка з STDIN на код Betaload. Це працює так:
()
(0)(code for 0)
(1)(code for 1)
(2)(code for 2)
...
R
Однак ми можемо використовувати підпрограму, яку ми тільки що зробили для створення кодових сегментів:
(0)(!()){:^}
(1)(){:^}
(2)(:*){:^}
(3)(::**){:^}
...
Коли Rце буде запущено, воно перетворить вхід у низку підпрограм, які створюють число Церкви. Коли ця підпрограма виконується, вона створює цю церковну цифру на наступному елементі стека (0, який було розміщено раніше). Це означає, що після R^цього найвищим значенням на стеку буде церковна цифра. Потім ^ми ще раз застосуємо номер Церкви до кінцевого елемента стека (вихідний код програми), щоб отримати відповідь.
Веселий факт: я мав доктор медицини на цю заяву кілька місяців. Я залишив це після нерозуміння питання (якого я, здається, більше не можу знайти). Мені довелося викопати його зі свого кошика, щоб розмістити його тут.