Russian Nesting Quine


18

Une poupée gigogne russe, plus communément appelée poupée Matriochka , est une poupée qui contient une version plus petite d'elle-même, qui contient ensuite une autre version plus petite d'elle-même, qui contient une version plus petite d'elle-même, qui contient une version plus petite d'elle-même, qui contient une version plus petite de lui-même ... - jusqu'à ce que finalement, la dernière soit vide. Un exemple:

Poupées matriochka <3

Aujourd'hui, votre objectif est d'imiter cette tradition russe en écrivant un programme ou une fonction qui, lorsqu'elle se contient N fois, s'imprime contenant N-1 copies d'elle-même fois.

Par exemple, le programme poupée abcdaura le programme N = 3 abababcdcdcd, qui imprimera le programme N = 2 ababcdcd, qui imprime le programme N = 1 original abcd, qui imprime finalement N = 0, qui est vide. Cela devrait théoriquement fonctionner pour toute valeur raisonnable de N.

Règles:

  • Voici un programme TIO pour aider à générer des programmes de poupée basés sur votre programme
  • Les règles standard de Quine s'appliquent
  • Les échappatoires standard s'appliquent
  • «Contient» signifie directement au centre de la version précédente, donc votre solution doit avoir un nombre pair d'octets positif. Un programme de longueur 10 aura une copie de l'original insérée après le cinquième octet, puis une autre après le dixième octet, etc.
  • Un seul espace de fin est autorisé dans la sortie
  • Comme il s'agit de , votre objectif est de rendre votre programme N = 1 aussi court que possible.
  • Une explication de votre code serait appréciée


Pour quelle Ntaille de code est mesurée?
flawr

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


12
Est-ce que cette animation est vraiment nécessaire?!
Shaggy

Réponses:



9

JavaScript, 36 32 octets

Profite du fait qu'il Function.prototype.toString()ne prend aucun argument et ignorera donc tous ceux qui lui sont transmis.

Partiellement inspiré par la solution de user202729 .

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

Essayez-le

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

Gelée , 16 octets

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

Essayez-le en ligne!

Doublé: Essayez-le en ligne!

Triplé: Essayez-le en ligne!


Jelly n'a pas de structure emboîtable, mais ses littéraux de chaîne sont terminés automatiquement.


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

Va essayer différentes approches pour voir si elles peuvent être plus courtes.




En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.