sfondo
Come la maggior parte dei clienti abituali di PPCG sapranno, un quine è un programma che emette il proprio codice sorgente quando eseguito; e la distanza di Levenshtein tra due stringhe è il numero minimo di inserzioni, eliminazioni e modifiche necessarie per cambiare una stringa nell'altra. In questa sfida, stiamo combinando i due concetti in una "levenquine": un programma che genera il proprio codice sorgente, ma con un'istanza di un carattere inserita, eliminata o sostituita con un carattere diverso. (In altre parole, la distanza di Levenshtein tra il programma e il suo output è 1.)
L'obiettivo
Scrivi un levenquine in modo tale che il suo output sia un levenquine, anche l'output di quel programma sia un levenquine e così via. Inoltre, a un certo punto, la sequenza di esecuzione ripetuta del programma, esecuzione dell'output, esecuzione dell'output dell'output, ecc. Deve infine tornare al programma originale.
C'è un'ulteriore limitazione che rende le cose molto più difficili: ci devono essere due programmi distinti da qualche parte all'interno di questo ciclo che non hanno caratteri in comune (in altre parole, non esiste un carattere che esiste in un programma ed esiste anche all'interno dell'altro programma). Il tuo programma dovrà quindi trasformarsi gradualmente in un set di caratteri diverso e viceversa.
Se stai usando un linguaggio di programmazione che ha inevitabile boilerplate richiesto in qualsiasi programma che produce output (ad es. Ha solo un modo per scrivere una print
dichiarazione e nessun'altra forma utile di output), puoi considerare quel boilerplate come inesistente allo scopo di determinare quali caratteri hanno in comune due programmi. Tuttavia, è ancora necessario contare quella piastra di caldaia ai fini della determinazione della proprietà Levenquine del codice.
chiarimenti
- Ciascuno dei "programmi" nel ciclo può essere un programma completo o una funzione. Non devono essere tutti uguali, ad esempio alcuni potrebbero essere programmi completi e alcuni potrebbero essere funzioni.
- Non tutti i programmi nel ciclo devono utilizzare la stessa forma di output. Ad esempio, alcuni potrebbero essere emessi tramite output standard e altri potrebbero essere emessi tramite errore standard.
- I tuoi programmi verranno eseguiti senza input (o in lingue che richiedono input per fare qualsiasi cosa, l'input più semplice possibile).
- Si applicano le regole di quine appropriate ; sebbene una Levenquine non sia una vera quine, non puoi fare nulla che sia illegale quando scrivi una quine corretta. In particolare, il programma null non è mai un output valido da un Levenquine appropriato (e quindi non può far parte del tuo ciclo).
- La restrizione di Levenquine viene misurata in termini di caratteri, piuttosto che di byte (ad es.
ê
È un carattere anche quando la sorgente è codificata in UTF-8). La restrizione senza caratteri in comune viene misurata anche in termini di caratteri. La condizione di vittoria, tuttavia, conta in byte.
Condizione di vittoria
Si prega di inviare almeno i seguenti tre programmi dal ciclo: il programma più breve (misurato in byte); e due programmi del ciclo che non hanno caratteri in comune. È possibile che due di questi siano uguali, ed è anche possibile che tutti e tre siano distinti. Il punteggio si basa sulla lunghezza in byte del programma più breve, con il più breve migliore, rendendolo così una specie di competizione di code-golf .