Tulis program yang memainkan Roulette Rusia!
Jika program dimulai,
- harus ada peluang 5 dalam 6 untuk berakhir secara normal setelah mencetak "Saya selamat!"
- harus ada peluang 1 dalam 6 dari program mogok. (kesalahan segmentasi, dll.)
Tidak ada input, dan tidak ada output lain yang diizinkan.
Keacakan harus adil: harus memiliki distribusi probabilitas yang seragam. Ini berarti variabel yang tidak diinisialisasi (atau RNG tanpa seed) MOD 6 tidak akan cukup.
Jika solusinya hanya bekerja dengan satu sistem / platform operasi khusus, Anda akan menerima penalti 6 byte untuk skor.
Kode terpendek menang, tidak lebih cepat dari 10 hari setelah jawaban valid pertama.
randrange(5)
mungkin diimplementasikan sebagairandrange(MAX_INT)%6
.Jawaban:
05AB1E ,
1312 byte-1 byte terima kasih kepada @Emigna .
05AB1E sebenarnya tidak bisa membuat kesalahan sama sekali, tetapi karena versi baru 05AB1E masih memiliki beberapa masalah dibandingkan dengan versi legacy, saya bisa mengambil keuntungan saya untuk kesalahan untuk tantangan ini.
Cobalah online.
Penjelasan:
Lihat ini ujung 05AB1E saya (bagian Cara menggunakan kamus? ) Untuk memahami mengapa
“IЖd!
adalah"I survived!"
.sumber
5ÝΩz“IЖd!
harus bekerja tetapi ternyata1 / 0 = 0
..0
yang digunakan untuk melempar divisi dengan 0 kesalahan ke STDERR dalam versi lama 05AB1E, saya bahkan tidak tahu bagaimana kesalahan dalam warisan 05AB1E sama sekali . Versi baru masih memiliki cukup banyak kesalahan namun, yang saya ambil untuk kesempatan saya di sini. ;).0
, pada lebih dari satu kesempatan itu membuat seseorang berkata , "Wat ... Kenapa itu perintah?"PHP 38 byte
Menempatkan
+
sebelum string non-numerik akan dievaluasi0
. Harusrand(0,5)
kembali5
,$s[rand(0,5)]
akan menjadi string kosong (karena$s
hanya panjang lima karakter), dan selanjutnya$$s[rand(0,5)]
akan menjadi variabel yang tidak diinisialisasi. Mencoba mengambil inversi akan berhenti pada Jenis Operand yang Tidak Didukung. Nilai lain apa pun,0-4
akan kembalis
, dan karena$s
sudah ditentukan, Anda akan bertahan.Catatan: pada versi php 4.2.0, generator angka acak diunggulkan secara otomatis .
sumber
R 30
Satu dari enam, itu akan menimbulkan kesalahan:
Error: object 'Z' not found
sumber
Ruby, 24-28
Kira-kira setiap 6 kali, ada a
ZeroDivisionError
Bahkan ada versi yang lebih pendek dengan 24 karakter (Terima kasih kepada ugoren dan histokrat):
Jika Anda tidak menerima
"
dalam output, maka saya perlu 3 karakter lagi. Opsi pertama (puts
) menambahkan baris baru, yang kedua ($><<
) tidak membuat baris baru:Ada pertanyaan tentang angka acak di ruby di SO . Seed dengan
srand
secara otomatis dipanggil dengan seed yang berasal dari waktu saat ini jika belum dipanggil. (lihat komentar Julians )Primo memiliki ide untuk bonus tambahan untuk solusi yang tidak bergantung pada pembagian dengan nol .
Solusi pertama saya dapat disingkat (28 karakter) dengan a
undefined local variable or method ``a' for main:Object (NameError)
sumber
6/rand(6)
.1/rand(6);p "I survived!"
p
dan"I survived!"
. Menurut hitungan saya, itu hanya 24 byte.Dyalog APL -
25222120 CharachtersMencetak
DOMAIN ERROR
sebagai kesalahan, karena pembagian dengan nol.Solusi tanpa pembagian terpendek menurut nol yang dapat saya buat adalah 23 karakter.
Itu melempar
INDEX ERROR
Coba di sini
Font APL di sini
sumber
I survived
", tetapi setelah mencetakDOMAIN ERROR
sekali, ia hanya mencetak saja. Bahkan jika saya memuat ulang situs sepenuhnya, itu tidak akan pernah bertahan lagi.1÷0
adalahDOMAIN ERROR
di Dyalog tetapi dalam ngn / apl itu∞
. Hasil dari?6
adalah 1..6 when⎕IO←1
(default di Dyalog) dan 0..5 when⎕IO←0
(hanya opsi di ngn / apl). Dalam Dyalog, PRNG dapat diunggulkan dengan pengaturan⎕RL
. Awalnya memiliki beberapa nilai standar yang telah ditentukan. Jika Anda mengatur⎕RL←0
, PRNG diunggah kembali cukup adil oleh OS. TryAPL adalah menggunakan Dyalog dan tidak mendukung?
fungsi .Python, 96
Jika
randrange(5)
mengembalikan 0, maka python akan macet karena kesalahan segmentasi.sumber
vba, 27
digunakan di jendela langsung.
Pada kegagalan, jendela kesalahan yang menyatakan:
muncul
sumber
!
dalam teks.Befunge - 48 karakter
Satu-satunya keacakan Befunge adalah
?
operator, yang mengirim Anda menuju salah satu dari empat arah yang memungkinkan (1/4
kesempatan). Dengan memblokir satu atau dua arah, Anda memiliki1/3
atau1/2
peluang, dan dengan menggabungkan ini, Anda mendapatkan1/6
kesempatan untuk keluar dari program "hidup".Program macet dengan melakukan divive-by-zero. Saya kira itu implementasi khusus apa yang akan terjadi (di Wikipedia dikatakan program harus meminta jawaban yang diinginkan), tetapi befungee.py semacam crash, atau keluar dengan marah:
sumber
J, 18
Gagal
domain error
saat mencoba memfaktorkan 0.sumber
?
. Anda dapat menggunakan?.
untuk benih tetap.C,
676562 karakterrand()%8
tidak kehilangan keadilan. Division crash untukt=0
, memberikan true untuk 1 dan 2 (coba lagi), memberikan false untuk 3..7 (selamat).EDIT: Versi sebelumnya menggunakan variabel sementara, yang akhirnya benar-benar tidak diperlukan.
2/(rand()%8)
mengimplementasikan kedua kondisi yang dibutuhkan.sumber
T-SQL
56 4440 + 6Kredit Sean Cheshire untuk memanggil para pemeran sebagai tidak perlu
Ucapkan pesan pribadi dari Sean Cheshire untuk saran mengubah langit-langit ke lantai.
Death Err Msg: Msg 8134, Level 16, State 1, Line 3 Divide by zero error found.
sumber
-1
danceiling
tidak dibutuhkan.cast
akan memotongJavascript, 42
(Math.random()*6|0)?alert('i survived!'):b
Bitwise atau lantai hasil perkalian dengan demikian nilai antara 0 dan 5 hasil. 0 secara implisit dilemparkan ke false, jadi dalam 5 dari 6 kasus peringatan muncul dalam kasus ke-6 tertentu
b
dirujuk, menabrak proses.sumber
Menggunakan metode pembagian biasa dengan nol:
Versi Perl 5.8
Versi Perl 5.10
Jika gagal, ini akan menampilkan:
Menggunakan fungsi bless yang digunakan untuk membuat objek dalam perl.
Versi Perl 5.8
Versi Perl 5.10
Jika gagal, ini akan menampilkan:
sumber
&&
, dan ruang ekstra. gunakan~~
alih-alihint
untuk memaksa nilai integral. hasilnya adalah ini:1/~~rand 6;print"I survived!"
GolfScript, 21 karakter
Seperti sebagian besar jawaban, yang ini memiliki peluang satu dari enam untuk menabrak ZeroDivisionError. Solusi terpendek yang dapat saya kelola tanpa menggunakan pembagian dengan nol adalah 23 karakter:
yang memiliki peluang 1/6 untuk menabrak
undefined method `+' for nil:NilClass (NoMethodError)
.(Ps. Ketika mengembangkan ini, saya menemukan apa yang mungkin menjadi bug dalam interpreter GolfScript: kode seperti
0,1>
tampaknya meninggalkannil
nilai pada stack, yang nantinya akan merusak program jika Anda mencoba melakukan sesuatu dengan nilai itu kecuali menghapusnya dan buang saja;
. Sayangnya, fakta bahwa saya perlu menggunakan nilai entah bagaimana untuk memicu kerusakan berarti bahwa bahkan mengeksploitasi bug ini tidak membantu saya mendapatkan di bawah 23 karakter.)sumber
5,5>
daun[]
di tumpukan, yang mungkin apa yang harus dilakukan, tetapi4,5>
perginil
. Jika Anda tidak menghapusnya, penerjemah akan benar-benar macet saat mencoba mengeluarkannya. Efek samping yang menarik adalah itu4,6rand>+;'I survived!'
menjadi solusi yang valid. Seseorang mungkin harus memberi tahu Flagitious.Python, 70 karakter
Dengan inspirasi dari jawaban grc.
randrange (5) mengembalikan nilai antara 0 dan 5.
Jika mengembalikan 0, Python lumpuh saat mencoba mengeksekusi (ute) string kode yang berisi 9 ^ 5 set tanda kurung.
sumber
PHP - 30 byte
Membutuhkan PHP 5.4+ untuk sintaks array pendek, gagasan operator yang tidak valid dicuri dari @primo tanpa malu-malu.
Seperti yang dinyatakan,
rand()
secara otomatis diunggulkan pada penggunaan pertama .sumber
rand()%6
bukan distribusi yang seragam, seperti32768 = 2 (mod 6)
. Namun,rand(0,5)||~$a
untuk 30 byte, dan juga akan bekerja dengan semua versi PHP (ekspresi kedua di ternary hanya opsional di 5.3.0+).Befunge, 38
Cukup mudah. Crashing dilakukan dengan mendorong 1s ke stack sampai meluap. Saya melakukan beberapa upaya untuk memotong 11 koma tersebut dan menggantinya dengan beberapa loop yang lebih efisien untuk mencetak semuanya, tetapi tidak dapat membuatnya di bawah 11 karakter.
Perhatikan bahwa menghitung karakter di Befunge sedikit rumit ... Misalnya hanya ada satu karakter di baris ketiga, tapi saya menghitung karakter tambahan di sana karena eksekusi dapat berjalan melalui lokasi itu.
sumber
CMD Shell (Win XP atau yang lebih baru), 40 +6
Saya hanya melakukan ini karena DOS bukan sesuatu yang harus dipikirkan untuk kode golf, dan spasi adalah penting
Jika gagal, itu akan dicetak
sumber
R,
50 44 4236Pesan Death Err:
sumber
if(1/0)"I Survived!"
masih dicetak I SurvivedEmacs-Lisp, 42 karakter
sumber
Javascript, 40 karakter
Dalam Javascript, trik bagi-oleh-nol bahkan tidak berfungsi: itu hanya mengembalikan Infinity. Oleh karena itu, merujuk variabel yang tidak ada:
Tidak terlalu pendek, meskipun menyenangkan :)
sumber
PowerShell, 40 Karakter
Pada Kegagalan: "Berusaha membagi dengan nol."
sumber
TI-BASIC (TI-84 + / SE), 36 byte
Tidak ada input, seperti yang ditentukan tantangan.
Keluaran adalah
I survived!
jika berhasil,DIVIDE BY 0
kesalahan sebaliknya.Layar
DIVIDE BY 0
kesalahan terlihat seperti berikut:Memilih salah satu opsi (dan kembali ke layar beranda jika
2
dipilih) akan munculError
setelah panggilan program.Contoh:
Penjelasan:
Catatan:
TI-BASIC adalah bahasa tokenized. Hitungan byte tidak sama dengan jumlah karakter.
Huruf kecil masing-masing dua byte .
startTmr
adalah perintah hanya pada kalkulator TI-84 + dan TI-84 + SE. Kalkulator tersebut memiliki sistem operasi yang berbeda.sumber
Python, 53 byte
Berikut ini adalah indeks python 53 byte pendek di luar jangkauan program:
sumber
Jawa, 149
Gagal dengan kesalahan "Array out of bounds". Berhasil mencukur beberapa karakter dengan menggunakan objek Acak anonim (tanpa impor).
sumber
Groovy, 39
Pilihan nomor acak antara 0 dan 5 inklusif. Jika 0, lemparkan sebuah angka dengan pengecualian nol.
sumber
Python (56), Haskell (77)
Ini macet dengan IndexError ketika nomor yang dihasilkan adalah 1:
Solusi Haskell memiliki ide yang sama:
sumber
Python,
59 5553,65 5956ZeroDivisionError
ketikaord(os.urandom(1))%6
dievaluasi menjadi 0IndexError
ketikaord(os.urandom(1))%6
dievaluasi menjadi 5sumber
import random as r
lalu gunakanr.randint
import os
, lalu gunakanord(os.urandom(1))%6
sebagai int acak Anda.print
.VBA - 39/46
Saya tidak suka output numerik Sean Cheshire (meskipun masih jawaban yang bagus, secara teknis gagal
No input, and no other outputs are allowed.
dari spek ...), ditambah dia menggunakan/0
, jadi di sini adalah alternatif saya:Ini diselesaikan
Run-time error '5': Invalid procedure
ketika mencoba untuk mencapai karakter 0 (VBA adalah pengindeksan berbasis 1).Ini diselesaikan
Run-time error '13': Type mismatch
ketika menerapkan saklar negatif ke string.sumber
Japt v1.4.5, 16 byte
Cobalah
-1 byte terima kasih kepada @Shaggy!
Melempar
TypeError: U.í is not a function
ketika angka acak dalam kisaran[0,6)
adalah0
.sumber
N.í()
metode ke v1.4.6.N.í()
adalah "pergi ke" saya untuk melempar kesalahan (duluN.y()
). Ada beberapa cara lain untuk mendapatkan kesalahan tetapi mereka jarang berguna.