Змагання
У цих проблемах, ви задаєте вихідний мову 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є ланцюжок.