Напишите программу, в которую играет русская рулетка!
Если программа запущена,
- там должно быть 5 из 6 шансов, что он закончится нормально после печати "Я выжил!"
- вероятность сбоя программы должна составлять 1 к 6. (ошибка сегментации и т. д.)
Нет входа, и никакие другие выходы не допускаются.
Случайность должна быть справедливой: она должна иметь равномерное распределение вероятностей. Это означает, что неинициализированной переменной (или ГСЧ без начального числа) MOD 6 будет недостаточно.
Если решение работает только с одной выделенной операционной системой / платформой, вы получите штраф в 6 байт на счет.
Самый короткий код выигрывает не раньше, чем через 10 дней после первого правильного ответа.
randrange(5)
может быть реализован какrandrange(MAX_INT)%6
.Ответы:
05AB1E ,
1312 байт-1 байт благодаря @Emigna .
На самом деле 05AB1E вообще не должен иметь ошибки, но, поскольку новая версия 05AB1E по-прежнему имеет некоторые проблемы по сравнению с унаследованной версией, я могу воспользоваться этим в своих интересах, чтобы ошибиться в этой задаче.
Попробуйте онлайн.
Объяснение:
Посмотрите эту подсказку 05AB1E (раздел Как пользоваться словарем? ), Чтобы понять, почему
“IЖd!
это так"I survived!"
.источник
5ÝΩz“IЖd!
должно работать, но, по-видимому1 / 0 = 0
..0
которая в STDERR в старой версии 05AB1E выдает ошибку деления на 0, в старой версии 05AB1E я даже не знаю, как сделать ошибку . Однако в новой версии все еще много ошибок, которые я использовал здесь. ;).0
, не раз это заставляло кого-то говорить: "Ват ... Почему это команда?"PHP 38 байт
Размещение
+
перед нечисловой строкой будет иметь значение0
. Долженrand(0,5)
возвращаться5
,$s[rand(0,5)]
будет пустой строкой (так как$s
длиной всего пять символов) и впоследствии$$s[rand(0,5)]
будет неинициализированной переменной. Попытка принять инверсию остановится на неподдерживаемом типе операнда. Любое другое значение,0-4
вернетсяs
, а поскольку$s
определено, вы выживете.Примечание. Начиная с версии php 4.2.0, генератор случайных чисел заполняется автоматически .
источник
R 30
Один раз из шести он выдаст ошибку:
Error: object 'Z' not found
источник
Руби, 24-28
Приблизительно каждые 6 раз, есть
ZeroDivisionError
Существует даже более короткая версия с 24 символами (спасибо Угорену и гистократу):
Если вы не принимаете
"
в выводе, то мне нужно еще 3 символа. Первая опция (puts
) добавляет новую строку, вторая ($><<
) не делает новую строку:Есть вопрос про случайное число в ruby у SO . Семя с
srand
автоматически вызывается семенем с текущего времени, если оно еще не было вызвано. (см. комментарий юлианцев )У Primo была идея дополнительного бонуса к тем решениям, которые не основаны на делении на ноль .
Мое первое решение может быть сокращено (до 28 символов)
undefined local variable or method ``a' for main:Object (NameError)
источник
6/rand(6)
.1/rand(6);p "I survived!"
p
и"I survived!"
. По моим подсчетам, это всего 24 байта.Dyalog APL -
25222120 персонажейПечатает
DOMAIN ERROR
как ошибку, из-за деления на ноль.Самое короткое решение без деления на ноль - 23 символа.
Это бросает
INDEX ERROR
Попробуй здесь
APL шрифт здесь
источник
I survived
", но после печатиDOMAIN ERROR
он продолжает печатать только это. Даже если я перезагружу сайт полностью, он никогда не выживет снова.1÷0
этоDOMAIN ERROR
в Dyalog, но в ngn / apl это∞
. Результат от?6
1..6 когда⎕IO←1
(по умолчанию в Dyalog) и 0..5 когда⎕IO←0
(только опция в ngn / apl). В Dyalog PRNG можно посеять, установив⎕RL
. Первоначально он имеет некоторое заранее заданное значение по умолчанию. Если вы установите⎕RL←0
, PRNG будет посеян довольно непредсказуемо ОС. TryAPL в использовании Dyalog и имеет поддержку?
функции .Питон, 96
Если
randrange(5)
вернет 0, то python потерпит крах из-за ошибки сегментации.источник
vba, 27
используется в непосредственном окне.
При ошибке
появляется окно с сообщением об ошибке:
источник
!
в тексте.Befunge - 48 символов
Единственная случайность Befunge - это
?
оператор, который отправляет вас в одном из четырех возможных направлений (1/4
шанс). Блокируя одно или два направления, у вас есть1/3
или1/2
шанс, и, комбинируя их, вы получаете1/6
шанс выйти из программы «живым».Программа вылетает при делении на ноль. Я предполагаю, что это будет зависеть от реализации (в Википедии написано, что программа должна запросить желаемый ответ), но befungee.py вроде вылетает или гневно завершается:
источник
J, 18
Сбой
domain error
при попытке факторизовать 0.источник
?
. Вы можете использовать?.
для фиксированных семян.C
676562 символаrand()%8
не теряет справедливости Деление падает дляt=0
, дает истину для 1 и 2 (повтор), дает ложь для 3,7 (выжил).РЕДАКТИРОВАТЬ: предыдущая версия использовала временную переменную, которая в конечном итоге совершенно не нужна.
2/(rand()%8)
реализует оба необходимых условия.источник
T-SQL
56 4440 + 6Благодарим Шона Чешира за то, что он объявил актеров ненужными
Кредитное личное сообщение от Шона Чешира за предложение сменить потолок на этаж.
Сообщение об ошибке смерти: сообщение 8134, уровень 16, состояние 1, строка 3: ошибка деления на ноль.
источник
-1
иceiling
не нужны.cast
будет усекатьJavascript, 42
(Math.random()*6|0)?alert('i survived!'):b
Поразрядное или минимальное значение результата умножения дает значение от 0 до 5. 0 неявно преобразуется в false, поэтому в 5 из 6 случаев предупреждение появляется в 6-м случае, когда на определенную
b
ссылку ссылаются, что приводит к сбою процесса.источник
Используя обычный метод деления на ноль:
Версия Perl 5.8
Версия Perl 5.10
При сбое они будут отображать:
Использование функции благословения, которая используется для создания объектов в Perl.
Версия Perl 5.8
Версия Perl 5.10
При сбое они будут отображать:
источник
&&
и лишнего пробела. использовать~~
вместо того,int
чтобы форсировать интегральные значения. результат1/~~rand 6;print"I survived!"
GolfScript, 21 символ
Как и большинство ответов, у этого есть один из шести шансов на сбой с ZeroDivisionError. Самое короткое решение, которое я мог бы обойтись без деления на ноль, это 23 символа:
с вероятностью 1/6 столкновения с
undefined method `+' for nil:NilClass (NoMethodError)
.(Ps. При разработке этого я обнаружил, что может быть ошибка в интерпретаторе GolfScript: похоже, что подобный код
0,1>
оставляетnil
значение в стеке, что позже приведет к сбою программы, если вы попытаетесь что-то сделать с этим значением, кроме как вытащить его и выбросить его с собой;
. К сожалению, тот факт, что мне нужно каким-то образом использовать значение, чтобы вызвать сбой, означает, что даже использование этой ошибки не помогло мне получить значение ниже 23 символов.)источник
5,5>
оставляет[]
в стеке, что, вероятно, то, что он должен делать, но4,5>
оставляетnil
. Если вы не удалите его, интерпретатор фактически потерпит крах при попытке вывести его. Интересным побочным эффектом является то, что4,6rand>+;'I survived!'
становится правильным решением. Кто-то, вероятно, должен сообщить Flagitious.Python, 70 символов
С вдохновением от ответа GRC.
randrange (5) возвращает значение от 0 до 5.
Если он возвращает 0, Python падает при попытке выполнить (использовать) строку кода, содержащую 9 ^ 5 наборов скобок.
источник
PHP - 30 байт
Требуется PHP 5.4+ для синтаксиса короткого массива, недопустимая идея оператора, бесстыдно украденная у @primo.
Как указано,
rand()
автоматически высевается при первом использовании .источник
rand()%6
не является равномерным распределением, как32768 = 2 (mod 6)
. Тем не менее,rand(0,5)||~$a
для 30 байтов есть, и будет дополнительно работать со всеми версиями PHP (второе выражение в троичной является необязательным только в 5.3.0+).Befunge, 38
Довольно просто. Сбой выполняется путем нажатия 1 на стек, пока он не переполнится. Я предпринял несколько попыток вырезать эти 11 запятых и заменить их более эффективным циклом для печати всего, но не смог получить его до 11 символов.
Обратите внимание, что подсчет символов в Befunge немного сложен ... Например, в третьей строке есть только один символ, но я рассчитываю дополнительный, так как выполнение может проходить через это место.
источник
CMD Shell (Win XP или более поздняя версия), 40 +6
Я делаю это только потому, что DOS - это не то, о чем следует думать в коде гольф, а пробелы важны
При неудаче он напечатает
источник
R,
50 44 4236Сообщение об ошибке смерти:
источник
if(1/0)"I Survived!"
все еще напечатано, я выжилEmacs-Lisp, 42 символа
источник
Javascript, 40 символов
В Javascript трюк деления на ноль даже не работает: он просто возвращает бесконечность. Следовательно, ссылаясь на несуществующую переменную:
Не так коротко, хотя весело :)
источник
PowerShell, 40 символов
При неудаче: «Попытка делить на ноль».
источник
TI-BASIC (TI-84 + / SE), 36 байтов
Вход не указан, как указано в задаче.
Вывод в
I survived!
случае успеха, вDIVIDE BY 0
противном случае ошибка.На
DIVIDE BY 0
экране ошибки выглядит следующим образом :Выбор любого из параметров (и возврат к начальному экрану, если
2
выбран) отображаетсяError
после вызова программы.Примеры:
Объяснение:
Заметки:
TI-BASIC - это токенизированный язык. Количество байтов не равно количеству символов.
Строчные буквы по два байта каждая.
startTmr
это команда только на калькуляторах TI-84 + и TI-84 + SE. Указанные калькуляторы имеют разные операционные системы.источник
Python, 53 байта
Вот короткий 53-байтовый индекс Python вне программы:
источник
Ява, 149
Сбой с ошибкой «Массив вне границ». Удалось сбрить несколько символов с помощью анонимного случайного объекта (без импорта).
источник
Groovy, 39
Выбирает случайное число от 0 до 5 включительно. Если 0, исключение делится на ноль.
источник
Python (56), Haskell (77)
Это приводит к ошибке IndexError, когда сгенерированное число равно 1:
Решение Haskell имеет ту же идею:
источник
Python,
59 5553,65 5956ZeroDivisionError
когдаord(os.urandom(1))%6
оценивается в 0IndexError
когдаord(os.urandom(1))%6
оценивается до 5источник
import random as r
затем используйтеr.randint
import os
, а затем используйте вord(os.urandom(1))%6
качестве случайного целогоprint
.VBA - 39/46
Я не люблю числовой вывод Шона Чешира (хотя все же хороший ответ, он технически не
No input, and no other outputs are allowed.
соответствует спецификации ...), плюс он использует/0
, так что вот мои альтернативы:Это разрешается до a
Run-time error '5': Invalid procedure
при попытке достичь символа 0 (VBA - индексирование на основе 1).Это разрешается
Run-time error '13': Type mismatch
при применении отрицательного переключателя к строке.источник
Japt v1.4.5, 16 байт
Попытайся
-1 байт благодаря @Shaggy!
Выдает ,
TypeError: U.í is not a function
когда случайное число в диапазоне[0,6)
находится0
.источник
N.í()
метод к v1.4.6.N.í()
это мое "go to" для выдачи ошибки (раньше былоN.y()
). Есть несколько других способов получить ошибку, но они редко полезны.