Quine de anidamiento ruso

18

Una muñeca rusa de anidación, más comúnmente conocida como muñeca Matryoshka , es una muñeca que contiene una versión más pequeña de sí misma, que luego contiene otra versión más pequeña de sí misma, que contiene una versión más pequeña de sí misma, que contiene una versión más pequeña de sí misma, que contiene una versión más pequeña de sí mismo ... hasta que finalmente, la última está vacía. Un ejemplo:

Muñecas Matryoshka <3

Hoy su objetivo es emular esta tradición rusa escribiendo un programa o función que, cuando se contiene N veces, se imprimirá conteniendo copias N-1 de sí mismo veces.

Por ejemplo, el programa de muñeca abcdtendrá el programa N = 3 abababcdcdcd, que imprimirá el programa N = 2 ababcdcd, que imprime el programa N = 1 original abcd, que finalmente imprime N = 0, que está vacío. Teóricamente, esto debería funcionar para cualquier valor razonable de N.

Reglas:

  • Aquí hay un programa TIO para ayudar a generar programas de muñecas basados ​​en su programa
  • Se aplican las reglas estándar de Quine
  • Se aplican lagunas estándar
  • 'Contiene' significa directamente en el centro de la versión anterior, por lo que su solución debe tener un número par positivo de bytes. Un programa de longitud 10 tendrá una copia del original insertada después del quinto byte, luego otra después del décimo byte, etc.
  • Se permite un espacio en blanco al final en la salida
  • Como se trata de , su objetivo es hacer que su programa N = 1 sea lo más breve posible.
  • Se agradecería una explicación de su código
Jo King
fuente
Publicación de Sandbox (eliminada)
Jo King
¿Para qué Nse mide el tamaño del código?
falla
@flawr N = 1 .....
Jo King
12
¿Es realmente necesaria esa animación ?
Shaggy

Respuestas:

9

JavaScript, 36 32 bytes

Aprovecha el hecho de que Function.prototype.toString()no toma argumentos y, por lo tanto, ignorará cualquiera que se le pase.

En parte inspirado por la solución de user202729 .

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

Intentalo

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>

Lanudo
fuente
5

Jalea , 16 bytes

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

Pruébalo en línea!

Doblado: ¡ Pruébelo en línea!

Triplicado: ¡ Pruébelo en línea!


Jelly no tiene ninguna estructura anidable, pero sus literales de cadena se terminan automáticamente.


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

Intentaremos diferentes enfoques para ver si pueden ser más cortos.

usuario202729
fuente
2

dc , 4 bytes

 []p

Similar a algunas otras respuestas, dado que las cadenas dctienen delimitadores start ( [) y end ( ]) (es decir, "no realizan ambas tareas, etc.), son anidables sin ningún esfuerzo real. pimprimir.

N = 1: ¡ Pruébelo en línea!

N = 2: ¡ Pruébalo anidado!

N = 3: ¡ Pruébalo ahora!

brhfl
fuente