Kegilaan: melakukan hal yang sama berulang-ulang dan mengharapkan hasil yang berbeda.
Tulis program yang hanya melempar pengecualian (runtime error) setiap kali dijalankan. Tantangannya adalah memiliki probabilitas untuk menghasilkan lebih dari satu crash, tanpa memanggil pengecualian secara langsung (tidak ada throw
pernyataan) dan tidak menggunakan built in fungsi penghitungan cpu tick atau acak.
- 10 poin untuk setiap kemungkinan kesalahan.
- 25 poin bonus jika kesalahan / kerusakan terjadi pada proses lain atau sistem.
Aturan
- Respons harus menunjukkan kesalahan apa yang mungkin terjadi dan bagaimana kesalahan itu dihasilkan.
- Tidak dapat menggunakan generator nomor acak sistem (built-in) kecuali jika diunggulkan dengan nomor yang sama setiap kali program berjalan.
- Tidak dapat menggunakan jumlah tics atau siklus cpu, kecuali mereka dihitung relatif ke awal utas program utama.
- Multithreading diperbolehkan (jika tidak didukung).
Edit 1
Generasi GUID berada di bawah penghasil angka acak bawaan. Pembuatan GUID "buatan lokal" diizinkan.
Mengakses sistem file diperbolehkan untuk I / O file kecuali ketika dilakukan untuk memotong aturan (membaca file bit acak, atau cap waktu).
Edit 2
- Menyebut
abort()
atauassert()
melanggar semangat tantangan membuat perangkat lunak gila dan karenanya tidak ada 10 poin yang akan diberikan untuk mode kegagalan ini.
Semoga berhasil!
code-challenge
Ja72
sumber
sumber
Jawaban:
Jawa, 400
Jawa diberkati (?) Dengan banyak
Exception
s danError
s. Ada banyakException
s yang spesifik untuk pengoperasian satu kelas. Sebagai contoh dari salah satu kasus yang paling ekstrem, ada lebih dari 10Exception
detik (semua adalah subkelasIllegalFormatException
) yang didedikasikan untukFormatter
kelas saja, dan saya telah mengambil waktu untuk membuat kode melempar (hampir) semuanya.Jawaban saya saat ini menampilkan 40
Exception
s / s berbedaError
, dan mereka dijalankan secara acak tergantung pada moduloSystem.nanoTime()
dengan beberapa integer.Metode di atas harus diizinkan, karena termasuk dalam kasus "3. Tidak dapat menggunakan jumlah siklus atau siklus cpu, kecuali jika dihitung secara relatif pada permulaan utas program utama" .
Instruksi Kompilasi
Oracle JRE / JDK atau OpenJDK sangat disarankan untuk menjalankan kode. Kalau tidak, beberapa Pengecualian mungkin tidak dibuang, karena beberapa dari mereka bergantung pada detail internal implementasi referensi dan saya tidak memiliki back-back yang dapat diandalkan.
Kode di bawah ini berhasil dikompilasi dengan
javac 1.7.0_11
dan menghasilkan semua Pengecualian aktifjava 1.7.0_51
.Untuk menjalankan kode ini, Anda perlu menyalin dan menempelkan kode di bawah ini ke editor Unicode aware (mis. Notepad ++), simpan di UTF-16 (Big-Endian atau Little-Endian tidak masalah selama BOM ditulis) .
Ubah direktori kerja (
cd
) ke tempat kode sumber disimpan ( ini penting ).Kompilasi kode dengan perintah berikut:
Dan jalankan kodenya:
Tidak ada yang merusak dalam kode saya, karena saya juga ingin menguji menjalankannya di komputer saya. Kode yang paling "berbahaya" adalah menghapus
ToBeRemoved.class
file di folder saat ini. Selain itu, sisanya tidak menyentuh sistem file atau jaringan.Daftar Pengecualian dan Kesalahan
Agar dinyatakan dalam pernyataan switch-case. Ada 37
Exception
s dan 3Error
s total.Pattern
, dengan kasus membosankan sebagai cadangan)Pattern
, dengan kasus membosankan sebagai cadangan)Pattern
, dengan kasus yang membosankan sebagai cadangan)Pattern
, dengan kasus membosankan sebagai cadangan)$
diPattern
dapat cocok sebelum terminator garis akhir)Matcher
tanpa melakukan pertandingan)split(String regex)
)Exception
selama inisialisasi kelas)java.nio.*
-specificException
)java.nio.*
-specificException
)java.nio.*
-specificException
)java.util.Stack
-specificException
)Charset.isSupported(String name)
mengembalikan false atau melemparException
)java.util.Scanner
-specificException
)java.util.Formatter
spesifikException
s)SecurityManager
dapat digunakan)Class
kelas)Exception
tidak dapat dilemparkan ke dalam implementasi Oracle, tanpa cadangan)sumber
nanoTime
dan pekerjaan yang dilakukan dengan jawaban ini.Java
is-1 % 40 == -1
atau-1 % 40 = 39
?-1
. Apakah Anda mendapat angka negatif? (Diedit untuk memastikan semuanya tidak negatif).C (Windows 7) - 80 + 25 = 105 Poin
Program berikut bergantung pada ASLR
Mengikuti Pengecualian akan terjadi secara acak
Vector Subscript Out of Range
)Infinite Recursion
Dividing by Zero
Allocating Huge Memory
By Accessing NULL
By overwriting stack
sumber
<iostream>
perlu?assert()
sama dengan melempar pengecualian.abort
danassert
._crtMessageBoxW
dan berpura-pura meneleponraise(SIGABRT)
, yang berakhir melaluiexit(3)
Perl
Di bawah ini adalah cuplikan perl yang mati dengan sejumlah pesan kompilasi waktu perl. Ini menggunakan generator nomor pseudo-acak buatan untuk menghasilkan karakter ASCII yang dapat dicetak dan kemudian mencoba untuk mengeksekusi mereka sebagai perl. Saya tidak tahu persis jumlah waktu kompilasi yang dapat diberikan oleh perl peringatan, tetapi pasti ada setidaknya 30 kesalahan seperti itu, dan mereka bisa datang dalam berbagai kombinasi yang berbeda. Jadi, kecuali itu dianggap tidak valid, saya akan mengatakan kode ini mendapat urutan lebih banyak poin daripada solusi lain =)
Contoh keluaran dari beberapa proses yang berbeda (diselingi dengan baris baru):
sumber
C # (85) (Tanpa Membatalkan atau Menegaskan)
Solusi ini menggunakan proses id saat ini untuk menentukan bagaimana crash.
Proses dapat berakhir karena:
10x6 + 25 = 85
Edit
Setelah OP telah melarang Assert dan Abort, saya telah menghapusnya dari solusi saya, maka itu turun ke 85 dengan semua metode yang diijinkan yang valid.
sumber
Abort()
danAssert()
. Lihat apakah Anda masih bisa membuang pengecualian ini tanpa benar-benar memohonnya secara langsung.Process.GetCurrentProcess().Id / 4 % actions.Count
?Tidak yakin apakah ini memenuhi syarat ...
C
Baik
i
dan elemenp
tidak diinisialisasi, jadi ini dapat menyebabkan:i
<0i
entah bagaimana mencapai 0c
, setelah peningkatan berulang, menjadi lebih besar darii
Selain itu, ini mungkin atau mungkin tidak membunuh aplikasi yang sudah ada (tergantung pada nilai
p[c]
) dengan SIGSEGV.Perhatikan bahwa saya belum menguji ini ... jadi tolong beri komentar jika ini tidak berhasil
sumber
Berkilau .
Penafian: mirip dengan solusi hebat Abhijit, tetapi:
sumber utama kegilaan adalah bahwa kode terkelola memperoleh detail implementasi asli melalui sekelompok peretasan yang buruk;
yang ini tidak memerlukan ASLR, hanya alokasi memori dinamis.
Apa yang dilakukan:
program memanggil juru bahasa sendiri (
spn
perintah) dan menampilkan deskripsi dari array kosong ke file. Array dialokasikan secara dinamis, dan deskripsi termasuk alamat memorinya.Program kemudian membuka file, mem-parsing deskripsi, dan mendapatkan alamat sebagai integer. Itu kemudian melakukan semacam hashing pada nilai yang dihasilkan, dan mengeksekusi salah satu tindakan salah berikut:
..
, dan penambahan string adalah pengecualian runtime)nil
sesuai dengan spesifikasi bahasa (ini ada hubungannya dengan detail implementasi - tidak mungkin dibedakan dari global yang tidak ada). Ketika simbol seperti itu ditemukan, kesalahan runtime dilemparkan.sumber
Kode Python - Memukul Komputer dengan Kelelawar (secara kiasan)
Saya terlalu malas untuk menyelesaikan ini, tetapi seseorang, tolong ambil ide saya dan jalankan dengan itu! Tujuannya di sini adalah untuk menghapus satu komponen penting dari komputer Anda dan mengeksploitasi pengecualian untuk bagian itu sampai Anda akhirnya hanya rm semua / etc atau / usr / bin atau sesuatu yang penting seperti itu dan melihat semuanya hancur dan terbakar. Saya yakin Anda bisa mencetak banyak "25 poin" ketika semuanya crash. :)
Saya menargetkannya ke mesin linux. Ini tentu saja harus dijalankan sebagai root untuk kerusakan maksimum dan jika Anda menjalankannya berulang kali, itu akan membuat sistem Anda benar-benar rusak!
Pengecualian:
bat.py:
sumber
TI-BASIC, 130
Untuk kalkulator TI-84 Anda
Kesalahan fatal (berurutan):
sumber
Kode PHP: 38 (+2) karakter, 5 kesalahan, tidak tertandingi
Daftar kemungkinan kesalahan:
Kesalahan fatal: Waktu eksekusi maksimum 'n' detik yang dilampaui pada baris 1
for(;;)
menunjukkan loop tak terbatasKesalahan fatal: Ukuran memori yang diizinkan sebesar 2097152 byte habis (mencoba mengalokasikan 884737 byte) pada baris 1
PHP memiliki
php.ini
file, dan ada baris yang mengatakanmemory_limit=
dan di sinilah penggunaan ram maksimum dalam byte.Bagian mana yang dikatakan
$e.=$e++
berarti yang$e
akan menjadi hasil dari rangkaian itu sendiri meningkat sebesar 1 di setiap iterasi.Kesalahan fatal: Nama kelas harus berupa objek yang valid atau string pada baris 1
Kelas dalam PHP dapat dipanggil baik dengan nama kelas atau menyimpan nama kelas sebagai string dalam var atau dengan menetapkan instance baru dari kelas dan memanggilnya .
Contoh:
$b='PDO';$a=new $b();$a::connect();$b::connect()
-> ini adalah kode PHP yang valid.Kesalahan ini terjadi karena
$e
adalahnull
pada iterasi pertama darifor(;;)
lingkaran.Kesalahan fatal: Nama fungsi harus berupa string pada baris 1
Sama seperti kelas, tetapi fungsi harus berupa string (dan
$e
isnull
) atau nama fungsi secara langsung (contoha()
:)Kesalahan fatal: Tidak dapat membuat referensi ke elemen ekspresi array sementara di baris 1
PHP memiliki
foreach
loop yang loop meskipun setiap elemen dalam array. Kataas
kunci digunakan untuk menunjukkan nama variabel baru yang digunakan untuk menyimpan salinan nilai indeks array saat ini.Saat menggunakan
foreach($array as &$v)
, PHP membuat referensi ketika ada&
sebelum nama variabel.Itu adalah skor yang lemah (5 kesalahan dan tidak dapat ditandingi) = 50 poin
PHP tidak memungkinkan menangkap kesalahan fatal.
Di linux, menambahkan
shutdown -P +0
antara backticks akan menjalankan perintah itu (dalam hal ini, akan menyebabkan sistem mati tiba-tiba).Ini menyebabkan semua proses berhenti.
Tidak yakin apakah ini valid untuk bonus atau tidak.
sumber
Dalam Actionscript
Fungsi dipanggil dalam loop tanpa henti yang menyebabkan penerjemah macet.
sumber
insane
program.