Rus Yerleştirme Quine


18

Bir Rus yuvalama bebek, bir olarak bilinen daha yaygın Matruşka bebek , kendisi daha küçük bir versiyonu içeren bir bebek olduğunu o zaman kendisinin başka küçük bir versiyonu içeren, kendisi daha küçük bir versiyonu içeren kendisi daha küçük bir versiyonu içeriyor, hangi kendisinin daha küçük bir versiyonunu içeriyor ... - nihayet sonuncusu boş. Bir örnek:

Matruşka Bebekler <3

Bugün hedefiniz, bu Rus geleneğini, kendisini N kez içerdiğinde, kendisini zamanın N-1 kopyalarını içeren bir program veya işlev yazarak taklit etmektir.

Örneğin, bebek programı abcd, N = 3 programı olacaktır abababcdcdcdN = 2 programı yazdırır, ababcdcdorijinal N = 1 programı basar, abcdboş son olarak N = 0 basar,. Bu teorik olarak makul herhangi bir N değeri için çalışmalıdır.

Kurallar:

  • İşte programınıza göre bebek programları oluşturmanıza yardımcı olacak bir TIO programı
  • Standart Quine Kuralları geçerlidir
  • Standart Loopholes uygulanır
  • 'İçerir', doğrudan önceki sürümün ortasında demektir, bu nedenle çözümünüzde eşit sayıda bayt olmalıdır. 10 uzunluktaki bir program, beşinci bayttan sonra, daha sonra onuncu bayttan sonra başka bir orijinalin bir kopyasına sahip olacaktır.
  • Çıktıda tek bir boşluk boşluğuna izin verilir
  • Bu , amacınız N = 1 programınızı mümkün olduğunca kısa yapmaktır.
  • Kodunuzun açıklaması takdir edilecektir


NKod boyutu ne için ölçülür?
flawr

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


12
Bu animasyon gerçekten gerekli mi ?!
Shaggy

Yanıtlar:



9

JavaScript, 36 32 bayt

Function.prototype.toString()Hiçbir argüman almayan ve bu nedenle kendisine aktarılanları görmezden gelen gerçeğinden yararlanır .

Kısmen user202729'un çözümünden esinlenmiştir .

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

Dene

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

Jöle , 16 bayt

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

Çevrimiçi deneyin!

Doubled: Çevrimiçi deneyin!

Üçlü: Çevrimiçi deneyin!


Jelly'in nesnel bir yapısı yoktur, ancak dize değişmezleri otomatik olarak sonlandırılır.


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

Daha kısa olup olmadıklarını görmek için farklı yaklaşımlar deneyeceklerdir.




Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.