Wyzwaniem, jeśli je zaakceptujesz, jest napisanie trzech funkcji lub programów A, B i C:
- A jest quine, która wyprowadza wszystkie A, B i C (co jest również całą zawartością kodu w twoim zgłoszeniu).
- B bierze parametr F i sprawdza, czy jest to taki quine (wyjście FBC), czy robi coś innego.
- C przyjmuje parametr G i sprawdza, czy G prawdopodobnie działa jak B (sprawdzanie, czy F generuje FGC). Nie można zdecydować, czy funkcja jest narzędziem sprawdzającym quine, więc zróbmy coś prostszego:
- Musi zwrócić prawdę, jeśli G jest ważne dla B.
- Musi zwrócić falsey, jeśli G zwróci falsey dla wszystkich ważnych quines lub G zwróci prawdę dla wszystkich ważnych non-quines.
- Może zwrócić cokolwiek, ulec awarii lub nie zostać zakończone itp., Jeśli jest to jeden z pozostałych przypadków.
Zauważ, że B jest możliwe. A i F nie mają żadnych danych wejściowych, więc możesz je po prostu uruchomić i sprawdzić wynik.
Zasady
- Powinien być jakiś sposób na określenie, które części to A, B i C z wyjścia A. Na przykład: każda z nich ma jedną linię lub są rozpoznawane jako trzy funkcje interpretera.
- Każda funkcja powinna działać tylko z definicją samego siebie, a nie pełnego kodu.
- Możesz użyć funkcji / programu lub jego kodu źródłowego lub pary obu jako danych wejściowych B (lub G) i C.
- Możesz ponownie zdefiniować wartość true / falsey do podzbioru tych wartości. Możesz również konsekwentnie wymagać, aby F zwrócił wybrany typ, na przykład pojedynczy ciąg.
- Możesz wymagać A, B, F i G, jeśli są wywoływane z prawidłowymi parametrami, konsekwentnie nie mają niektórych rodzajów innych danych wejściowych lub efektów ubocznych, które wybierzesz, takich jak dostęp do zmiennych globalnych lub odczyt stdin itp.
- Możesz również założyć F i G, jeśli są wywoływane z prawidłowymi parametrami, zawsze zakończ.
- F powinien działać w takich samych warunkach jak A. Zatem nie może zależeć od istnienia B, C lub innej zmiennej, chyba że zmienna ta jest zdefiniowana we własnej części w wyniku.
- Żadne funkcje ani programy nie mogą odczytać własnego kodu źródłowego.
- Jest to kod-golf, wygrywa najkrótszy kod (który jest wynikiem A) w bajtach.