Змагання
У цих проблемах, ви задаєте вихідний мову S
і мову перекладу T
. Ваше завдання - написати наступну програму P
мовою S
. Якщо дійсна програма Q
на мові T
задана як вхід P
, вона виведе дійсну програму R
мовою, T
яка не приймає вводу та виведення Q(R)
, тобто програму, Q
застосовану до вихідного коду R
. Крім того , ви маєте представити у своїй відповіді нетривіальну прикладну програму Q
(чим цікавіше, тим краще, хоча ви не набрали за це балів), отриману програму R
та вихід R
. Це код-гольф, тому найкоротший код для P
виграшу.
Іншими словами, це виклик щодо написання "універсального конструктора квінок", який може створювати довільні типи узагальнених лайків.
Роз'яснення
- Ваш вихідний та цільовий мови можуть бути однаковими.
- Програма
P
повинна приймати один рядок як вхідний (від STDIN або еквівалентний), а один рядок (STDOUT або еквівалентний), як і кожну програму виводуR
. - Програми введення
Q
також повинні перетворювати рядок в інший рядок, але їх форма є більш гнучкою: вони можуть бути функціями "рядок-рядок", фрагментами коду, що змінюють змінну з певним іменем, фрагменти, що змінюють стек даних, якщо ваша цільова мова Ви можете також обмежити формуQ
's, заявивши, що, наприклад, вони можуть не містити коментарів. Однак ви повинні мати можливість реалізовувати будь-яку обчислювану функцію "рядок-рядок" як програму введенняQ
, і ви повинні чітко вказати, як вони функціонують, і які додаткові обмеження ви покладете на них. - Програма виводу
R
дійсно повинна бути (узагальненою) ланцюжком, тому вона не повинна читати жодного вводу (введення користувача, файли тощо), якщоQ
це не робиться. - Стандартні лазівки заборонені.
Приклад
Припустимо, я вибираю Python як свою мову-джерело, а Haskell - мою цільову мову, і я вимагаю, щоб програма введення була однопорядковою ознакою String -> String
функції з назвою f
. Якщо я даю програму обертання рядків
f x = reverse x
як вхід до моєї програми Python P
, він виведе вихідний код іншої програми Haskell R
. Ця програма друкує для STDOUT вихідного коду R
, але відмінено. Якщо P
дано функцію ідентичності
f x = x
як вхідний, вихідною програмою R
є ланцюжок.