Russian Nesting Quine


18

Uma boneca russa, mais comumente conhecida como boneca matryoshka , é uma boneca que contém uma versão menor de si mesma, que contém outra versão menor de si mesma, que contém uma versão menor de si mesma, que contém uma versão menor de si mesma, que contém uma versão menor de si mesma ... - até que finalmente a última esteja vazia. Um exemplo:

Bonecas Matryoshka <3

Hoje, seu objetivo é imitar essa tradição russa escrevendo um programa ou função que, quando contiver N vezes, será impresso contendo N-1 cópias de si mesmo vezes.

Por exemplo, o programa boneca abcdterá o programa N = 3 abababcdcdcd, que imprimirá o programa N = 2 ababcdcd, que imprime o programa N = 1 originalabcd , que finalmente imprime N = 0, que está vazio. Teoricamente, isso deve funcionar para qualquer valor razoável de N.

Regras:

  • Aqui está um programa TIO para ajudar a gerar programas de boneca com base no seu programa
  • Aplicam-se as regras padrão do Quine
  • Aplicam-se brechas padrão
  • 'Contém' significa diretamente no centro da versão anterior; portanto, sua solução deve ter um número par positivo de bytes. Um programa de tamanho 10 terá uma cópia do original inserida após o quinto byte, depois outra após o décimo byte, etc.
  • Um único espaço em branco à direita é permitido na saída
  • Como esse é o , seu objetivo é tornar o seu programa N = 1 o mais curto possível.
  • Uma explicação do seu código seria apreciada


Para qual Né o tamanho do código medido?
flawr

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


12
Essa animação é realmente necessária ?!
Shaggy

Respostas:



9

JavaScript, 36 32 bytes

Aproveita o fato de Function.prototype.toString()não ter argumentos e, portanto, ignorará os que são passados ​​para ele.

Parcialmente inspirado na solução de user202729 .

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

Tente

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 bytes

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

Experimente online!

Duplicado: Experimente online!

Triplicou: Experimente online!


O Jelly não possui nenhuma estrutura aninhada, mas seus literais de string são terminados automaticamente.


Ṿḣ-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.

Tentará abordagens diferentes para ver se elas podem ser mais curtas.




Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.