Russian Nesting Quine


18

Una bambola nidificante russa, più comunemente nota come bambola matrioska , è una bambola che contiene una versione più piccola di se stessa, che contiene quindi un'altra versione più piccola di se stessa, che contiene una versione più piccola di se stessa, che contiene una versione più piccola di se stessa, che contiene una versione più piccola di se stesso ... - fino a quando l'ultimo è vuoto. Un esempio:

Bambole matrioska <3

Oggi il tuo obiettivo è emulare questa tradizione russa scrivendo un programma o una funzione che, quando si contiene N volte, si stamperà contenente N-1 copie di se stesso volte.

Ad esempio, il programma bambola abcdavrà il programma N = 3 abababcdcdcd, che stamperà il programma N = 2 ababcdcd, che stampa il programma N = 1 originale abcd, che infine stampa N = 0, che è vuoto. Questo dovrebbe teoricamente funzionare per qualsiasi valore ragionevole di N.

Regole:

  • Ecco un programma TIO per aiutarti a generare programmi per bambole in base al tuo programma
  • Si applicano le regole standard di Quine
  • Si applicano scappatoie standard
  • 'Contiene' significa direttamente al centro della versione precedente, quindi la soluzione deve avere un numero pari positivo di byte. Un programma di lunghezza 10 avrà una copia dell'originale inserito dopo il quinto byte, quindi un altro dopo il decimo byte ecc.
  • Nell'output è consentito un singolo spazio bianco finale
  • Dato che si tratta di , il tuo obiettivo è rendere il tuo programma N = 1 il più breve possibile.
  • Una spiegazione del tuo codice sarebbe apprezzata

Post sandbox (eliminato)
Jo King

Per cosa Nviene misurata la dimensione del codice?
Flawr

@flawr N = 1 .....
Jo King,


12
Quell'animazione è davvero necessaria ?!
Shaggy,

Risposte:



9

JavaScript, 36 32 byte

Sfrutta il fatto che Function.prototype.toString()non accetta argomenti e quindi ignora quelli che gli sono passati.

In parte ispirato dalla soluzione di user202729 .

f=_=>f.toString( ).slice(14,-16)

Provalo

o.innerHTML=["<span>Five</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Four</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Three</span>",(f=_=>f.toString(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16) ).slice(14,-16))(),"<span>Two</span>",(f=_=>f.toString(f=_=>f.toString( ).slice(14,-16) ).slice(14,-16))(),"<span>One</span>",(f=_=>f.toString( ).slice(14,-16))(),"<span>Thunderbirds Are Go!</span>"].join`\n`
span{font-weight:bold;font-size:16px;line-height:1.5em;text-transform:uppercase;}span:last-child{font-size:8px;}
<pre id=o></pre>



5

Gelatina , 16 byte

Ṿḣ-9Ḋð}“““““““““

Provalo online!

Raddoppiato: provalo online!

Triplicato: provalo online!


Jelly non ha alcuna struttura annidabile, ma i suoi letterali stringa sono auto-terminati.


Ṿḣ-9Ḋ    First chain. (monadic)
Ṿ        Uneal. (to string)
 ḣ-9     Take the ead, ends at the -9'th character.
    Ḋ    equeue, remove the first character.

     ð             Terminate the first chain, start a new one.
      }            Convert the last monadic chain to a dyadic one.
       “““““““““   String literal.
                   This matches the pattern <dyad> <nilad>, so applies
                   the the corresponding rules. This way a link can take data
                   to the right of it.

Proverà approcci diversi per vedere se possono essere più brevi.




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.