Controllore Meta Quine


10

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.

B è ancora impossibile in generale perché F potrebbe non terminare, così come in pratica in molte lingue perché richiede combinazioni di abilità come il reindirizzamento temporaneo di stdout e da funzione a stringa o exec. Il meglio che puoi sperare è probabilmente una soluzione semi-funzionante in un LISP.
Peter Taylor,

Come controlleresti G con tutti i quines e non-quines? Attualmente sto lavorando a una soluzione Mathematica.
LegionMammal978,

@PeterTaylor "Puoi anche assumere F e G, se vengono chiamati con parametri validi, terminano sempre." E "output" può significare return, non necessariamente stampare su stdout.
jimmy23013,

@ LegionMammal978 È impossibile controllare tutte le quines e le non quines. Ma il compito di C è qualcosa di più semplice, in cui devi solo controllare un quine e un non-quine.
jimmy23013,

1
@PyRulez Penso che questo sia nello spirito di questa sfida, quindi lo permetterò. Ma la funzione non può accedere al proprio codice sorgente.
jimmy23013,

Risposte:


1

CJam, 254 byte

Una risposta di esempio, non golfata.

{{['{\"_~}{{[1$'{@\"_~}"{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}_``1>W<"\"]s\~=}_~}"@]s}_~}{{[1$'{@"_~}{{[\"_~}\"2$+'{@\"_~}\"]s`\"{{['{\\\\\"\+\"]s}_~}\"+~1$~{L}@~!&}_~}"]s\~=}_~}{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}

Le 3 funzioni sono:

{{['{\"_~}{{[1$'{@\"_~}"{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}_``1>W<"\"]s\~=}_~}"@]s}_~}
{{[1$'{@"_~}{{[\"_~}\"2$+'{@\"_~}\"]s`\"{{['{\\\\\"\+\"]s}_~}\"+~1$~{L}@~!&}_~}"]s\~=}_~}
{{["_~}"2$+'{@"_~}"]s`"{{['{\\"\+"]s}_~}"+~1$~{L}@~!&}_~}

A e F non accettano parametri e restituiscono una stringa. B, G e C prendono un blocco CJam come parametro e restituiscono 1 per verità o 0 per falso.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.