Questa sfida, se la accetti, è scrivere tre funzioni o programmi A, B e C:
- A è un quine che genera tutto A, B e C (che è anche l'intero contenuto del codice nell'invio).
- B prende un parametro F e controlla se è un tale quine (che produce FBC) o che fa qualcosa di diverso.
- C accetta un parametro G e verifica se G funziona probabilmente come B (controllando se F genera FGC). È impossibile decidere se una funzione è un quine checker, quindi facciamo qualcosa di più semplice:
- Deve restituire la verità se G è valido per B.
- Deve restituire falsey se G restituisce falsey per tutti i quine validi o G restituisce truey per tutti i non-quine validi.
- Può restituire qualsiasi cosa, crash o non terminare, ecc., Se si tratta di uno degli altri casi.
Si noti che B è possibile. A e F non hanno alcun input, quindi puoi semplicemente eseguirli e controllare il risultato.
Regole
- Dovrebbe esserci un modo per dire quali parti sono A, B e C dall'output di A. Ad esempio: ognuna ha una linea o sono riconosciute come tre funzioni nell'interprete.
- Ogni funzione dovrebbe essere eseguita solo con la definizione di se stessa, non con il codice completo.
- Puoi usare una funzione / programma o il suo codice sorgente, o una coppia di entrambi come input di B (o G) e C.
- È possibile ridefinire la verità / la falsità in un sottoinsieme di tali valori. Puoi anche richiedere costantemente che F restituisca il tipo che scegli, come una singola stringa.
- Puoi richiedere A, B, F e G, se vengono chiamati con parametri validi, in modo coerente non hanno alcuni tipi di altri input o effetti collaterali che scegli, come l'accesso alle variabili globali o la lettura di stdin, ecc.
- Puoi anche assumere F e G, se vengono chiamati con parametri validi, terminano sempre.
- F dovrebbe funzionare nelle stesse condizioni di A. Quindi non può dipendere da B o C o dall'esistenza di un'altra variabile, a meno che quella variabile non sia definita nella sua stessa parte nel suo output.
- Nessuna funzione o programma può leggere il proprio codice sorgente.
- Questo è code-golf, il codice più corto (che è l'output di A) in byte vince.