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
Brincadeira
fonte
Postagem na caixa de areia (excluída)
Jo King
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

Subcarga , 4 bytes

N = 1: experimente online.

 ()S

N = 2: Experimente online.

 ( ()S)S

N = 3: experimente online.

 ( ( ()S)S)S

Explicação:

Auto-explicativo, mas eu adiciono de qualquer maneira.

  • (...)S imprime qualquer coisa entre parênteses em STDOUT
  • O espaço anterior é um no-op para uniformizar a contagem de bytes e cumprir as regras do desafio.
Kevin Cruijssen
fonte
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>

Shaggy
fonte
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.

user202729
fonte
2

dc , 4 bytes

 []p

Semelhante a algumas outras respostas, como as strings nos delimitadores dcstart ( [) e end ( ]) (ou seja, "não executam as duas tarefas etc.), elas podem ser aninhadas sem nenhum esforço real.pimprimir.

N = 1: Experimente online!

N = 2: tente aninhado!

N = 3: Experimente o nesteder!

brhfl
fonte