Ce défi, si vous l'acceptez, consiste à écrire trois fonctions ou programmes A, B et C:
- A est un quine qui génère tous les A, B et C (qui est également tout le contenu du code dans votre soumission).
- B prend un paramètre F et vérifie s'il s'agit d'une telle quine (sortie FBC), ou fait quelque chose de différent.
- C prend un paramètre G et vérifie si G fonctionne éventuellement comme B (vérifie si F sort FGC). Il est impossible de décider si une fonction est un vérificateur de quine, alors faisons quelque chose de plus simple:
- Il doit retourner vrai si G est valide pour B.
- Il doit renvoyer falsey si G renvoie falsey pour toutes les quines valides, ou G retourne true pour toutes les non-quines valides.
- Il peut renvoyer n'importe quoi, planter ou ne pas se terminer, etc., si c'est l'un des autres cas.
Notez que B est possible. A et F n'ont aucune entrée, vous pouvez donc simplement les exécuter et vérifier le résultat.
Règles
- Il devrait y avoir un moyen de savoir quelles parties sont A, B et C à partir de la sortie de A. Par exemple: chacune a une ligne, ou elles sont reconnues comme trois fonctions dans l'interpréteur.
- Chaque fonction doit s'exécuter avec uniquement la définition d'elle-même, pas votre code complet.
- Vous pouvez utiliser une fonction / programme ou son code source, ou une paire des deux comme entrée de B (ou G) et C.
- Vous pouvez redéfinir truey / falsey à un sous-ensemble de ces valeurs. Vous pouvez également demander systématiquement à F de renvoyer le type de votre choix, comme une chaîne unique.
- Vous pouvez exiger A, B, F et G, s'ils sont appelés avec des paramètres valides, n'ont pas systématiquement certains types d'autres entrées ou effets secondaires que vous choisissez, tels que l'accès aux variables globales, ou la lecture de stdin, etc.
- Vous pouvez également supposer que F et G, s'ils sont appelés avec des paramètres valides, se terminent toujours.
- F devrait fonctionner dans le même état que A. Il ne peut donc pas dépendre de B ou C ou de l'existence d'une autre variable, à moins que cette variable ne soit définie dans sa propre partie dans sa sortie.
- Aucune fonction ni aucun programme ne peut lire son propre code source.
- Il s'agit de code-golf, le code le plus court (qui est la sortie de A) en octets gagne.