Kendisinin daha büyük versiyonlarını yaratan program (quine-varyant)


109

Kaynak kodu verecek bir program yazmalısınız.

  1. Orijinal programdan daha büyük (karakter bilge)
  2. Çalıştırıldığında kendisinden daha büyük başka bir program yazdıracak (yani yeni program bu zorluğa da geçerli bir cevap)

Bu kod golf, bu yüzden en kısa cevap kazanır.


4
@Kevin, tanımı özyinelemelidir. Çıktı, kendisinden daha büyük bir program ve bu sorunun cevabı olmalı. Yani çıktının çıktısı çıktısından daha büyük olmalı ve çıktının çıktısının çıktısı daha da büyük olmalı, vs.
ugoren

8
Bence kurallarını netleştirmelisin. Bir yandan, böyle bir programın herhangi bir ek kod çıktısı "açıkça yararsızdır"; Öte yandan, çıktıdaki tüm ek kodlar, bu zorluğa cevap verme hedefini arttırdığı için “kullanışlıdır”.
Jason C

5
Meydan okumanı mahvettiğim için üzgünüm. :^)
Justin,

2
Bence bu meydan okuma bir popülerlik yarışması olarak kod golfünden çok daha iyi olurdu. Çok daha fazla yaratıcılık sağlayacak!
corsiKa

30
Doğal olarak, böyle bir program bir kinin olarak bilinmelidir.
Jonathan Van Matre

Yanıtlar:


89

GS2 (8636 algorithe) , 0 bayt



Bu, iki yeni satır yazdıran tek bir yeni satır yazdırır, üç yeni satır yazdırır, vb.

Çevrimiçi deneyin!


3
Bu teknik olarak rekabet etmiyor mu, çünkü gs2 zorluktan daha yeni?
DJMcMayhem

24
Bu taahhüt , mücadeleyi bir buçuk ay önce yapar. Daha yeni test ettim ve amaçlandığı gibi çalışıyor.
Dennis,

1
Bu nasıl bir kaçamak değil?
Mama Fun Roll,

14
@ MamaFunRoll Neden öyle olsun? Bu boş bir Retina program baskısı 1'den , boş bir Jelly program baskısı 0'dan veya boş bir Stuck program baskısından farklı değil Merhaba, Dünya! .
Dennis

2
@Cyoce Bu sadece bir newline GS2'de başka bir newline çıktı verir.
Esolanging Fruit

299

H9 + : 1 karakter

9

Doğru. Bir karakter. Sözleri , geçerli bir program olan 99 şişe biraya çıkarır. Tüm yabancı veriler sayılmaz, ancak burada bol miktarda 9s vardır.

Çıkarılan programın çıktısı 59 kez 99 şişe biranın sözleridir.

Bu fonksiyon, eğer program nzamanlarını çalıştırırsanız (hesaplamam doğruysa) şarkı sözlerinin çıkma sayısını verir :

f(n) = 59n-1

32
Belirli bir dilde bir 0 char programı, geçerli olduğu düşünülürse, büyük olasılıkla 0 karakter verir. Ve sonlu x değeri için 0 * x = 0 olduğundan, çıkarılan programımın kaynak kodundan 9999999999999999 kat daha büyük olduğunu iddia edebilirim.
nitro2k01

39
@JohannesH. Tüm (çözülebilir) problemler için sorunu 0 karakterde çözen bir programlama dili vardır.
Cruncher

15
Hala keşfedilmediği sürece, "Cruncher's Teoremi" adını verdik.
Erty Seidohl

22
İlginç bir özelliği de 2*59^n-2"h" içindeki "h" nedeniyle "Merhaba dünya!" Örneklerini de içermesidir .
AJMansfield

8
Dövülmüş gibisin.
PyRulez

118

GolfScript, 9 karakter

{.'.~'}.~

Bu kod çıktılar:

{.'.~'}{.'.~'}.~

hangi çıktılar:

{.'.~'}{.'.~'}{.'.~'}.~

hangi çıktılar:

{.'.~'}{.'.~'}{.'.~'}{.'.~'}.~

ve bunun gibi.

Şimdiye kadar bir "gerçek" Turing-complete programlama dilinde en kısa cevap olduğuna inanıyorum.

Açıklama:

Temel olarak, yukarıdaki orijinal kod "quine-layer" dır: normal bir quine ve ardından onu gösterir.

GolfScript'te, herhangi bir kod bloğu değişmez (örn. {foo}), Yığında rahatsız edilmeden bırakılırsa, bir kuyruktur. Böylece, kendi {.'.~'}başına, diğer herhangi bir kod bloğunda olduğu gibi , basitçe kendini çıkarır.

.~Kod sonunda da çoğaltır, yığında son kod bloğunu alır ve kopyalama yürütür. Yürütüldüğünde, .'.~'kod bloğu içindeki kod yığındaki en üstteki öğeyi çoğaltır (yani kendi kopyasını) ve dizeyi ekler .~.

Programın sonunda, GolfScript yorumlayıcısı yığında her şeyi dizelir ve çıktılar; bu durumda, {.'.~'}girişten bir satır daha fazla, artı dizeden oluşur .~.

Bonus:

Birinciden ]önce eklenmesi .(yığındaki tüm kod bloklarını çoğaltılmadan önce bir diziye toplamak için) katlanarak büyümesini sağlar:

{].'.~'}.~

çıktılar:

{].'.~'}{].'.~'}.~

hangi çıktılar:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

hangi çıktılar:

{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}{].'.~'}.~

ve bunun gibi.


196
{].'.~'}.~︵ ┻━┻
nitro2k01


2
@ nitro2k01 ilk düşüncelerim tam olarak: D
Songo

1
HQ9 + gerçek olmadığından veya GolfScript gerçek olmadığından mı yoksa her ikisi de mi "gerçek"?
Roger Pate

1
Kaynak kodu benzeyen @thepiercingarrow bu
Çubuk

108

Java 7: 0 karakter



Dosya olarak kaydedin Blank.java. Dosyayı başka bir dosya olarak kaydederseniz, Blankuygun bir dosya adıyla olan herhangi bir örneğini değiştirin .

Ardından, ilk derleme yoluyla komut satırında çalıştırın, sonra çalışıyor. Derleme başarısız olursa, dur.

Java 7 olarak listeliyorum, çünkü farklı Java sürümleri için farklı çıktılar verebilir.

İlk birkaç çıktı (stderr'ye çıktı):

Error: Could not find or load main class Blank
Blank.java:1: error: class, interface, or enum expected
Error: Could not find or load main class Blank
^
Blank.java:1: error: reached end of file while parsing
Error: Could not find or load main class Blank
                                              ^
2 errors
Blank.java:1: error: class, interface, or enum expected
Blank.java:1: error: class, interface, or enum expected
^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                          ^
Blank.java:1: error:  expected
Blank.java:1: error: class, interface, or enum expected
                                     ^
Blank.java:1: error: as of release 5, 'enum' is a keyword, and may not be used as an identifier
Blank.java:1: error: class, interface, or enum expected
                                          ^
  (use -source 1.4 or lower to use 'enum' as an identifier)
Blank.java:1: error: = expected
Blank.java:1: error: class, interface, or enum expected
                                               ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:2: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:2: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:2: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:3: error: = expected
^
^
Blank.java:3: error: ';' expected
^
 ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
     ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
          ^
Blank.java:4: error: illegal start of type
Blank.java:1: error: reached end of file while parsing
           ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
            ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
              ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                   ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                 ^
Blank.java:4: error:  expected
Blank.java:1: error: reached end of file while parsing
                                        ^
Blank.java:4: error: = expected
Blank.java:1: error: reached end of file while parsing
                                         ^
Blank.java:4: error: ';' expected
Blank.java:1: error: reached end of file while parsing
                                              ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
     ^
Blank.java:5: error: ';' expected
Error: Could not find or load main class Blank
      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                      ^
Blank.java:5: error: = expected
Error: Could not find or load main class Blank
                                   ^
Blank.java:5: error:  expected
Error: Could not find or load main class Blank
                                              ^
Blank.java:6: error: = expected
                                              ^
                                              ^
Blank.java:6: error: ';' expected
                                              ^
                                               ^
Blank.java:7: error: reached end of file while parsing
2 errors
        ^
30 errors

23
" Kaynak kod çıktısı alacak bir program yazacaksınız " Çıktı tartışmasız kaynak kod değil. Ve ayrıca, çıktının tanımına bağlı olarak (çıktının özellikle gelmesi gerekip gerekmediği stdout) bağlı olarak hiçbir şey çıkılmaz.
nitro2k01

43
@ nitro2k01 Aynı alıntı yapıyorum: " Kaynak kodu verecek bir program yazacaksınız ". Her şey kaynak kodudur. Ancak sadece bazı şeyler geçerli kaynak kodudur. Ek olarak, çıktı olarak kabul edilenler de belirtilmedi, bu yüzden orada özgürlüğe izin veriliyor.
Justin,

15
@PyRulez Bu doğru. Kurallarından yararlandım. Bu cevabı kabul etmenize gerek yok. Bunu gönderdiğimde, birçok aşağı ve yukarı oyla tamamlanan bir tartışmanın izleyeceğini biliyordum. Yine de buna değeceğine karar verdim.
Justin,

29
Programın kendisinin çıktıyı yazdırdığından emin misiniz? Bu sadece derleyici değil miydi? Program hiçbir zaman derlenmez ve kendisi yorumlanamaz veya yürütülemez, bu nedenle herhangi bir çıktı üretemedi.
VX

12
@ blabla999 Katılmıyorum - insanlar bu zorlukları denemiyorlar çünkü başka birisi çılgınca bir şey yapıyor. Sadece başka bir şekilde yapmak için kendimize meydan okuyoruz. Mark Rosewater'ın dediği gibi, "Kısıtlamalar yaratıcılığı
doğurur

79

HQ9 +, HQ9 ++ ve benzerleri, 2 karakter

QQ

Bu çıktı:

QQQQ

36
Bunu gördüm ve "Ah hayır, hiçbir şey bunu yenemez" dedim. Bir şey bulmaya çalıştım, sonra bana vurdu. Bu yüzden bir cevap gönderdim.
Justin,

1
@ Quincunx Bravo, cevabınızı aldı.
Victor Stafusa

4
@ Quincunx Hayır, sanırım 2^2^n, ilk programın 0 neslinin olduğu yer m -> m^2.
Vortico

3
@Vortico İyi nokta. Yanlış söylememe rağmen, demek istediğim: Kod uzunluğunda nçıktı olur n^n. Ancak, bu yanlıştır; kod uzunluğu olduğunda n, çıkışın uzunluğun^2
Justin

2
Yine de komik çünkü ilk iki tekrar bile bu soru için yarışmacılar olabilir.
PyRulez

29

Yakut 27

Bir çok hafif bir modifiye edilmiş bir versiyonu , bu ( yoluyla ):

puts <<3*3,3
puts <<3*3,3
3

putsSatırın yazdırılma sayısı katlanarak artar.

$ ruby quine.rb | ruby | ruby
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
puts <<3*3,3
3

$ ruby quine.rb | ruby | ruby | ruby | ruby | ruby | ruby | ruby | wc -l
    3283

17
Yanıt Kaiser Chiefs tarafından ilham
Ben Jackson

25

Lambda Matematik - 29

Basit bir lambda terimi

(λu.(u u)(u u))(λu.(u u)(u u))

Bu terimin bir beta azaltma getirisi ile düşürülmesi

((λu.(u u)(u u))(λu.(u u)(u u)))((λu.(u u)(u u))(λu.(u u)(u u)))

Ve benzeri vb. Klasik (λu.u u)(λu.u u), lambda matematiğinde bir tane olan basit bir varyasyondur, burada çift kendi kendine uygulama, iki kat daha fazla çıktı alacağımız anlamına gelir.


7
Ben lambda hesabında, bir lambda terimini "çalıştırmanın", normal formunu hesaplamak anlamına geldiğini, tek bir beta azaltma gerçekleştirmediğini iddia ediyorum. Ayrıca, bir terim birden fazla redeks içerebilir, bu nedenle "tek bir redeksin azaltılması" belirsiz bir işlemdir.
Petr Pudlák

2
Haklısınız, ancak bu terimin normal bir formu olmadığından, bu konuda küçük adımların azaltılması konusunda konuşmanın anlamı var. Lambda matematiğinde herhangi bir içsel küme değerlendirmesi bulunmadığından, sadece "çalışan" ı tanımlayarak tek bir redex üst düzey redeksini "isim-ad" semantik no ile azaltacak şekilde tanımlayabilirim.
jozefg

3
Normal formu olmayan terimler, sonlandırılmayan programlara karşılık gelir. Ve üst seviye redeks ile ilgili sorun , bir terimin, biri diğerinin alt terimi olmayan iki redeksine sahip olmasıdır. Hangisini azaltacağınız konusunda bazı kriterler seçebilirsiniz, ancak o zaman standart lambda matematik anlambiliminden çok uzaklaştığınızı söyleyebilirim. (Her neyse, roman fikrini takdir ediyorum.)
Petr Pudlák

2
(λx.xxx) (λx.xxx): 20
Fabio F.

2
(λx. xx) (λx. xxx) tek adımda buna indirgenir
Ben Millwood

23

SH betiği, 9

cat $0 $0

Üstel oranda büyür.

Ya çalıştırın sh whatever.shya da çalıştırılabilir olarak ayarlayın.

Windows sürümü burada .


2
Bu yorumu yazarken Quine Wiki sayfası, dosya sisteminden okumanın hile yaptığını söylüyor.
Lord Ratte

3
@LordRatte Öte yandan, zorlu bir soru yazmak değildi.
Jason C,

20

dc 11

Oldukça basit:

6579792
dfP

İlk satır her nesilde bir kez tekrarlanır:

$ dc growing_quine.dc
6579792
6579792
dfP

$ dc growing_quine.dc | dc | dc 
6579792
6579792
6579792
6579792
dfP

Son satır aşağıdaki talimatlardan oluşur: dYığına yerleştirilen son değeri (6579792) çoğaltır (böylece çalıştırdığımız her seferde bir kopya daha alırız), ftüm yığını yazdırır (aynı sayıdan bir demet) ve Psayıyı (6579792), olarak görüntülenen bir bayt akışı olarak yazdırır dfP.


16

redcode (özyinelemeli çözüm)

Bu, ünlü kod olan redcode ile yazılabilen en kolay savaşçının kodu :

MOV 0, 1

Yürütüldüğünde, kod, tek komutunun bir kopyasını bellekteki bir sonraki adrese yazar; sonra çalıştırır, vb.


15

Python 3 - 55

print(open(__file__).read())
f=lambda:print('f()')
f()

Bu, __ dosya __ 'yı tek karakterli bir dosya adı ile değiştirip dosyayı bu şekilde kaydederek daha da kısaltılabilir, ancak bu cevabın sorunun özünde olduğunu hissettim. Bir yinelemeden sonra aşağıdakileri verir:

print(open(__file__).read())
f=lambda:print('f()')
f()
f()

3
Bu bir sır değil. Tanımına bakınız .
Petr Pudlák

14
@ PetrPudlák Bu sorudaki herhangi bir program da yoktur. Bu çok değişken bir sorundur, katı sorgulama değil.
AJMansfield

6

Smalltalk, 125 61 57

Golf versiyonu neredeyse okunaksız görünüyor, bu yüzden önce açıklayacağım (ve gerçek tanımlayıcıları kullanacağım).

Bu, "bir yığın taşması üretmenin en garip yolu" kendi kendini değiştirme yönteminin bir çeşididir.

Yöntem bir merhaba mesajı ve şu anki kaynağını yazdırır (yalnızca gösteri için). Daha sonra, kod daha uzun bir dizge çıktılamak için değiştirilir ve kurulur. Son olarak, yeni kod özyinelemeli olarak adlandırılır.

Kendimi acil durumdan korumak için, kullanıcının her döngüyü onaylamasını sağlar.

Object içinde derlemek:

eatMe_alice
   |msg mySource|

   mySource := thisContext method source.

   '**** Hello Alice' printCR.
   '  ---- my current code is:' printCR.
   mySource printCR.
   '  ---------------' printCR.

   (UserConfirmation confirm:'Again? ') ifTrue:[
       Object compile:
            (mySource
                copyReplaceString:'Hello ','Alice'
                withString:'Hello ','Alice !').
       self eatMe_alice
   ]

herhangi bir nesneye "eatMe_alice" göndererek gösteriye başlayın; nil yapacak:

nil eatMe_alice

Güzel bir değişken, yeni kodu tekrar tekrar çağırmak değil, yinelemeli olarak çağrı yığınını kaldırmak ve yeni yönteme yeniden girmek. Bunun özyinelemeli istisnalara yol açmaması avantajı vardır. Bunu yapmak için özyinelemeli çağrıyı ("self eatMe_alice") değiştirerek:

thisContext resend

Golf:

Açıkçası, baskı ve kendi kendine arama istenmedi, bu yüzden en kısa olanı (golf için) kendi kaynakma bir yorum eklemek ve geri göndermek. Yan etkisi olarak, bir sonraki arama için de yüklenir ...

x|s|Object compile:(s:=thisContext method source,'""').^s

5

SH betiği, 12 8 7

İle bir dosya sakla

sed p *

kendi dizininde, boş dizine geçin ve bu sh [file]dizinden çalıştırılabilir veya set kullanarak çalıştırın.


8 karakterli eski alternatif , ancak kendi dizinine gerek yok. İle bir dosya sakla

sed p $0

ve çalıştır sh [file]veya çalıştırılabilir ayar kullanarak çalıştır.

12 karakterli eski alternatif :

sed -i- p $0

Bu aslında program dosyasının kendisine verilecek, ancak çıktının yeri belirtilmedi. Üstel bir oranda kendini çoğaltır.


1
Yine de kullanma şansın olabilir ed, man sayfasına bakmak istemedim ...
Jens Erat

4

JavaScript, 41 , 40 karakter

function f(){console.log(f+"f(f())")}f()

İlk çalıştırdığınızda ;f(), sonunda bir başkasıyla kendini gösterir . Çıktının sonraki işlemleri iki kez basılan her "giriş" kaynağına yol açar.

alertdaha kısa olurdu, console.logancak konsolda birden fazla satırı bir çıktı olarak çağırmak mantıklı gözükse de, birden fazla uyarı iletişim kutusunun "" "çıktığını düşünmüyorum.


Bunun "f(f())"yerine bir bayt kaydedebilirsiniz"f();f()"
Hedi

Bu benim için işe yaramıyor gibi gözükmüyor ...
Yok Edici Lemon,

4

J , 1 bayt

'

Çevrimiçi deneyin!

Açık fiyat teklifi açık bir şekilde açık fiyat hatası veriyor:

|open quote
|   '
|   ^
|[-1] /home/runner/.code.tio

J tercüman doğası gereği , hataların STDERR'ye değil, STDOUT'a basıldığını unutmayın.

Yukarıdaki kod olarak çalıştırıldığında, yazdırır:

|open quote
|   |   '
|       ^
|[-2] /home/runner/.code.tio

Sonra

|open quote
|   |   |   '
|           ^
|[-2] /home/runner/.code.tio

ve bunun gibi. Kod her çalıştırıldığında, ikinci satır |   bu zorluğun gerekliliğini yerine getiren dört bayt ile soldan doldurulur .

J , uygun quine varyantı, 25 bayt

echo,~'echo,:~(,quote)'''

Çevrimiçi deneyin!

çıktılar

echo,:~(,quote)'echo,:~(,quote)'

Ve sonra ayrı satırlarda iki kez kendini çıkarır:

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

sonra

echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'
echo,:~(,quote)'echo,:~(,quote)'

ve bunun gibi.

İlk çıktı, standart J kininin basit bir çeşididir . Eklenen ,:~, kendisini dikey olarak birleştirir; sonuçta elde edilen 2B dizisi aynı dizgenin iki satırı olarak yazdırılır.


3

Windows .BAT, 25

@COPY %~nx0+%~nx0 CON>NUL

Üstel oranda büyür.

Burada eşdeğer SH versiyonu .


3

retiküler, 11 bayt, rekabetçi olmayan

"'34'coo1o;

Bu, 1her yinelemeden sonra fazladan basılması haricinde, standart ince çerçevedir . Çevrimiçi deneyin!

İlk birkaç çıktı:

"'34'coo1o;
"'34'coo1o;1
"'34'coo1o;11
"'34'coo1o;111

3

Mikroscript II, 6 bayt

Rekabet etmeyen dil, mücadeleyi yayınlamaktadır.

"qp"qp

İlk yineleme qpsonuna kadar bir miktar ekler ve art arda gelen her yineleme, bu orijinal programın başlangıcına fazladan bir kopyası ekler.



2

EcmaScript 6 (51 bayt):

(_=x=>'(_='+_+Array(x++).join(','+_)+')('+x+')')(2)

Daha uzun bir sürümünü üretebilecek, daha uzun bir sürümünü üretebilir, daha uzun bir sürümünü üretebilir, vb ...


2

PHP, 38

<?echo fgets(fopen(__FILE__,'r')).';';

Her çalıştırmada bir noktalı virgül ekleyecektir.


Noktalı virgüller işe yaramaz kod mu?
Justin,

3
@ Quincunx Onlar, haklısın. Ancak, faydalı kodu ne düşünürsünüz?
ComFreek

Belki içine koyabilirsin ';'. O zaman daha uzun çıktılar elde edersiniz.
Justin,

1
neden olmasın <?=fgets(fopen(__FILE__,'r')).';';?
Ismael Miguel,

1
;<?echo fgets(fopen(__FILE__,'r'));
jimmy23013

2

ECMAScript 6 (38 Karakterler)

(f=_=>'(f='+f+')();(f='+f+')();')();

Hangi çıktılar:

(f=_=>'(f='+f+')();(f='+f+')();')();(f=_=>'(f='+f+')();(f='+f+')();')();

Düzenle

Yapabilirsin (28 karakter):

(f=_=>'(f='+f+')();'+f())();

Ancak sonsuza dek tekrarlanacak ve asla bir şey döndürmeyecek ... ancak böyle bir şey yaparak çözülebilir (42 karakter):

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);

Hangisi çıkacak:

(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(3);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(2);(f=_=>_?'(f='+f+')('+_+');'+f(_-1):'')(1);

3
+_+ =_=İfadeleri için +1
TuxCrafting

2

Common Lisp, 16 Karakter

(print `(or ,-))

Verildiği takdirde, yalnızca etkileşimlidir, ancak geçerli en üst düzey forma başvurabilmek, belirtimi karşılayan önemsiz olmayan bir programı en aza indirmenin muhtemelen en iyi yoludur.

Gerçekten ilginç olan, en hızlı patlayan şeydir. Belki bir şey gibi

(print `(progn ,@(loop repeat (length -) collect -)))


Ortak Lisp için +1. Eğer atlayabilirsiniz gibi geliyor `ve ,?
daniero

@ daniero Tırnak işareti olmadan, orijinal programı yazdırır, hiç büyümez. Bu noktada, siz de ihmal edebilirsiniz or:(print -)
Stuart Olsen

2

Julia, 66 karakter

x="print(\"x=\$(repr(x))\\n\$x;\"^2)";print("x=$(repr(x))\n$x;"^2)

Çıktı (134 karakter):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Sonucu çalıştırma sonucu (268 karakter):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

sonraki sonuç (536 karakter):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Sonraki sonuç (1072 karakter):

x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);x="print(\"x=\$(repr(x))\\n\$x;\"^2)"
print("x=$(repr(x))\n$x;"^2);

Umarım bu kurallara göredir.

Daha büyük çıktı üretir ve çıkışın kendisi yine daha büyük çıktı üreten geçerli kaynak koddur.


Çıktı, çalıştırıldığında geçerli bir girdi üretecek mi?
PyRulez

İlk örnekte çıkış geçerli koddur. Bu 5 dönem içeren bir dize değişmezi. İkinci örnekte, Julia'ya girmenin kendisi hiçbir şey yapmaz. Sadece repl'e aslında yeni bir karakter karakteri girmenin enter'a basmak, girdiden daha uzun bir çıktı verdiğini düşündüm.
ML

"....." daha büyük bir versiyon üretecek mi?
PyRulez

Ah, şimdi anlıyorum. Çözümümü düzeltmenin zamanının özyineli olması gerektiğini fark ettim. İpucu için teşekkürler.
ML

1
Sanırım kod şimdi kurallara göre.
ML

2

05AB1E, 15 bayt, rekabetçi olmayan

0"DÐ34çý"DÐ34çý

Çevrimiçi deneyin!

Yazdırır 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
yazdırır 0"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý"DÐ34çý,
vb.


Her iki örneği DDde değiştirilebilir Ð.
Emigna

1
Neden rekabet etmiyorsunuz?
MD XF

2

Evoloop, 9 × 9 dikdörtgen (81 hücre)

Golly dahil Evoloop hücresel otomat bir "quine benzeri" bir şekilde kendilerini çoğaltmak desenleri destekler. Spesifik olarak, bu modellerin her biri bir "program" içerir; Bir kalıp, önce programı çalıştırarak (kızın bedenini oluşturur) ve ardından programı kıza kopyalayarak kendini yeniden üretir.

Yukarıdakiler, daha ünlü "Langton's Loops" hücresel otomasyonunun yanı sıra Evoloop için de geçerlidir, ancak Evoloop'un ilginç bir farkı vardır; bu, birbirini takip eden her jenerasyonda büyüyen bir desen oluşturmak kolaydır.

(Çok daha fazla Bence, ilginç, Evoloop'un kendilerini yeniden üreten ve çok canlıya benzeyen desenleri içeren basit bir hücresel otomat) olduğu gerçeğidir! Bence bunu yapan tek hücresel otomatlar Evoloop ve soyundan geliyor. Bununla birlikte, Evoloop'un bir eksikliği, belirli bir "en iyi" genomun olmasıdır, evrim her zaman eninde sonunda bu genomla birleşir.)

Şimdi, bu başvuruda iki eksiklik var. Birincisi, hücresel bir otomatın "çıktısının" ne olduğu açık değil. Ancak kendi kendini üreten bir otomatın bir sicim olmak için "yeterince yakın" olduğunu düşünüyorum; kesinlikle daha az ilginç değil! Diğer bir eksiklik, bu kalıpların sadece kendilerinin tek bir kopyasını yaratmamasıdır; her biriOrijinal desenin kopyası kendisinden sonsuz sayıda kopya oluşturmaya çalışır ve bu kopyalar birbirleriyle yıkıcı bir şekilde etkileşime girer. Yani, bu zorluğun gereksinimlerini ruhumla karşıladığımı düşünüyorum, ancak harfle değil.

Daha fazla uzatmadan, desen şudur:

022222220
270170172
212222202
202000212
272000272
212000202
202222212
271041032
022222250

İşte yine desen, Golly'ye kopyalanıp yapıştırılabilecek biçimde:

x = 9, y = 9, rule = Evoloop
.7B$BG.AG.AGB$BA5B.B$B.B3.BAB$BGB3.BGB$BAB3.B.B$B.5BAB$BGA.DA.CB$.6BE
!

Tamam, ama neye benziyor? Bu gibi görünüyor:

Hücresel bir otomatta, kendisinin giderek daha büyük kopyalarını yaratan bir kalıp.

Yukarıdaki animasyonda, ilk kalıbın daha büyük bir torunu, sonra daha büyük bir büyük torunu ve daha büyük bir üçüncü büyük torunu inşa etmeye başlayan daha büyük bir büyük torunu yaratan daha büyük bir kız yarattığını görebilirsiniz. kız torun. Bu kalıbı uzun süre çalıştırırsanız, sonsuza dek böyle devam ederdi (ya da belki de daha hızlı çoğalabilen gelişmiş organizmalar tarafından ele geçirilirdi; emin değilim).


1

KEMER, 26

Bu kodu herhangi bir .bat dosyasına yerleştirin ve çalıştırmaya devam edecek (sonsuz bir döngüde) ve dosya da büyüyecek.

echo echo %0 ^>^> %0 >> %0

Bu pek işe yaramadı, %0bir .BATuzantısı olmayan komut dosyasını çağırmak için kullanılan komuttur . %~nx0Toplu iş dosyasının tam adını almak için kullanabilirsiniz .
Jason C

@JasonC AFAIK, .batyürütülmesi gerekmez . Dosya adı ise execute.bat, executeveya birini girebilirsiniz execute.bat. Her ikisi de işe yarayacak.
ub3rst4r

Dosyanın kendisi bir olması gerekir .batyürütmek için uzantıyı ama bunu gerçekleştirmenin zaman uzantıyı devre dışı bırakabilirsiniz (hiçbir uzantılı bir komut yazdığınızda Windows çalışır .com, .exedaha sonra .batbu sırayla). Dosya adı ise hello.bat, orijinal olmayan (ve yürütülemez) >> %0adlı bir dosya yazar . hellohello.bat
Jason C

1

PYG (6)

P(Q,Q)

Yeni satırlarla ayrılmış, kendi kaynak kodunu yazdırır. İkinci nesil

P(Q,Q)
P(Q,Q)

ve diğerleri.


1

YAĞ , 83 bayt

0
0
1
1
1
4
1
11
4
1
11
1
2
2
1
12
18
10
18
1
32
22
1
18
26
4
26
8
18
11
6
17
4
26

İlk önce içinde sıfır bulunan iki satır yazdırır ve sonra her satırı satır 1 ile karşılaştırır, eğer eşitse (dosya tükendiğinde olduğu gibi), hücre 26'da olanı yazdırırız. Aynısı, 33hiçbir şey yapmadan, eklenen dışında . Bir dahaki sefere, başka bir satır eklenecek, vb.


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.