Wyzwanie
W tym wyzwaniu określasz język źródłowy S
i docelowy T
. Twoim zadaniem jest napisanie następującego programu P
w języku S
. Jeśli jako program wejściowy podano poprawny program Q
w 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.T
P
R
T
Q(R)
Q
R
Q
R
R
P
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
P
powinien 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
Q
powinny 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ę tychQ
plikó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ściowyQ
i musisz wyraźnie określić, jak one działają i jakie dodatkowe ograniczenia na nich nakładasz. - Program wyjściowy
R
powinien 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 -> String
funkcji 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 P
podano funkcję tożsamości
f x = x
jako wejście program wyjściowy R
jest quine.