Kode terpendek untuk keluaran terpanjang [ditutup]

10

Yang ini cukup sederhana.

Tuliskan program terpendek yang Anda bisa, sambil menghasilkan output terbanyak.

Untuk membuatnya menyenangkan, program yang menghasilkan keluaran tak terbatas akan didiskualifikasi.

Pemenangnya adalah program dengan rasio ukuran / ukuran kode keluaran terbesar.

Hasilnya didasarkan pada apa yang berfungsi di komputer saya , yaitu Mac yang menjalankan Mac OS X 10.7.5 dengan Intel Core i5 dan memori 8GB.

tbodt
sumber
Tidak jelas apa yang Anda minta. Haruskah jawaban mengasumsikan memori tidak terbatas, ukuran indeks tidak terikat, dll?
Peter Taylor
@ PeterTaylor saya memperbaikinya.
tbodt
5
Tergesa-gesa jika saya bisa mengetahuinya, tapi saya yakin ada cara untuk meminta beberapa penafsir menginterpretasikan file kosong dan menghasilkan konten apa pun - yang juga akan memberikan rasio tak terbatas .
8
@LegoStormtroopr GolfScript cocok dengan tagihan. Mengeksekusi skrip kosong akan menghasilkan tepat satu karakter output:\n
primo
1
@ user2509848 tidak, karena, seperti yang saya katakan, output tak terbatas tidak masuk hitungan.
tbodt

Jawaban:

18

Python: 8 kode karakter, 387420489 output karakter - Rasio: 48427561.125: 1

'a'*9**9

Kita dapat memiliki rasio cenderung hingga tak terbatas dengan menambahkan lebih banyak **9s:

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

Sebagai contoh:

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

yang memiliki rasio ~ 10 10 10 10 10 8.568 (jumlah yang tak terbayangkan besar).

arshajii
sumber
Lebih baik daripada yang lain ...
tbodt
@tbodt Mengapa? O_o @arshajii Jika Anda menambahkan cukup **9, bukankah akhirnya menjadi Infinity?
Gagang Pintu
@ Doorknob Maaf, saya tidak tahu segalanya tentang python. Sekarang tantangannya adalah: Cari tahu jumlah maksimum **9s yang dapat Anda masukkan sebelum hasilnya Infinity.
tbodt
1
@Doorknob Python ints memiliki presisi sewenang-wenang.
arshajii
@tbodt Lihat komentar di atas.
arshajii
16

Jadi, ini semua adalah program bagus yang menghasilkan banyak output dengan kode yang sangat sedikit, tetapi tidak satupun yang benar - benar singkat ...

brainfuck, 5 karakter, 255 byte output

-[.-]

Saya pikir ini adalah satu-satunya kasus penggunaan di mana brainfuck benar-benar unggul. Saya tahu ini tidak akan menang, tapi saya tidak berpikir kita bisa melakukan lebih baik daripada contoh Python. Bukan hanya itu, tapi ...

brainfuck, 4 karakter, output tanpa batas

-[.]

Saya menduga bahwa ini adalah program keluaran tak terbatas terpendek di luar sana.

Sebenarnya, tunggu sebentar, teman saya baru saja membuat yang benar-benar bagus.

Python, 80 byte, jumlah output yang tidak diketahui

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

Program ini pasti akan berhenti pada akhirnya, tetapi hanya akan melakukannya setelah sekitar 8.000 tahun. Jumlah pasti karakter yang dihasilkan tergantung pada kecepatan komputer Anda dapat menghasilkan karakter.

ymbirtt
sumber
1
Saya suka yang python: D
Kevin Cox
2
"Saya menduga bahwa ini adalah program keluaran tak terbatas terpendek di luar sana" tidak, di sinilah loop implisit Befunge (melalui sampul) menjadi berguna: .menghasilkan aliran tanpa batas 0 karakter.
FireFly
14

Perl - 19 byte, 187200000000000000 byte keluaran (9852631578947368.42: 1)

print+($]x9e7)x26e7

166 petabyes dengan satu pernyataan cetak, menggunakan tidak lebih dari 1,7GB memori.

Ada beberapa hal yang membuat tantangan ini lebih menarik yang saya pikir akan terjadi. Perl tampaknya menolak untuk mengalokasikan lebih dari 1GB memori ke daftar tunggal mana pun. Oleh karena itu, referensi skalar 4-byte ke string dalam hanya dapat diulang 26e7 ≈ 2 28 kali. $]adalah nomor 'versi lama perl' yang, sebagai string, panjangnya 8 byte, menyerupai 5.016002.

Dengan lebih banyak memori sistem, itu harus bisa lebih tinggi. Dengan asumsi 8GB penuh sebenarnya tersedia, Anda seharusnya dapat menggunakan $]x9e8untuk string bagian dalam, yang akan menghasilkan 1,62 exabytes.

primo
sumber
16
"Jika kamu memberi 1.000.000 monyet, 1.000.000 mesin ketik, dan memberi mereka 1.000.000 tahun untuk menulis sesuatu, satu monyet akhirnya akan menulis program Java. Yang lain hanya menghasilkan skrip Perl." Itulah yang saya pikirkan ketika saya melihat ini: P source
Doorknob
5

Ruby dan Python, 13 karakter, output char 599994, ~ rasio 46153: 1

999999**99999

Cukup menaikkan angka yang sangat besar ke kekuatan angka yang sangat besar lainnya. Butuh sekitar 20 detik untuk berjalan. Saya tidak dapat menambah angka karena itu akan membuat angka menjadi tak terhingga.

(Saya melakukan ini sebelumnya , saya saat ini sedang bekerja membuat loop untuk hasil yang lebih lama)

Sunting: Saya berhasil!

Ruby, 28 karakter, 6e599999 output char, ~ rasio 6e599998 (saya pikir)

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

Belum diuji (untuk alasan yang jelas), tapi saya cukup yakin angka pertama adalah sekitar 1e599994, yang dikalikan dengan 599994 adalah sekitar 6e599999. Secara teoritis itu akan berhasil, tapi saya tidak yakin apakah itu akan merusak komputer Anda, jadi penafian: Saya tidak bertanggung jawab jika itu membahayakan komputer Anda dengan cara apa pun: P

Tentu saja, Anda dapat terus berjalan:

Ruby, 37 karakter, 6e359992800041 output char, ~ rasio 6e359992800040

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

Dan seterusnya, tapi saya ragu komputer mana pun bisa mengatasinya: P

Gagang pintu
sumber
Itu benar-benar polyglot ...
tbodt
@tbodt Hehe, benar! Ketika saya menambahkan perubahan saya, itu tidak akan terjadi
Doorknob
5

Jika input tak terbatas diizinkan,

cat /dev/random

Karena tidak,

head -99 /dev/random

(25128 output: 20 input = 1256,4: 1)

Saya tidak di kotak Linux, tapi saya kira Anda bisa melakukan sesuatu seperti

timeout 99d cat /dev/random

dan dapatkan output yang sangat besar. (via respons GigaWatt)

tristin
sumber
2
Anda dapat mengganti satu karakter dan membuat output 8562 kali lebih lama: timeout 99d. Yap, runtime 99 hari. Juga, saya tidak yakin tentang ini, tetapi pada akhirnya Anda akan mengosongkan kolam entropi /dev/randomdan itu akan memblokir, jadi /dev/urandommungkin lebih tepat. (Saya berhasil mendapatkan 40 MB / s dengan urandomdan hanya 128 KB / s dengan random)
Mr. Llama
@ GigaWatt itu luar biasa.
tristin
4

HQ9 +, 11471

9

Hitungan karakter aktual bervariasi tergantung pada penerjemah, tetapi mungkin sekitar 10.000 akan benar?

Dom Hastings
sumber
Apa itu HQ9 +? Saya tidak pernah mendengarnya.
tbodt
Ahh, maaf, itu sebagian besar lelucon karena itu bukan bahasa pemrograman 'nyata', tetapi: esolangs.org/wiki/HQ9%2B
Dom Hastings
2

C #: 108 karakter. Rasio: 742123445489230793057592: 1

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

Itu hanya mengunduh dan mencetak Daftar panitera wikipedia Mahkamah Agung Amerika Serikat (4344904 karakter) 18446744073709551615 kali.

thepirat000
sumber
Itu membutuhkan pemendek URL. Saya tidak yakin tentang itu.
tbodt
1
Baik. Dan bagaimana dengan ini: for(ulong i=0;i<ulong.MaxValue;i++){Console.Write(new string('a',int.MaxValue));}2147483647 karakter * 18446744073709551615 kali = 39614081238685424720914939905/81 => Rasio: 489062731341795366924875801
thepirat000
Jauh lebih baik. Tidak diperlukan pemendek URL.
tbodt
2

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

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

Cara kerjanya: Pertama, set 'ke 4 ^ 3, atau 64. Kemudian, ia membuat ''fungsi yang set 'ke '^ 4 * kali (di mana * adalah inputnya). '''kemudian dibuat fungsi yang memanggil ''dengan input sebagai '^ 4. Kemudian, ''''dibuat fungsi yang memanggil '''dengan '^ 4 sebagai inputnya. ''''kemudian dipanggil dengan input 64. Akhirnya, ''diubah menjadi fungsi yang mencetak spasi * kali; ini kemudian disebut dengan input dari '.

Ternyata, pada akhirnya, 'adalah 64 4 4 4 64 , dan panjang program saya adalah 154 ; meninju itu ke Wolfram | Alpha dan meludahkan 10 10 10 10 10 1,583328920493678 , yang bahkan tidak repot untuk menghitung. Saya bahkan tidak tahu berapa banyak digit yang dikandungnya , tetapi 64 4 4 berisi 463. Cukup bagus untuk bahasa yang hanya mendukung angka eksplisit unary dan tidak memiliki fungsi eksponen; 3

Aku bisa membuat ini jauh lebih besar, tapi, berlebihan.

cjfaure
sumber
1

Javascript: 27 karakter; 260.431.976 char output; 9,645.628,74 rasio

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

Kode ini secara rekodekan mengkodekan input 61ke Base64 61 kali. Pengkodean setiap input panjang nke Base64 menghasilkan output panjang n * 8/6, dibulatkan menjadi kelipatan 4.

Ini harus dijalankan dari lingkungan konsol JavaScript yang secara asli mendukung fungsi encoding Base64 btoa. (Peramban modern apa pun, tetapi bukan Node.js.) Catatan Chrome tidak dapat berjalan lebih tinggi dari i=61, sementara Firefox hanya dapat menjangkau i=60. Perhatikan juga bahwa konsol Chrome tidak dapat benar-benar menampilkan output karena terlalu besar, tetapi Anda dapat memverifikasi ukuran hasilnya dengan menjalankan

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

Jika program ini dibiarkan berjalan maksimal i=99, itu akan menghasilkan output hipotetis ukuran 14.566.872.071.840 (14,5 triliun, 14.5e12) karakter, untuk rasio hipotetis sekitar 540 miliar (5.39e11).

apsillers
sumber
1

Ruby, 23 karakter - ~ 500000000000000 (5e14) Output

while rand
puts 0
end

Ti-Basic 84, 13 karakter - ~ 3000 Output

:Disp 1
:prgmA

Beri nama program prgmA

Timtech
sumber
1

ruby, 283 96 44 karakter

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

Tidak terlalu pendek, tetapi mengimbanginya dalam output, yang sangat banyak saya belum bisa mengukurnya.

tbodt
sumber
2
menurut perhitungan saya ini adalah tentang 1e127keluaran karakter. Lagi pula, menugaskan ke variabel akan memotong ukuran kode menjadi setengah. juga, 1e99adalah jumlah yang lebih besar yang membutuhkan lebih sedikit ruang. juga, gunakan mapalih-alih each, gunakan putsalih-alih print, hapus spasi kosong antara printdan "ier.... Anda juga bisa mengganti string besar itu dengan 'a'*999(atau bahkan ?a*999) yang merupakan string lebih panjang yang membutuhkan lebih sedikit ruang. Ringkasan: ini sama sekali bukan golf
Gagang Pintu
@ Doorknob Terima kasih. Saya tidak tahu apa-apa tentang ruby, kecuali bab 3 dari panduan pedih mengapa untuk ruby.
tbodt
ya, kenapa tidak Anda tetapkan saja (0..1e99).mapke variabel? sepertia=(0...1e99).map;a{a{a{a{a{puts'a'*99}}}}}
Gagang Pintu
Penafsir Ruby saya kehabisan evaluasi memori a=(0...1e99).map. Anda mungkin ingin sedikit membalas nada itu. 0..1e9akan menggunakan sekitar 4GB.
primo
1

Rasio Mathematica 9 chars: ~ 4564112: 1

Berikut ini adalah gambar input Mathematica. Saya belum tahu cara membuatnya di SE.

eksponen

Berikut screenshot yang menunjukkan jumlah digit dalam output. IntegerDigitsmengonversi output ke daftar digit. Lengthmenghitung jumlah digit.

menghitung

Keystrokes untuk masuk: 9, ctrl6, 9, ctrl6, 9, ctrl6, 9, ctrl6, 9....

DavidC
sumber
1
Apa? Anda bisa mengetikkan itu ke dalam Mathematica?
tbodt
Ya, ini adalah input yang sah untuk Mathematica.
DavidC
Dan penekanan tombol apa yang diperlukan?
tbodt
@tbodt Keystrokes sekarang ditampilkan dalam jawaban.
DavidC
1
Saya tidak tahu apakah Anda harus menentukan pesanan, tetapi Anda ingin menghitungnya dari atas ke bawah: (9 ^ 9) ^ 9 adalah angka 78 digit, tetapi 9 ^ (9 ^ 9) adalah angka 369.693.100 digit. (terima kasih, wolframalpha)
SeanC
0

Befunge-93: 48 karakter, sekitar ((2 ^ 32) ^ 2) * 10 karakter output

Tumpukan Befunge secara teoritis tidak terbatas, tetapi angka-angka yang disimpan tumpukan terbatas pada ukuran integer panjang yang tidak ditandatangani (di sini diasumsikan 32 bit). Jadi, bagi juru bahasa Befunge, (x + 1)> x salah untuk nilai x yang benar. Kami menggunakan fakta ini untuk pertama-tama mendorong semua nilai dari nol ke maksimum (dua kali, dengan satu setiap setiap angka ketiga), dan kemudian untuk setiap nilai pada tumpukan, kami mengeluarkan dan menurunkannya, lalu membuangnya ketika mencapai nol. Akhirnya tumpukan kosong dan program berakhir. Saya mungkin sedikit kurang pada ukuran output, tetapi harus di suatu tempat di stadion baseball itu.

>::1# + #1\`# :# _> #- #1 :# :# .# _# .# :# _@
MDS
sumber
0

C: 48 karakter, kira-kira. (2 ^ 32 - 1) * 65090 byte keluaran

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

Perhatikan bahwa 65090 tidak tepat, dan tergantung pada ukuran tumpukan. Program akhirnya akan berhenti ketika crash. Juga, saya hanya bisa meletakkan string yang lebih panjang dan lebih lama di put () untuk membuat jatah mendekati tak terhingga, tapi itu sepertinya agak curang.

Stuntddude
sumber
1
itu loop tak terbatas
izabera
Aduh, Anda benar, saya pikir. Saya akan melihat apakah saya bisa memikirkan cara memperbaikinya.
Stuntddude
0

java (131): tidak diketahui tetapi jumlah terbatas

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

Menggunakan kemungkinan rendah Math.random () untuk mendapatkan 0 dalam satu lingkaran dan kemudian pergi 2 ^ 64-1 loop melalui pendahuluan dengan output 1234567890;

masterX244
sumber
0

Python 3, 115 byte, berjalan selama 7983 tahun (# karakter tidak diketahui)

EDIT: ymbirtt mengalahkan saya untuk itu ._

Saya tahu, ini tidak terlalu pendek, dan saya tahu bahwa jawaban Python yang lain jauh lebih lama, tapi saya memutuskan untuk mencobanya.

Program ini berjalan sekitar 8000 tahun, yang, seperti Anda ketahui, adalah waktu yang cukup lama.

Apa yang dilakukannya adalah terus mendapatkan waktu saat ini menggunakan datetime.datetime.now()fungsi, dan membandingkannya dengan 9999-12-31 24:59:59.999999, yang sejauh yang saya tahu tanggal maksimum dalam Python.

Jika ini adalah sama, program berhenti. Jika tidak, itu terus-menerus menghasilkan a.

import datetime
while 1:
    if str(datetime.datetime.now())=="9999-12-31 24:59:59.999999":exit
    else:print("a")
m654
sumber
1
Bagaimana jika Anda melewatkan momen itu?
C5H8NNaO4
@ C5H8NNaO4 Jika Anda membiarkannya selama 7983 tahun, mudah-mudahan Anda tidak akan melewatkannya.
m654