Russische Nesting Quine

18

Eine russische Nistpuppe, besser bekannt als Matroschka-Puppe , ist eine Puppe, die eine kleinere Version von sich selbst enthält , die dann eine andere kleinere Version von sich selbst enthält , die eine kleinere Version von sich selbst enthält, die enthält eine kleinere Version von sich selbst ... - bis schließlich die letzte leer ist. Ein Beispiel:

Matroschka-Puppen <3

Heute ist es Ihr Ziel, diese russische Tradition zu emulieren, indem Sie ein Programm oder eine Funktion schreiben, die, wenn sie sich N-mal enthält, sich selbst druckt und N-1 Kopien von sich selbst enthält.

Zum Beispiel hat das Puppenprogramm das Programm abcdN = 3 abababcdcdcd, das das Programm N = 2 ausgibt ababcdcd, das das ursprüngliche Programm N = 1 ausgibt abcd, das schließlich das leere Programm N = 0 ausgibt. Dies sollte theoretisch für jeden vernünftigen Wert von N funktionieren.

Regeln:

  • Hier ist ein TIO-Programm, mit dessen Hilfe Sie Puppenprogramme basierend auf Ihrem Programm erstellen können
  • Es gelten die Standard-Quine-Regeln
  • Es gelten Standard-Regelungslücken
  • "Enthält" bedeutet direkt in der Mitte der vorherigen Version, sodass Ihre Lösung eine positive gerade Anzahl von Bytes aufweisen muss. Bei einem Programm der Länge 10 wird eine Kopie des Originals nach dem fünften Byte und eine Kopie nach dem zehnten Byte usw. eingefügt.
  • In der Ausgabe ist ein einzelnes abschließendes Leerzeichen zulässig
  • Da dies , ist es Ihr Ziel, Ihr N = 1-Programm so kurz wie möglich zu halten.
  • Eine Erklärung Ihres Codes wäre willkommen
Scherzen
quelle
Sandbox-Post (gelöscht)
Jo King
Wofür Nwird die Codegröße gemessen?
Fehler
@flawr N = 1 .....
Jo King
12
Ist diese Animation wirklich notwendig ?!
Shaggy

Antworten:

9

JavaScript, 36 32 Bytes

Nutzt die Tatsache aus, dass Function.prototype.toString()keine Argumente verwendet werden und ignoriert daher alle, die an sie übergeben werden.

Teilweise inspiriert von der Lösung von user202729 .

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

Versuch es

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>

Zottelig
quelle
5

Gelee , 16 Bytes

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

Probieren Sie es online!

Verdoppelt: Probieren Sie es online!

Verdreifacht: Probieren Sie es online!


Jelly hat keine schachtelbare Struktur, aber die String-Literale werden automatisch terminiert.


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

Versucht verschiedene Ansätze, um zu sehen, ob sie kürzer sein können.

user202729
quelle