Tulis program yang melontarkan Kesalahan StackOverflow atau yang setara dalam bahasa yang digunakan. Sebagai contoh, di java , program harus membuang java.lang.StackOverflowError
.
Anda tidak diizinkan untuk mendefinisikan fungsi yang memanggil dirinya sendiri atau kelas baru (kecuali yang berisi main
java). Seharusnya menggunakan kelas bahasa pemrograman yang dipilih.
Dan seharusnya tidak membuang kesalahan secara eksplisit.
def s{def t=s;t}
?Jawaban:
Jalanan, 1
Saya tidak tahu Befunge, tapi ...
dari Stack overflow code golf
sumber
@
untuk mengakhiri program.Python (2.7.3), 35 karakter
Operasi ini sendiri berhasil, tetapi baik skrip dan interaktif akan segera dibuang
RuntimeError: 'maximum recursion depth exceeded'
setelahnya.Terinspirasi oleh jawaban elssar.
sumber
Coq
70000
hanya gula sintaksis untukS (S ( ... (S O) ...))
dengan 70000S
-an. Saya pikir itu adalah pemeriksa tipe yang menyebabkan stack overflow.Berikut peringatan yang dicetak sebelum perintah dijalankan:
sumber
Jawa - 35
sumber
public static void main
di sana. Atau apakah saya hanya gagal memahami Java?Javascript 24 karakter
Jawaban ketergantungan browser (harus memiliki akses ke
apply
):eval
adalah nama fungsi global terpendek yang dapat saya temukan (ada yang tahu yang lebih pendek?)apply
memungkinkan kita untuk mengubah array menjadi parameter fungsi, parameter pertama menjadi konteks fungsi (this
)Array(999999)
akan membuat array dengan panjang yang terdaftar. Tidak yakin berapa jumlah argumen maksimum, tetapi kurang dari ini, dan lebih dari itu99999
IE9:
Chrome 24:
FireFox 18
Catatan - Karena sifat javascript berulir tunggal, loop tak terbatas akhirnya mengunci UI dan tidak pernah melempar pengecualian.
Tak satu pun dari ini memenuhi syarat.
Perbarui - ini memangkas tiga karakter:
sumber
eval
adalah yang terpendek.eval.apply(0,Array(1e6))
menghemat 3 karakter, Anda bahkan dapat menggunakannya9e9
tanpa biayaapply
adalah fitur standar ECMAScript. Tidak ada yang bergantung pada browser. Kecuali Anda berbicara tentang peramban yang benar-benar tua, tetapi ini tidak akan berhasil dalam hipotesis Netscape 2apply
, karenaArray
kelas tidak ada di Netscape 2.eval(...Array(9e9))
dir.apply(0,Array(1e7));
Python 2.7 (12 karakter)
hasil dalam «s_push: overflow tumpukan parser»
sumber
SyntaxError: unexpected EOF while parsing
exec('{'*101)
saya dapatkanMemoryError
exec
adalah pernyataan, jadi Anda bisa menggunakanexec'{'*999
(99 sepertinya tidak cukup)Mathematica, 4 karakter
sumber
Clojure, 12 karakter
Berjalan di balasan:
sumber
(\x.xx)(\x.xx)
, tapi saya tidak tahu cukup baik untuk mengatakan dengan pasti apakah ini yang terjadi. Saya juga tidak melihat mengapa ekspresi yang disebutkan di atas akan menghasilkan stack overflow, jadi mungkin Anda melakukan beberapa tipu daya dengan Y-combinator? Jawaban ini menarik minat saya dan penjelasannya akan menyenangkan.Java - 113 karakter
Saya pikir ini tetap dalam semangat aturan "metode self-calling". Itu tidak melakukannya secara eksplisit, dan bahkan melewati konstruksi bahasa Jawa.
Versi Ringkas:
sumber
""+this
sebenarnya""+this.toString()
, jadi metode ini memanggil dirinya sendiri.StringBuilder
objek di sana.toString
kemungkinan akan dipanggil dari dalam sana.toString()
metode akhirnya menjadipublic java.lang.String toString() { return this.toString(); }
C, 19 byte
sumber
main.c:1:16: error: size of array 'i' is negative
saya pada gcc 4.8.1. Versi yang tidak ditandatanganimain(){int i[~0U];}
berfungsi.sizeof(i)
16GB. Apakah menggunakanul
atauull
akhiran membuat perbedaan? Beberapa sistem membuat memori berlebih dan hanya macet jika memori ditulis.GolfScript (8 karakter)
Hasil:
Pada dasarnya ini menciptakan struktur data yang sangat bersarang dan kemudian meluap tumpukan ketika mencoba mengubahnya menjadi string.
sumber
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[ [[[[[[[[[[[[[""]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] ]]]]]]]]]]]]]]]]] (and so on, output too long for comments)
333
dengan dan itu akan rusak.333
adalah nilai terkecil yang mematahkan bagi saya, tetapi jika Anda memiliki versi Ruby yang berbeda (atau mungkin versi yang sama pada OS yang berbeda, untuk semua yang saya tahu) itu mungkin menangani jumlah bingkai tumpukan yang berbeda sebelum meluap.6.?
masih berfungsi tanpa menambahkan karakter.perakitan x86, sintaks NASM, 7 byte
"Pëý" adalah 50 EB FD dalam heksadesimal, dan
dalam perakitan x86.
sumber
Ruby, 12
Memberi
Agaknya tergantung pada sistem, tetapi Anda dapat menambahkan urutan besarnya dengan menabrak digit terakhir ke atas (tidak disarankan).
Sunting untuk penjelasan: Sama halnya dengan beberapa contoh lainnya, ini menciptakan serangkaian
[][][]
... diulangi 9000 kali, kemudian mengevaluasinya: paling kanan[]
diuraikan sebagai pemanggilan fungsi ke yang lainnya, dan seterusnya. Jika itu benar-benar sampai ke permulaan, itu akan melempar ArgumentError karena[]
merupakan objek dengan[]
metode yang membutuhkan satu argumen, tetapi mesin saya melempar kesalahan sedikit sebelum tumpukan lebih dari sembilan ribu.sumber
ruby
1.9.2 melempar “ArgumentError: jumlah argumen yang salah (0 untuk 1..2)”.ruby
1.8.7. Di sana kode yang diposting berfungsi seperti yang dijelaskan.def f;f;end;f
Rebol (11 Karakter)
Hasil:
Meskipun Rebol memiliki fungsi, penutupan, dan objek ... ini tidak mendefinisikan semua itu. Ini mendefinisikan struktur data, yang dalam paradigma kode-sebagai-data dapat diperlakukan sebagai kode menggunakan DO.
Kita dapat menyelidiki pertanyaan "apa itu S" dengan REPL:
DO tidak pernah mengubah ini menjadi fungsi, ia memanggil evaluator di lingkungan saat ini pada struktur.
sumber
C, 35 karakter
sumber
alloca(1)
pada dasarnya diterjemahkansub $1, %esp
sehingga tumpukan tidak tersentuh.Gangguan Umum, 7 karakter
sumber
#1=(#1#)
terminal dan(print #1=(#1#))
, tetapi solusi Anda jauh lebih baik.Python - 11 karakter
sumber
Casio Calculator, 11 penekanan tombol
Cukup sulit untuk menghitung byte / token dalam "bahasa" ini - saya telah memberikan jumlah penekanan tombol yang diperlukan, tidak termasuk Shift, Alpha (tombol shift kedua) dan
=
pada akhirnya - ini tentu saja cocok menjadi 1 byte per penekanan tombol.Diuji pada fx-85GT PLUS , yang merupakan kalkulator ilmiah standar, non-grafik, "tidak dapat diprogram". Model-model lain akan berfungsi.
Cukup dengan menumpuk 11 akar pangkat tiga:
3√ 3√ 3√ 3√
3√ 3√ 3√ 3√
3√ 3√ 3√
Bahkan tidak memberikan kesalahan sintaks tentang nomor yang hilang di bawah akar kuadrat.
Ini sepertinya tidak bekerja dengan akar kuadrat.
Atau, ulangi cos( 31 kali.
Keluaran
Saya percaya bahwa ini memenuhi syarat sebagai stack overflow. Tumpukan tampaknya kecil ...
sumber
(((((((((((((((((((((((((
FORTH, 13 byte
meluap tumpukan nilai
sumber
: X X ; X
(9) harus melimpah stack kembali:
...;
definisi kata. Itu menambahkan setidaknya 6 karakter, ditambah setidaknya 2 lagi untuk dieksekusi sebagai program. Anda mungkin bisa melakukannya lebih pendek, tapi inilah contoh:: F BEGIN 1 AGAIN ; F
. Saya menyarankan ini karena pertanyaannya adalah: "Tulis program." Bagaimanapun, memberi Anda upvote untuk Forth, terlepas dari jumlah char! :-)Catatan tambahan, 7
Misalnya.
sumber
Haskell (GHC, tanpa optimasi), 25
jumlah total malas. Ini menumpuk sekelompok thunks, kemudian mencoba untuk mengevaluasi semuanya pada akhirnya, menghasilkan stack overflow.
sumber
LaTeX: 8 karakter
Ini adalah kode yang sama dengan yang digunakan dalam jawaban ini . Pada dasarnya,
\end
makro mengembang sendiri berulang kali, sehingga stack overflow:TeX capacity exceeded, sorry [input stack size=5000]
. Penjelasan lebih rinci dapat ditemukan di sini .sumber
PHP 5.4, 33 karakter
Ini menyebabkan stack overflow ketika objek stdClass bersarang dihancurkan secara otomatis:
sumber
Q / k (16 karakter)
Tidak yakin apakah ini dalam semangat tantangan tapi saya tidak berpikir itu melanggar aturan:
sumber
Banyak dengan gaya yang sama:
Python, 30
Javascript, 38
Lua, 44
sumber
x=lambda y:y(y);x(x)
lebih pendek (20 karakter). Fungsi ini tidak rekursif. x memanggil fungsi apa saja yang diteruskan sebagai argumen.->x{x[x]}[->y{y[y]}]
#@#&[#@#&]
C #:
106865846322832 : Getters can SO mesin Anda mudah di C #:
sumber
public int a {get{return a;}}
int a { get { return a; } }
INTERCAL, 12 byte
Penjelasan:
NEXT
adalah versi panggilan subrutin INTERCAL (atau, paling tidak, yang paling dekat yang bisa Anda dapatkan). Ini mendorong posisi saat ini keNEXT
tumpukan dan melompat ke label yang diberikan.Namun, jika
NEXT
panjang stack melebihi 80, Anda mendapatkan versi INTERCAL dari stack overflow:Cobalah di Ideone. .
sumber
Mornington Crescent,
139133sumber
Perakitan X86 (AT&T), 33 karakter
Perhatikan bahwa meskipun saya menggunakan label
main
sebagai target lompatan, ini bukan fungsi rekursif.sumber
dd 0fdeb60
10 karakter!Python (17):
sumber
KeyError: 'unknown symbol table entry'