Wyzwanie
W tym wyzwaniu określasz język źródłowy S i docelowy T . Twoim zadaniem jest napisanie następującego programu Pw języku S. Jeśli jako program wejściowy podano poprawny program Qw języku , wyświetli on prawidłowy program w języku, który nie przyjmuje danych wejściowych i wyjściowych , to znaczy program zastosowany do kodu źródłowego . Ponadto powinieneś przedstawić w swojej odpowiedzi nietrywialny przykładowy program (im bardziej interesujący, tym lepszy, choć nie zdobywasz za to punktów), wynikowy program i wynik działania . To jest kod-golf, więc najkrótszy kod wygranych.TPRTQ(R)QRQRRP
Innymi słowy, jest to wyzwanie związane z napisaniem „uniwersalnego konstruktora quine”, który może tworzyć dowolne typy uogólnionych quines.
Wyjaśnienia
- Twoje języki źródłowe i docelowe mogą być identyczne.
- Program
Ppowinien pobrać jeden ciąg jako dane wejściowe (z STDIN lub równoważnego) i wyprowadzić jeden ciąg (do STDOUT lub równoważnego), tak jak każdy program wyjściowyR. - Programy wejściowe
Qpowinny także przekształcać ciąg znaków na inny, ale ich forma jest bardziej elastyczna: mogą to być funkcje ciąg-ciąg, fragmenty kodu modyfikujące zmienną o określonej nazwie, fragmenty modyfikujące stos danych, jeśli język docelowy ma jeden itp. Możesz także dodatkowo ograniczyć formę tychQplików, stwierdzając, że na przykład nie mogą one zawierać żadnych komentarzy. Jednak musisz być w stanie zaimplementować dowolną obliczalną funkcję typu string-to-string jako program wejściowyQi musisz wyraźnie określić, jak one działają i jakie dodatkowe ograniczenia na nich nakładasz. - Program wyjściowy
Rpowinien być naprawdę (uogólnionym) quine, więc nie może czytać żadnych danych wejściowych (danych wejściowych użytkownika, plików itp.), ChybaQże tak się stanie. - Standardowe luki są niedozwolone.
Przykład
Załóżmy, że wybrałem Python jako język źródłowy i Haskell jako język docelowy, a ponadto wymagam, aby program wejściowy był definicją String -> Stringfunkcji o jednym wierszu f. Jeśli dam program do odwracania łańcucha
f x = reverse x
jako dane wejściowe do mojego programu Python P, wypisze kod źródłowy innego programu Haskell R. Ten program wypisuje do STDOUT kod źródłowy R, ale jest odwrócony. Jeśli Ppodano funkcję tożsamości
f x = x
jako wejście program wyjściowy Rjest quine.