En uzun çıkış için en kısa kod [kapalı]


10

Bu oldukça basit.

En fazla çıktıyı üretirken, yapabileceğiniz en kısa programı yazın.

Eğlenceli hale getirmek için sonsuz çıktı üreten programlar diskalifiye edilecektir.

Kazanan, en büyük çıktı boyutu / kod boyutu oranına sahip programdır.

Sonuçlar ne işe yaradığını dayanmaktadır benim bellek Intel Core i5 ve 8GB ile Mac OS X 10.7.5 çalıştıran bir Mac bilgisayar,.


Tam olarak ne istediğini net değil. Yanıtlar sınırsız bellek, sınırsız dizin boyutları vb. Varsaymalı mıdır?
Peter Taylor

@PeterTaylor Bunu düzelttim.
tbodt

5
Eğer çözebilirsem, ama eminim ki bazı tercümanların boş bir dosyayı yorumlamaları ve herhangi bir içerik üretmeleri için bir yol vardır - ki bu da sonsuz bir oran verecektir .

8
@LegoStormtroopr GolfScript faturaya uyar. Boş bir komut dosyası yürütmek, tam olarak bir çıktı karakteri üretecektir:\n
primo

1
@ user2509848 hayır, çünkü dediğim gibi sonsuz çıktı sayılmaz.
tbodt

Yanıtlar:


18

Python: 8 karakter kodu, 387420489 karakter çıkışı - Oran: 48427561.125: 1

'a'*9**9

Daha fazla **9s ekleyerek oranın sonsuza eğilim göstermesini sağlayabiliriz :

'a'*9**9**9
'a'*9**9**9**9
etc.

Örneğin:

'a'*9**9**9**9**9**9

bu oran ~ 10 10 10 10 10 8.568 (hayal edilemeyecek kadar büyük bir sayı).



@tbodt Neden? O_o @arshajii Yeterince **9s eklerseniz , sonunda olmaz Infinitymı?
Kapı tokmağı

@Doorknob Üzgünüm, python hakkında her şeyi bilmiyorum. Şimdi zorluk şu: **9Çıktı olmadan önce koyabileceğiniz maksimum s sayısını bulun Infinity.
tbodt

1
@Doorknob Python ints keyfi bir hassasiyete sahiptir.
arshajii

@tbodt Yukarıdaki yoruma bakın.
arshajii

16

Yani, bunların hepsi çok az kodla çok sayıda çıktı üreten iyi programlardır, ancak hiçbiri gerçekten kısa değildir ...

brainfuck, 5 karakter, 255 bayt çıktı

-[.-]

Bence bu brainfuck'ın gerçekten mükemmel olduğu tek kullanımlık durum. Bunun kazanamayacağını biliyorum, ama muhtemelen Python örneğinden daha iyisini yapabileceğimizi düşünmüyorum. Sadece o değil ama...

brainfuck, 4 karakter, sonsuz çıktı

-[.]

Bunun en kısa sonsuz çıktı programı olduğuna inanıyorum.

Aslýnda, bekle, arkadaţým gerçekten iyi biri buluyor.

Python, 80 bayt, bilinmeyen çıktı miktarı

from datetime import datetime
while datetime.now()!=datetime.max()
 print "This will probably get disqualified"

Bu program eninde sonunda durdurulacak, ancak bunu ancak yaklaşık 8.000 yıl sonra yapacak. Çıktıların kesin sayısı, bilgisayarınızın karakter üretme hızına bağlıdır.


1
Python'u seviyorum: D
Kevin Cox

2
"Buradaki en kısa sonsuz çıkış programı olduğuna inanıyorum" hayır, burası Befunge'nin örtülü döngüsü (sarma yoluyla) kullanışlı oluyor: .0 karakterden oluşan sonsuz bir akış çıkarıyor .
FireFly

14

Perl - 19 bayt, 187200000000000000 bayt çıkışı (9852631578947368.42: 1)

print+($]x9e7)x26e7

1,7 GB'den fazla bellek kullanmayan tek baskı ifadesine sahip 166 petabyes.

Bu zorluğun daha ilginç olacağını düşündüğüm birkaç şey var. Perl, herhangi bir listeye 1 GB'den fazla bellek ayırmayı reddetti. Bu nedenle, iç diziye 4 baytlık skaler referans sadece 26e7 ≈ 2 28 kez tekrarlanabilir . $]dize olarak 8 bayt uzunluğunda, benzeyen 'eski perl sürümü' sayısıdır 5.016002.

Daha fazla sistem belleği ile daha yükseğe çıkabilmelidir. Tam 8GB'nin gerçekten mevcut olduğunu varsayarsak, $]x9e8bunun yerine iç dize için kullanabilmeniz gerekir , bu da 1,62 exabyte çıktı verir.


16
"1.000.000 maymuna 1.000.000 daktilo verir ve onlara 1.000.000 yıl bir şeyler yazmaları için verirseniz, bir maymun nihayetinde bir Java programı yazacaktır. Diğerleri sadece Perl betikleri üretecektir." Bunu gördüğümde böyle düşündüm: P kaynak
Kapı tokmağı

5

Ruby ve Python, 13 karakter, 599994 karakter çıkışı, ~ 46153: 1 oran

999999**99999

Çok büyük bir sayıyı, çok büyük bir sayının gücüne yükseltir. Çalışması yaklaşık 20 saniye sürer. Sayıları artıramıyorum çünkü bu sayı Sonsuzluk haline gelecektir.

(Bunu daha önce yaptım , şu anda daha uzun çıktı için bir döngü yapmaya çalışıyorum)

Düzenleme: Yaptım!

Yakut, 28 karakter, 6e599999 karakter çıktısı, ~ 6e599998 oranı (bence)

a=999999**99999;a.times{p a}

Test edilmedi (bariz nedenlerle), ancak ilk sayının yaklaşık 1e599994 olduğundan eminim, bu da 599994 ile çarpıldığında 6e599999'dur. Teorik olarak işe yarayacaktır, ancak bilgisayarınızın çökmesine neden olup olmayacağından emin değilim, bu yüzden yasal uyarı: Bilgisayarınıza herhangi bir şekilde zarar verirse sorumlu değilim: P

Tabii ki, devam edebilirsiniz:

Yakut, 37 karakter, 6e359992800041 karakter çıkışı, ~ 6e359992800040 oranı

a=999999**99999;a.times{a.times{p a}}

Ve böylece, ama herhangi bir bilgisayarın bunu başarabileceğinden şüpheliyim: P


Bu gerçekten bir çok dilli ...
tbodt

@tbodt Hehe, doğru! Değişikliklerimi eklediğimde bu olmayacak
Kapı Tokmağı

5

Sonsuz girişe izin verildiyse,

cat /dev/random

Olmadığı için,

head -99 /dev/random

(25128 çıkış: 20 giriş = 1256.4: 1)

Linux kutusunda değilim, ama böyle bir şey yapabileceğinizi düşünüyorum

timeout 99d cat /dev/random

ve büyük bir çıktı elde edin. (GigaWatt'ın yanıtı ile)


2
Tek bir karakter yerine ve 8562 kat daha uzun senin çıkışını yapabilirsiniz: timeout 99d. Evet, 99 günlük çalışma süresi. Ayrıca, bu konuda emin değilim, ama sonunda entropi havuzunu boşaltacak /dev/randomve bloke olacak, bu yüzden /dev/urandomdaha uygun olabilir. (Ben 40 MB / s ile urandomve sadece 128 KB / s ile başardı random)
Bay Llama

@GigaWatt bu harika.
tristin

4

HQ9 +, 11471

9

Gerçek karakter sayısı tercümana göre değişir, ancak muhtemelen 10000 civarında doğru olur mu?


Ne olduğunu HQ9 +? Bunu hiç duymamıştım.
tbodt

Ahh, üzgünüm, 'gerçek' bir programlama dili olmadığı için çoğunlukla şakaydı, ama: esolangs.org/wiki/HQ9%2B
Dom Hastings

2

C #: 108 karakter. Oran: 742123445489230793057592: 1

for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new WebClient().DownloadString(@"http://bit.ly/dDuoI4"));}

Sadece Amerika Birleşik Devletleri Yüksek Mahkemesi'nin (4344904 karakter) 18446744073709551615 kez wikipedia'nın hukuk memurları listesini indirir ve yazdırır .


Bu bir URL kısaltıcı gerektirir. Bunun hakkında emin değilim.
tbodt

1
Tamam. Ve bunun hakkında ne var: for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}2147483647 karakter * 18446744073709551615 kez = 39614081238685424720914939905/81 => Oran: 489062731341795366924875801
thepirat000

Çok daha iyi. URL kısaltıcı gerekmez.
tbodt

2

~ - ~! - Oran: (64 4 4 4 64 ) / 154 ~ = 10 10 10 10 10 1.583328920493678

'=~~~~,~~~~,~~~~:''=|*<%[%]'=',',',':''&*-~|:'''=|*<%[%]''&',',',':'''&*-~|:''''=|*<%[%]'''&',',',':''''&*-~|:''''&':''=|*<%[%]@~~~~,~~~~,~~:''&*-~|:''&':

Nasıl çalışır: Birincisi, ayarlar 'Sonra 4 ^ 3 veya 64 şeklinde, yapar ''bir işlev kümeleri 'için '^ 4 * zamanlarda (burada * 's girişidir). '''daha sonra ''giriş ile '^ 4 olarak çağıran bir işlev yapılır . Sonra, girdi olarak ^ 4 ile ''''çağıran bir işlev yapılır . Sonunda 64 kez boşluk yazdıran bir işleve dönüştürülür; bu daha sonra bir girdi ile çağrılır .'''''''''''

Sonunda, çıkıyor 'ise 64 4 4 4 64 ve benim programın uzunluğu 154 ; Wolfram | Alpha içine yumruk ve 10 10 10 10 10 1.583328920493678 tükürür , ki bu bile hesaplamak için bile uğraşmaz . Kaç basamak içerdiğini bile bilmiyorum , ama 64 4 4 463 içeriyor.

Bunu çok daha büyük yapabilirdim, ama aşırıya kaçabilirdi.


1

Javascript: 27 karakter; 260,431,976 karakterlik çıktı; 9.645.628,74 oran

for(s=i=61;s=btoa(s),i--;)s

Bu kod girişi 61tekrar Base64'e 61 kez kodlar . Herhangi bir uzunluk girişini nBase64'e kodlamak n * 8/6, 4'ün katına yuvarlanmış bir uzunluk çıkışı üretir .

Bu, yerel olarak Base64 kodlama işlevini destekleyen bir JavaScript konsol ortamından çalıştırılmalıdır btoa. (Herhangi bir modern tarayıcı, ancak Node.js değil.) Not i=61Firefox yalnızca erişebilirken Chrome daha yüksek çalışamaz i=60. Ayrıca Chrome konsolunun çok büyük olduğu için çıktıyı gerçekten görüntüleyemeyeceğini, ancak çalıştırarak sonuç boyutunu doğrulayabileceğinizi unutmayın

for(s=i=61;s=btoa(s),i--;)s.length

Bu programın maksimum çalışmasına izin verilirse , yaklaşık 540 milyar (5.39e11) varsayımsal bir oran için 14.566.872.071.840 (14.5 trilyon, 14.5e12) karakter i=99büyüklüğünde varsayımsal bir çıktı üretecektir .


1

Ruby, 23 karakter - ~ 500000000000000 (5e14) Çıktı

while rand
puts 0
end

Ti-Basic 84, 13 karakter - ~ 3000 Çıkış

:Disp 1
:prgmA

Programı adlandırın prgmA


1

yakut, 283 96 44 karakter

a=1e99.times;a{a{a{a{a{puts'a'*99}}}}}}}}}}

Çok kısa değil, ama çıktıda telafi ediyor, bu yüzden henüz ölçemedim.


2
benim hesaplamalarıma göre bu 1e127chars çıktı hakkında olacaktır . her neyse, bir değişkene atamak kod boyutunu yarıya indirir. ayrıca, 1e99daha az yer kaplayan daha büyük bir sayıdır. Ayrıca, kullanmak mapyerine each, kullanmak putsyerine print, arasında ekstra boşluk kaldırmak printve "ier.... Bu büyük dizeyi , daha az yer kaplayan daha uzun bir dize olan 'a'*999(hatta çift ?a*999) ile de değiştirebilirsiniz . özet: bu hiç golf değil
Kapı tokmağı

@Doorknob Teşekkürler. Ruby'nin yakutla ilgili dokunaklı rehberinin 3. bölümü dışında yakut hakkında hiçbir şey bilmiyorum.
tbodt

evet, neden sadece (0..1e99).mapbir değişkene atamıyorsun? likea=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
Kapı Tokmağı

Ruby yorumcumun hafıza değerlendirmesi bitti a=(0...1e99).map. Bunu biraz geri almak isteyebilirsiniz. 0..1e9yaklaşık 4GB kullanır.
primo

1

Mathematica 9 karakter Oranı: ~ 4564112: 1

Aşağıda Mathematica girişinin bir resmi bulunmaktadır. SE'de nasıl render edeceğimi anlamadım.

üsteller

Çıktıdaki basamak sayısını gösteren bir ekran görüntüsü. IntegerDigitsçıktıyı bir rakam listesine dönüştürür. Lengthbasamak sayısını sayar.

Miktar

Tuş vuruşları girmek için: 9, ctrl6, 9, ctrl6, 9, ctrl6, 9, ctrl6, 9....


1
Ne? Mathematica'ya yazabilir misiniz?
tbodt

Evet, bu Mathematica'nın meşru girdisidir.
DavidC

Ve hangi tuş vuruşları gereklidir?
tbodt

@tbodt Tuş vuruşları artık yanıtta gösteriliyor.
DavidC

1
Sipariş belirtmeniz gerekip gerekmediğini bilmiyorum, ancak yukarıdan aşağıya hesaplamasını istiyorsunuz: (9 ^ 9) ^ 9 78 basamaklı bir sayıdır, ancak 9 ^ (9 ^ 9) 369.693.100 basamaklı bir sayıdır (teşekkürler, wolframalpha)
SeanC

0

Befunge-93: 48 karakter, yaklaşık ((2 ^ 32) ^ 2) * 10 karakter çıktı

Befunge'nin yığını teorik olarak sonsuzdur, ancak yığınları depolayan sayılar işaretsiz bir uzun tamsayı ile sınırlıdır (burada 32 bit olduğu varsayılır). Bu nedenle, bir Befunge yorumlayıcısına (x + 1)> x, x'in uygun değeri için yanlıştır. Bu gerçeği önce tüm değerleri sıfırdan maksimuma itmek için kullanırız (her iki sayıdan biriyle iki kez) ve sonra yığındaki her değer için çıktı verir ve azaltırız, sonra sıfıra ulaştığında pop yaparız. Sonunda yığın boşalır ve program sona erer. Çıktı boyutunda biraz kapalı olabilirim, ama o basketbol sahasında bir yerde olmalı.

>::1# + #1\`# :# _> #- #1 :# :# .# _# .# :# _@

0

C: 48 karakter, yaklaşık. (2 ^ 32-1) * 65090 bayt çıkışı

main(){for(int i=1<<31;i<~0;)puts("!");main();}

65090'ın tam olmadığına ve yığın boyutuna bağlı olduğuna dikkat edin. Program sonunda çöktüğünde duracaktır. Ayrıca, rasyon yaklaşımı sonsuza kadar yapmak için puts () içine daha uzun ve daha uzun bir dize koyabilirdim, ama bu oldukça ucuz görünüyor.


1
bu sonsuz bir döngü
izabera

Ah, haklısın, sanırım. Bunu nasıl düzeltebileceğimi anlayabileceğim.
Stuntddude

0

java (131): bilinmeyen ancak sınırlı miktarda

class A{public static void main(String[] args){while(Math.random()>0){for(long l=0;l!=-1;l++){System.out.println("1234567890");}}}}

Math.random () yönteminin düşük bir döngüde 0'a gelmesi ve daha sonra 1234567890 çıktısı ile bir foreach aracılığıyla 2 ^ 64-1 döngüye gitmesi;


0

Python 3, 115 bayt, 7983 yıl boyunca çalışır (bilinmeyen karakter sayısı)

EDIT: ymbirtt beni dövdü ._.

Biliyorum, bu gerçekten kısa değil ve diğer Python cevabının çok daha uzun olduğunu biliyorum , Ama bunu denemeye karar verdim.

Program yaklaşık 8000 yıl sürüyor, bildiğiniz gibi oldukça uzun bir süre.

Yaptığı şey, datetime.datetime.now()fonksiyonu kullanarak şimdiki zamanı sürekli 9999-12-31 24:59:59.999999olarak almaktır ve Python'daki maksimum tarihi bildiğim kadarıyla karşılaştırır .

Eğer bir eşit, program durur. Değilse, sürekli olarak çıktı a.

import datetime
while 1:
    if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
    else:print("a")

1
Ya o anı özlerseniz?
C5H8NNaO4

@ C5H8NNaO4 7983 yıl boyunca açık bırakırsanız, umarım kaçırmazsınız.
m654
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.