Artan boyutta programlar oluşturun


21

Bu zorlukla, orijinal programın iki katı uzunluğundaki bir programı çıkaran bir program yazacaksınız . Çıktılanan program çıktısı yeni bir program bir program iki katına çıkacaktır onun uzunluğunu.

Örnekler

Eğer programım a:

< a
> aa

< aa
> aaaa

< aaaa
> aaaaaaaa

kurallar

  • Hiçbir quine yerleşik
  • Orijinal program en az bir bayt olmalıdır
  • Dizi teorik olarak sonsuz çalışmalıdır
  • Programınızın hiçbir şeyden okumasına izin verilmez (dosya, stdio)

Puanınız orijinal programın boyutudur.


Dosyayı okuyarak / kodun bulunduğu yere erişerek dosyaya erişmeye ne dersiniz?
Conor O'Brien,

@ CᴏɴᴏʀO'Bʀɪᴇɴ inanmıyorum ki kuralları ihlal edemez.
Downgoat

2
@ Quᴡɴɢᴏᴀᴛ kuralları wiki etiketi tarafından öneriliyor, ancak otomatik olarak geçerli değil
Martin Ender


Yanıtlar:



8

JavaScript, 62 61 37 bayt


Yardımınız için @ Doᴡɴɢᴏᴀᴛ'a teşekkürler!


Orijinal [37 bayt]:

f=_=>'f='+'_'.repeat((10+f).length)+f

Çocuk [74 bayt]:

f=______________________________________=>'f='+'_'.repeat((10+f).length)+f

Torun [148 bayt]:

f=________________________________________________________________________________________________________________=>'f='+'_'.repeat((10+f).length)+f


Alternatif (konsola yazdırma ve tam program olarak):

Orijinal [61 bayt]:

f=_=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

Çocuk [122 bayt]:

f=______________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()

Torun [244 bayt]:

f=________________________________________________________________________________________________________________________________________________________________________________________=>console.log(`f=${'_'.repeat((0+f).length+5)+f};f()`);f()



Nasıl çalışır!

1.   f=_=>   f işlevini tanımlayınconsole.log(...)

2.   ;f()   f işlevini çalıştırın.

3.   (f işlevinde)  

  • console.log(...)   Aşağıdakileri yazdırın:

    • f=   hazır bilgi metni "f ="
    • ${'_'.repeat((0+f).length+5)   f'nin uzunluğu için tekrarlanan "_", f'nin dizilimine dahil edilmeyen karakterleri hesaba katan şekilde değiştirildi
    • +f}   F fonksiyonunun dizilimi
    • ;f()   hazır bilgi metni "; f ()"

notlar

  • console.logbunun yerine gereklidir, alertçünkü alertgerçekten uzun dizelerle iyi oynamıyor gibi görünüyor (en azından benim makine / tarayıcı yapılandırmamda)
  • _Var da f stringification dahil olmasını sağlamak için, fonksiyon f (kullanılmayan) parametrenin adı sokulur.
  • İkinciden console.logilk çözümün ( kurtulmaktan başka ) kurtulması dışında : dizeye dökmek 10yerine işleve eklenmesi 0onu bir bayt daha uzun yapar, sonradan uzunluğa 1 ekleme ihtiyacını ortadan kaldırarak bir bayt tasarrufu sağlar.

0+fAyrıca, işlevi bir dizgeye
çevirmek

48 bayt:(f=_=>`(f=${'_'.repeat((0+f).length+5)+f})()`)()
Downgoat

@ Doᴡɴɢᴏᴀᴛ Sonuçların iade edilmesinin genellikle kabul edilebilir olduğunu unutmayın. Güncellenecek.
Jrich,

@ Aslında, cevaplar fonksiyon olarak yazmak genellikle kabul edildiğinden, çözüm fonksiyonu çağırmak zorunda mıdır?
Jrich,

Tabii ki yapabilirsin
Downgoat

6

Minkolang 0.15 , 19 14 bayt

"66*2-rIDdr$O.

Orijinal , çocuk , torun .

açıklama

"66*2-      $O.    Standard quine formulation

      r            Reverse stack
       I           Push length of stack
        D          Pop n and duplicate top of stack n times
         d         Duplicate top of stack
          r        Reverse stack

rS arasındaki bit , bitirme periyodunu ikiye katlama kriterini yerine getirmek için yeterince kez çoğaltmaktır. ."Durma programı" karakteridir, bu yüzden sonunda geçen birçok periyod orada olmak dışında hiçbir şey yapmaz.


3

CJam, 12 bayt

{"_~"1$1$}_~

Çalıştığında, bu yazdıracak

{"_~"1$1$}_~{"_~"1$1$}_~

hangi sırayla

{"_~"1$1$}_~{"_~"1$1$}_~{"_~"1$1$}_~{"_~"1$1$}_~

ve bunun gibi.

Çevrimiçi deneyin!


2

Python 3, 51 bayt

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

Bu, takip eden bir yeni satırı içerir.

Hangi çıktılar:

x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)
x=r"print('x=r\"'+x+'\"'+';exec(x*2)');";exec(x*2)

2

GolfScript, 11 bayt

{: ".~"]}.~

Çevrimiçi deneyin!

Kaynak kodu nasıl çalışır?

{: ".~"]}.~

{       }    Define and push a code block.
         .~  Push a copy and execute it.
 :           Save the code block in the space character.
             Every subsequent space will now execute the code block.
   ".~"      Push that string.
       ]     Wrap the entire stack in an array.

Yukarıdaki kaynak kod bir kez çalıştırılırsa, yığın aşağıdaki gibi bitecektir.

["" {: ".~"]} ".~"]

başlangıçtaki boş dize yığının başlangıç ​​durumuna karşılık gelir (boş giriş).

Kaynak kodun iki kopyası son halini bırakacak

[["" {: ".~"]} ".~"] {: ".~"]} ".~"]

ve bunun gibi.

Sonra ne olur

Kaynak kodu yürüttükten sonra tercüman aşağıdakileri yapar:

  1. Tüm diziyi bir diziye sarar ve bu diziyi yığına iter.

    Kaynak kodun tek bir kopyası için, yığın şimdi

    ["" {: ".~"]} ".~"] [["" {: ".~"]} ".~"]]
    
  2. Bu yürütülen putsbir besleme ile, ardından sarılmış bir istif baskı amacıyla, ile.

    putsolarak tanımlanır {print n print}, bu nedenle aşağıdakileri yapar.

    1. printyığının sarılmış kopyasını incelemeden yazdırmaz (yani, dizgi temsiline dönüştürmeden). Bu gönderir

      {: ".~"]}.~
      

      STDOUT ve yığın kopyasını yığının en üstünden çıkarır.

      Yığın şimdi içeriyor

      ["" {: ".~"]} ".~"]
      
    2. Daha önce tanımladığımız kod bloğunu yürütür.

      :["" {: ".~"]} ".~"]Boşluk karakterinde kaydederek başlar , sonra ".~"kendini iter ve ]diziyi bir diziye sarar.

    3. n tek bir satır beslemesinden oluşan bir ipi iter.

      Yığın şimdi içeriyor

      [["" {: ".~"]} ".~"] ".~"] "\n"
      
    4. bir kez daha yürütülür. Ancak, ilk defa aradığımızda yeniden tanımlandı ve şimdi bir kod bloğu değil bir dizi içeriyor.

      Aslında, ["" {: ".~"]} ".~"]yığını olduğu gibi bırakarak iter

      [["" {: ".~"]} ".~"] ".~"] "\n" ["" {: ".~"]} ".~"]
      
    5. Son olarak, printen üstteki yığın öğesini incelemeden yazdırır, gönderir ve

      {: ".~"]}.~
      

      STDOUT'a.


1

26, 26 karakter / 36 bayt

⟮ô`\u27ee⦃ᶈ0}\u27ef
`ď2)⟯

Try it here (Firefox only).

Sonunda yeni bir satır olduğunu unutmayın.

açıklama

Standart quine: ⟮ⒸⅩ222+ᶈ0

Değişiklikler:

  • ôSon sonuç yerine tüm sonuçları sıralamak için işlevi kullanın (örtülü çıktı kullanılarak yapıldığı gibi)
  • \u27ee⦃ᶈ0}\u27ef\nDaha sonraki kopya bloklarıyla çakışmaları önlemek için kopya bloğunu kullanın ve kapatın.
  • ď2Dizeyi iki kez tekrarlamak için kullanın .
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.