Perilaku Tidak Terdefinisi Membunuh Kucing Saya
Ini juga diketahui bahwa perilaku undefined dapat membunuh kucing Anda [rujukan?] .
Tapi bisakah itu?
Tugas Anda
- Tulis program yang memunculkan perilaku tidak terdefinisi.
- Jelaskan skenario yang dimulai dengan program di atas dijalankan, menghasilkan Felis catus mengakhiri hidupnya saat Anda berada, sebagai akibat dari UB yang disebutkan di atas.
- Perkirakan probabilitas untuk setiap tahap dalam skenario.
- Hitung probabilitas total bahwa satu menjalankan program akan membunuh kucing Anda.
Aturan
- Ini adalah kontes popularitas , jadi kreatiflah jika Anda bisa.
- Ini adalah tantangan yang berhubungan dengan pemrograman, jadi rantai kejadian sebagian besar harus berada di dalam komputer, bukan di dunia nyata (tentu saja, jika harus menjangkau dunia nyata jika di situlah kucing Anda berada).
- Jika Anda memilih bahasa yang tidak memiliki perilaku tidak terdefinisi, gunakan sesuatu yang serupa.
- Tidak ada hewan yang dapat dirugikan dalam menghasilkan jawaban Anda.
Mencetak gol
Penghitungan suara ditambah probabilitas total skenario (yang tidak dapat melebihi 1).
Contoh dalam C:
main(){printf();}
Skenario:
printf
dipanggil dengan sampah dari tumpukan - perilaku tidak terdefinisi. Kemungkinan: 100%.- Parameter pertama adalah string
Your cat is ugly!
. Kemungkinan: (1/256) 17 = (1.148 * 10 -37 )%. - Melihat pesan, Anda mengambil pistol dan menembak kucing Anda. Probabilitas: 3%.
- Kucing itu mati. Probabilitas: 93%.
Total probabilitas: (3.202 * 10 -39 )%.
popularity-contest
ugoren
sumber
sumber
cat
perintah atau semacamnya.Jawaban:
C
Sebagian besar jawaban untuk pertanyaan ini salah mengartikan pertanyaan bahwa itu membunuh
cat
proses pada sistem UNIX. Berikut adalah program yang dapat menyebabkan matinya kehidupan biologis spesies Felis Cattus seperti yang dikhususkan oleh pertanyaan.Contoh ini berjalan pada Windows, tetapi bisa dengan mudah porting ke sebagian besar sistem operasi UNIX dengan mengganti
iexplore -k
dengan perintah untuk meluncurkan browser web yang diinstal.Program ini berpura-pura memberikan saran tentang diet kucing kepada pengguna.
Ini akan memulai Internet Explorer dan mengarahkan pengguna ke daftar stackexchange banyak pertanyaan bermanfaat tentang cara memberi makan kucing. Namun, ada kemungkinan rendah (1/256) bahwa itu akan mengirim pengguna untuk memasak stackexchange, bukan mendaftar kiat bagaimana menyiapkan hidangan yang mengandung cokelat, yang sangat beracun bagi kucing . Lebih buruk lagi, itu akan meluncurkan internet explorer dalam mode kios (layar penuh), yang menyembunyikan bilah alamat dan sulit untuk melarikan diri dari untuk pengguna non-tech-savy.
Tipuan pintar ini akan membujuk pengguna untuk memberi makan cokelat kucing mereka dengan percaya bahwa itu adalah diet yang tepat untuk itu, sehingga menyebabkan mereka membunuhnya secara tidak sengaja.
sumber
Pesta
Menurut ini ,
INT_MIN % -1
mungkin atau mungkin tidak terdefinisi (apa ???) , dan dapat menyebabkan masalah untuk bahasa yang diimplementasikan dalam c / c ++.The
cat
akan dibunuh dini jika orang tuabash
proses crash, yang mungkin atau tidak mungkin terjadi.Pada VM saya, saya mendapatkan output ini:
(Saya benar-benar tidak mengerti skor untuk pertanyaan ini, tapi begini saja)
Hitung
$((2**63%-1))
. Kecelakaan selalu terjadi pada bash 4.2.25, tetapi tampaknya hanya bertahan pada beberapa versi 3.x. Lebih banyak ketidakpastian. Saya bisa memberi tahu Anda probabilitas yang tepat, tetapi karena prinsip ketidakpastian Heisenburg, saya kemudian akan jatuh ke lubang hitam. Atau sesuatu. Jadi saya pikir kita dapat dengan aman mengatakan kemungkinannya sekitar 42%.sumber
echo $((-2**63/-1)) | cat
cat
.INT_MAX = 2^63 - 1
. Jika kita menambahkan 1 keINT_MAX
, ruang nomor 64bit membungkus dan kita dapatkanINT_MIN
. Dengan kata lain dalam aritmetika integer 64bit bertanda2^63 == -2^63
,. Saya bisa saja menggunakan-2**63
, tetapi lebih memilih kesederhanaan tanpa-
, karena aritmatika modular adalah sama dalam hal ini.C (titik urutan)
deadcat.c:
Eksekusi (atau tidak):
Skenario dan probabilitas
Dengan asumsi bahwa lima persen orang yang menjalankan program ini menggunakan dentang untuk mengkompilasi kode C (versus 90 persen menggunakan gcc dan 5 persen menggunakan kompiler C lainnya):
Penjelasan:
k = i + (++ i) mengakses dan mengubah "i" antara titik-titik urutan. Probabilitas tidak dapat ditentukan oleh program; itu tergantung pada pilihan kompiler, yang dibuat oleh pengguna. "Tidak terdefinisi" tidak berarti "acak".
Lihat https://stackoverflow.com/questions/4176328/undefined-behavior-and-afterence-points
sumber
C
Backstory
Istri saya mewarisi seekor kucing dari keluarga. † Sayangnya, saya sangat alergi terhadap hewan. Kucing itu sudah melewati masa jayanya dan seharusnya sudah di-eutanasia bahkan sebelum kita mendapatkannya, tetapi dia tidak bisa menyingkirkannya karena nilai sentimentalnya. Saya membuat rencana untuk mengakhiri penderitaan
saya.Kami akan berlibur panjang, tetapi dia tidak ingin menaiki kucing di kantor dokter hewan. Dia khawatir tentang itu tertular penyakit atau dianiaya. Saya membuat pengumpan kucing otomatis sehingga kami bisa meninggalkannya di rumah. Saya menulis firmware mikrokontroler di C. File yang berisi
main
tampak mirip dengan kode di bawah ini.Namun, istri saya juga seorang programmer dan tahu perasaan saya terhadap kucing itu, jadi dia bersikeras melakukan review kode sebelum setuju untuk meninggalkannya di rumah tanpa pengawasan. Dia memiliki beberapa masalah, termasuk:
main
tidak memiliki tanda tangan yang memenuhi standar (untuk implementasi yang di-host)main
tidak mengembalikan nilaitempTm
digunakan tidak diinisialisasi sejakmalloc
dipanggil, bukancalloc
malloc
tidak boleh dilemparkanelapsedTime
variabel mungkin tidak memiliki rentang yang cukupButuh banyak meyakinkan, tetapi dia akhirnya setuju bahwa tesis ini tidak masalah karena berbagai alasan (tidak ada salahnya kita sudah terlambat untuk penerbangan kami). Karena tidak ada waktu untuk pengujian langsung, dia menyetujui kode dan kami pergi berlibur. Ketika kami kembali beberapa minggu kemudian, kesengsaraan kucing
sayatelah berakhir (meskipun sebagai hasilnya saya sekarang memiliki lebih banyak lagi).Scenario Skenario sepenuhnya fiktif, tidak perlu khawatir.
Kode
Perilaku tidak terdefinisi:
Bagi yang tidak mau repot-repot mencari UB sendiri:
Kemungkinan membunuh kucing:
Saya memperkirakan bahwa kucing itu mati dengan probabilitas 0,995 .
sumber
&
di memcpy, kan?cat
.pesta
Versi klasik
Memiliki keuntungan membunuh semua kucing dalam jangkauannya.
Perhatikan bahwa proses dihentikan segera, jadi satu-satunya cara untuk mengakhirinya dengan satu pemanggilan pkill adalah mengirim SIGKILL (9).
Karena itu:
p(SUCCESS) = p(RANDOM == 9) = 0.0275 %
Versi kuantum
Kemungkinan membunuh kucing selama percobaan: 50%
sumber
cat &
mencoba membaca dari terminal, tetapi tidak bisa. Setiap sinyal yang Anda sebutkan (dan beberapa lainnya) akan berfungsi jika Anda mengirim SIGCONT (18) sesudahnya. Juga, saya setuju bahwa menggantung dan mengakhiri kucing akan sama dengan membunuhnya , tetapi memotongnya sepertinya tidak memuaskan ...: PC
Perhatikan bahwa ini hanya berfungsi di linux.
Total probabilitas: 1x10 ^ -99999999999999999999999999999999999999999999999999999999999999999999999, aprox.
sumber
C ++
Kucing Anda Mati dan Hidup sampai Anda Ingin Tahu. Kemudian Anda menyadari bahwa ada kemungkinan 0,5 bahwa Kucing Anda Mati.
sumber
this->m_dead
setelah itudelete this
?ö
tampaknya tidak menjadi simbol yang valid di C ++. Mungkin ganti denganoe
.C
Berjalan di Linux.
Kemungkinan membunuh kucing: 1/256 (Pengembalian
sleep(1)
0, jadi akan terbunuh jikax
nol.)Sebagai bonus, ia membunuh semua kucing yang saat ini berjalan di sistem Anda.
Jika Anda sangat membenci kucing, saya persembahkan kepada Anda:
The Cat Centipede (Bash)
Berdasarkan fakta bahwa, dalam The Human Centipede (Urutan Pertama) , ketiga anjing dari kelabang anjing mati, dan dua dari tiga orang kelabang manusia meninggal, saya memperkirakan bahwa kemungkinan membunuh satu kucing adalah 5/6.
sumber
JavaScript
Eksekusi:
"Cat is fine"
"Cat is dead"
Penjelasan:
Mengutip Glenn Randers-Pehrson, probabilitas tidak dapat ditentukan oleh program; itu tergantung pada pilihan browser, yang dibuat oleh pengguna.
sumber
Membaca nilai fungsi yang seharusnya mengembalikan nilai menghasilkan perilaku yang tidak terdefinisi. Sekarang, sudah jelas, [rujukan?] Bahwa "Setiap kali Anda mencapai perilaku yang tidak terdefinisi, Tuhan membunuh seekor kucing." Dengan ini kami menyimpulkan:
Dapat dengan mudah diperpanjang dengan loop untuk memusnahkan semua kucing di dunia.
sumber
Jawa (Pengumpulan Sampah)
Meskipun kode dapat menjalankan System.gc () tidak memastikan bahwa Pengumpul Sampah akan mengumpulkan semua objek yang tidak digunakan. Jadi, untuk kode berikut, tidak dapat diprediksi apakah kucing akan dibunuh atau tidak.
Probabilitas tidak dapat dihitung.
Perhatikan bahwa masih ada kemungkinan kucing akan "dihidupkan kembali" jika ada saklar konteks di utas GC setelah sysout dan sebelum System.exit (0) tapi saya lebih suka untuk tidak menutupinya agar konsepnya tetap sederhana.
sumber
System.out.close()
setelahSystem.out.println("Cat is still alive.");
baris.Adakah yang berpikir untuk benar-benar membunuh (a)
cat
?Kemungkinan
cat
meninggalUntuk probabilitas ... Saya kira kita perlu membedakan beberapa kasus:
cat
sangat rendah, dapat dengan aman dianggap nol. Jika dia menginstal Cygwin, dia akan dihitung sebagai pengguna unix.cat
akan gagal.cat
dengan peluang 1/6, ia sangat mungkin akan mengulanginya sampai sesuatu yang tidak terduga terjadi. Tanpa kehilangan keumuman, saya berasumsicat
pasti akan mati.Probabilitas keseluruhan tergantung pada bagaimana pengguna dicampur dan sulit untuk ditentukan. Tapi kita pasti bisa mengatakan: Windows adalah tempat yang aman untuk anak kucing.
Menguji kepatuhan aturan
Ini tidak membunuh hewan, jawabannya disetujui oleh American Humane Association .
jelas membuktikan bahwa
cat
itu bukan binatang (selamafile
tidak tahu jenis warisan jenis file tersembunyi).sumber
C
Jika nama kucing Anda terlalu panjang, ia mati.
gets
menyebabkan kematian kucing, bersama dengan masalah lain.sumber
Haskell
Di sini, kami menerapkan
unsafePerformIO
untuk suatu tindakan yang memiliki diamati efek samping . Itu selalu merupakan perilaku yang tidak terdefinisi, setidaknya demikian juga urutan efeknya. Jadi, apakah programundefined
tersebut akan gagal untuk mencoba mengevaluasi (bahwa, ironisnya, itu bukan perilaku yang tidak terdefinisi: ia tidak boleh menghasilkan nilai yang akan memungkinkan program untuk melanjutkan sesuatu yang lain), atau justru akan menimbulkan masalah internasional yang serius. efek samping. Dalam hal ini, peluang bertahan hidup hanya 0,001% .Kemungkinan membunuh kucing dengan demikian: 49,9995%.
sumber
Itu
Karena pertanyaan memungkinkan untuk bahasa yang tidak memiliki perilaku yang tidak terdefinisi selama efeknya sama, saya memilih Thue karena non-determinismenya dalam memilih aturan mana yang akan dieksekusi ketika ada lebih dari 1 aturan yang dapat diterapkan pada saat ini negara.
Program ini akan dimasukkan ke dalam pengontrol untuk oven microwave, yang di dalamnya adalah kucing saya. Pintu ke oven microwave ditutup dan diperkuat oleh dasi ritsleting. Output dari program akan memutuskan apakah oven microwave mulai microwave kucing atau tidak.
Kemungkinan membunuh kucing tergantung pada implementasi penerjemah, tetapi katakanlah 50%. Maka kemungkinan kucing itu akan mati adalah 0,5 .
sumber
Math.random()
misalnya bukan perilaku yang tidak ditentukan, hanya perilaku yang tidak dapat diprediksi.3. If you choose a language that doesn't have undefined behavior, use something similar.
Jawa
Menurut spec
java.util.Date
akan memiliki perilaku yang tidak terdefinisi. Jadi cobalah keberuntungan Anda:sumber