Wenn Sie diese Herausforderung annehmen, besteht diese Herausforderung darin, drei Funktionen oder Programme A, B und C zu schreiben:
- A ist eine Quine, die alle A, B und C ausgibt (was auch den gesamten Inhalt des Codes in Ihrer Einreichung darstellt).
- B nimmt einen Parameter F und prüft, ob es sich um eine solche Quine handelt (Ausgabe von FBC) oder ob etwas anderes getan wird.
- C nimmt einen Parameter G und prüft, ob G möglicherweise wie B funktioniert (prüft, ob F FGC ausgibt). Es ist unmöglich zu entscheiden, ob eine Funktion ein Quine Checker ist. Lassen Sie uns also etwas Einfacheres tun:
- Es muss wahr sein, wenn G für B gültig ist.
- Es muss falsey zurückgeben, wenn G für alle gültigen Quines falsey zurückgibt, oder G für alle gültigen Nicht-Quines wahrheitsgemäß zurückgibt.
- Es kann alles zurückgeben, abstürzen oder nicht beenden usw., wenn es sich um einen der anderen Fälle handelt.
Beachten Sie, dass B möglich ist. A und F haben keine Eingabe, Sie können sie also einfach ausführen und das Ergebnis überprüfen.
Regeln
- Es sollte eine Möglichkeit geben, anhand der Ausgabe von A zu erkennen, welche Teile A, B und C sind. Beispiel: Jede hat eine Zeile, oder sie werden im Interpreter als drei Funktionen erkannt.
- Jede Funktion sollte nur mit der Definition von sich selbst ausgeführt werden, nicht mit Ihrem vollständigen Code.
- Sie können eine Funktion / ein Programm oder dessen Quellcode oder ein Paar von beiden als Eingabe von B (oder G) und C verwenden.
- Sie können truey / falsey für eine Teilmenge dieser Werte neu definieren. Sie können auch konsistent verlangen, dass F einen von Ihnen ausgewählten Typ zurückgibt, z. B. eine einzelne Zeichenfolge.
- Sie können A, B, F und G benötigen, wenn sie mit gültigen Parametern aufgerufen werden und durchweg keine anderen Arten von Eingaben oder Nebenwirkungen haben, die Sie auswählen, z. B. den Zugriff auf globale Variablen oder das Lesen von stdin usw.
- Sie können auch annehmen, dass F und G immer enden, wenn sie mit gültigen Parametern aufgerufen werden.
- F sollte unter den gleichen Bedingungen wie A arbeiten. Es kann also nicht von B oder C oder der Existenz einer anderen Variablen abhängen, es sei denn, diese Variable ist in ihrer Ausgabe in ihrem eigenen Teil definiert.
- Keine Funktionen oder Programme können ihren eigenen Quellcode lesen.
- Dies ist Code-Golf, der kürzeste Code (der die Ausgabe von A ist) in Bytes gewinnt.