Napisz program, który gra w rosyjską ruletkę!
Jeśli program zostanie uruchomiony,
- powinna istnieć szansa, że 5 na 6 zakończy się normalnie po wydrukowaniu „Przeżyłem!”
- powinna wystąpić szansa 1 na 6 awarii programu. (błąd segmentacji itp.)
Brak danych wejściowych i inne wyjścia nie są dozwolone.
Losowość musi być sprawiedliwa: musi mieć jednolity rozkład prawdopodobieństwa. Oznacza to, że niezainicjowana zmienna (lub RNG bez nasion) MOD 6 nie będzie wystarczający.
Jeśli rozwiązanie działa tylko z jednym dedykowanym systemem operacyjnym / platformą, otrzymasz 6 bajtów kary do wyniku.
Najkrótszy kod wygrywa, nie wcześniej niż 10 dni po pierwszej ważnej odpowiedzi.
randrange(5)
może być zaimplementowany jakorandrange(MAX_INT)%6
.Odpowiedzi:
05AB1E ,
1312 bajtów-1 bajt dzięki @Emigna .
W rzeczywistości 05AB1E nie powinno być w ogóle w stanie popełnić błędu, ale ponieważ nowa wersja 05AB1E nadal ma pewne problemy w porównaniu do starszej wersji, mogę to wykorzystać, aby wyeliminować błąd w tym wyzwaniu.
Wypróbuj online.
Wyjaśnienie:
Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak
“IЖd!
jest"I survived!"
.źródło
5ÝΩz“IЖd!
powinno działać, ale najwyraźniej1 / 0 = 0
..0
które w starej wersji 05AB1E generowało błąd 0 do STDERR, w ogóle nie wiem, jak popełnić błąd w starszej wersji 05AB1E . Nowa wersja wciąż zawiera jednak sporo błędów, które wykorzystałem przy okazji. ;).0
, niejednokrotnie sprawiło, że ktoś powiedział: „Wat ... Dlaczego to rozkaz?”PHP 38 bajtów
Umieszczenie
+
przed łańcuchem nieliczbowym spowoduje ocenę0
. Powinienrand(0,5)
zwrócić5
,$s[rand(0,5)]
będzie pusty ciąg (ponieważ$s
ma tylko pięć znaków), a następnie$$s[rand(0,5)]
będzie niezainicjowaną zmienną. Próba wykonania inwersji zostanie zatrzymana w przypadku nieobsługiwanego typu argumentu. Każda inna wartość0-4
powrócis
, a ponieważ$s
jest zdefiniowana, przeżyjesz.Uwaga: od wersji PHP 4.2.0 generator liczb losowych jest inicjowany automatycznie .
źródło
R 30
Raz na sześć wyśle błąd:
Error: object 'Z' not found
źródło
Ruby, 24–28
Około co 6 razy pojawia się
ZeroDivisionError
Istnieje nawet krótsza wersja z 24 znakami (dzięki ugoren i histocrat):
Jeśli nie akceptujesz danych
"
wyjściowych, potrzebuję jeszcze 3 znaków. Pierwsza opcja (puts
) dodaje nową linię, druga ($><<
) nie wprowadza nowej linii:W SO jest pytanie o liczbę losową w rubinie . Ziarno z
srand
jest automatycznie wywoływane, przy czym ziarno jest z bieżącego czasu, jeśli nie zostało jeszcze wywołane. (patrz komentarz Julianów )Primo wpadł na pomysł dodatkowej premii za rozwiązania, które nie polegają na dzieleniu przez zero .
Moje pierwsze rozwiązanie można skrócić (28 znaków) za pomocą
undefined local variable or method ``a' for main:Object (NameError)
źródło
6/rand(6)
.1/rand(6);p "I survived!"
p
i nie jest wymagana biała spacja"I survived!"
. Według moich obliczeń, to tylko 24 bajty.Dyalog APL -
25222120 CharachtersDrukuje się
DOMAIN ERROR
jako błąd wynikający z podziału przez zero.Najkrótsze rozwiązanie bez dzielenia przez zero, które mogłem wymyślić, to 23 znaki.
Rzuca
INDEX ERROR
Wypróbuj tutaj
Czcionka APL tutaj
źródło
I survived
”, ale poDOMAIN ERROR
jednorazowym wydrukowaniu drukuje tylko to. Nawet jeśli przeładuję stronę całkowicie, nigdy nie przetrwa.1÷0
jestDOMAIN ERROR
w Dyalog, ale w ngn / apl jest∞
. Wynik?6
to 1..6 kiedy⎕IO←1
(domyślnie w Dyalog) i 0..5 kiedy⎕IO←0
(tylko opcja w ngn / apl). W Dyalogu PRNG można wysiewać przez ustawienie⎕RL
. Początkowo ma pewną z góry określoną wartość domyślną. Jeśli ustawisz⎕RL←0
, PRNG zostanie ponownie zainicjowany dość nieprzewidywalnie przez system operacyjny. TryAPL jest za pomocą Dyalog i nie obsługuje?
funkcji .Python, 96
Jeśli
randrange(5)
zwróci 0, to Python ulegnie awarii z powodu błędu segmentacji.źródło
vba, 27
używane w bezpośrednim oknie.
W przypadku awarii
pojawia się okno błędu z informacją:
źródło
!
w tekście.Befunge - 48 znaków
Jedyną losowością Befunge jest
?
operator, który wysyła cię w jednym z czterech możliwych kierunków (1/4
szansa). Blokując jeden lub dwa kierunki, masz1/3
lub masz1/2
szansę, a łącząc je, masz1/6
szansę wyjść z programu „żywy”.Program ulega awarii, wykonując dzielenie przez zero. Myślę, że to zależy od implementacji, co się wydarzy (w Wikipedii napisano, że program powinien zapytać o pożądaną odpowiedź), ale befungee.py ulega awarii lub kończy się gniewnie:
źródło
J, 18
Błąd
domain error
podczas próby uwzględnienia 0.źródło
?
. Możesz użyć?.
do stałych nasion.C,
676562 znakówrand()%8
nie traci uczciwości. Podział ulega awarii dlat=0
, daje true dla 1 i 2 (ponów), daje false dla 3..7 (przeżył).EDYCJA: Poprzednia wersja używała zmiennej tymczasowej, która okazała się całkowicie niepotrzebna.
2/(rand()%8)
realizuje oba potrzebne warunki.źródło
T-SQL
56 4440 + 6Uznanie dla Sean Cheshire za niepotrzebne wezwanie obsady
Uznanie osobiste przesłanie od Seana Cheshire za sugestię zmiany sufitu na podłogę.
Death Err Msg: Msg 8134, poziom 16, stan 1, wiersz 3 Napotkano błąd dzielenia przez zero.
źródło
-1
iceiling
nie są potrzebne.cast
zostanie obciętyJavaScript, 42
(Math.random()*6|0)?alert('i survived!'):b
Bitowy lub dolny wynik mnożenia, a zatem wartość między 0 a 5 wyników. 0 zostaje domyślnie przypisane do fałszu, więc w 5 z 6 przypadków alert pojawia się w szóstym przypadku, do którego
b
odwołuje się określony , powodując awarię procesu.źródło
Używając zwykłej metody dzielenia przez zero:
Wersja Perla 5.8
Wersja Perla 5.10
W przypadku awarii zostaną wyświetlone:
Korzystanie z funkcji bless, która jest używana do tworzenia obiektów w perlu.
Wersja Perla 5.8
Wersja Perla 5.10
W przypadku awarii zostaną wyświetlone:
źródło
&&
i dodatkowej przestrzeni. użyj~~
zamiast,int
aby wymusić wartości całkowite. wynik jest taki:1/~~rand 6;print"I survived!"
GolfScript, 21 znaków
Podobnie jak większość odpowiedzi, ta ma jedną na sześć szans na awarię z ZeroDivisionError. Najkrótsze rozwiązanie, którym udało mi się zarządzać bez dzielenia przez zero, to 23 znaki:
który ma 1/6 szansy na awarię
undefined method `+' for nil:NilClass (NoMethodError)
.(Ps. Podczas opracowywania tego, znalazłem błąd, który może być błędem w interpretatorze GolfScript: kod podobny
0,1>
wydaje się zostawiaćnil
wartość na stosie, co później spowoduje awarię programu, jeśli spróbujesz zrobić cokolwiek z tą wartością, z wyjątkiem pop-up i odrzuć to;
. Niestety fakt, że muszę jakoś użyć tej wartości, aby wywołać awarię, oznacza, że nawet wykorzystanie tego błędu nie pomogło mi uzyskać poniżej 23 znaków.)źródło
5,5>
pozostawia[]
na stosie, co prawdopodobnie należy zrobić, ale4,5>
pozostawianil
. Jeśli go nie usuniesz, interpreter ulegnie awarii podczas próby jego wydrukowania. Ciekawym efektem ubocznym jest to, że4,6rand>+;'I survived!'
staje się ważnym rozwiązaniem. Ktoś powinien prawdopodobnie poinformować Flagitiousa.Python, 70 znaków
Z inspiracją z odpowiedzi grc.
randrange (5) zwraca wartość z zakresu od 0 do 5.
Jeśli zwraca 0, Python ulega awarii podczas próby wykonania (ute) ciągu kodu zawierającego 9 ^ 5 zestawów nawiasów.
źródło
PHP - 30 bajtów
Wymaga PHP 5.4+ dla składni krótkiej tablicy, niepoprawny pomysł operatora bezwstydnie skradziony z @primo.
Jak wspomniano,
rand()
jest automatycznie wysiewany przy pierwszym użyciu .źródło
rand()%6
nie jest jednolity rozkład, jak32768 = 2 (mod 6)
. Jednakrand(0,5)||~$a
dla 30 bajtów jest i będzie działał dodatkowo ze wszystkimi wersjami PHP (drugie wyrażenie w trójce jest opcjonalne tylko w 5.3.0+).Befunge, 38
Całkiem proste. Rozbijanie odbywa się poprzez pchanie 1s na stosie, aż się przepełni. Podjąłem kilka prób wycięcia tych 11 przecinków i zastąpienia ich bardziej wydajną pętlą do drukowania wszystkiego, ale nie mogłem uzyskać mniej niż 11 znaków.
Pamiętaj, że liczenie postaci w Befunge jest trochę trudne ... Na przykład w trzeciej linii jest tylko jedna postać, ale liczę tam dodatkową, ponieważ wykonanie może odbywać się przez to miejsce.
źródło
CMD Shell (Win XP lub nowszy), 40 +6
Robię to tylko dlatego, że DOS nie jest czymś, o czym należy myśleć w golfie kodowym, a białe znaki są ważne
W przypadku awarii zostanie wydrukowany
źródło
R,
50 44 4236Wiadomość o błędzie śmierci:
źródło
if(1/0)"I Survived!"
wciąż drukowany PrzeżyłemEmacs-Lisp, 42 znaki
źródło
JavaScript, 40 znaków
W Javascript sztuczka dzielenia przez zero nawet nie działa: zwraca po prostu Infinity. Dlatego odwołanie do nieistniejącej zmiennej:
Nie takie krótkie, choć zabawne :)
źródło
PowerShell, 40 znaków
W przypadku niepowodzenia: „Próbowano podzielić przez zero”.
źródło
TI-BASIC (TI-84 + / SE), 36 bajtów
Brak danych wejściowych, jak określa wyzwanie.
Wyjście jest
I survived!
pomyślne, wDIVIDE BY 0
przeciwnym razie błąd.Ekran
DIVIDE BY 0
błędu wygląda następująco:Wybranie jednej z opcji (i powrót do ekranu głównego, jeśli
2
jest zaznaczone) pojawia sięError
po wywołaniu programu.Przykłady:
Wyjaśnienie:
Uwagi:
TI-BASIC jest językiem tokenizowanym. Liczba bajtów nie jest równa liczbie znaków.
Małe litery mają po dwa bajty .
startTmr
jest poleceniem tylko w kalkulatorach TI-84 + i TI-84 + SE. Wspomniane kalkulatory mają różne systemy operacyjne.źródło
Python, 53 bajty
Oto krótki 53-bajtowy program spoza zakresu indeksu python:
źródło
Java, 149
Błąd z błędem „Array poza granicami”. Udało się ogolić kilka znaków przy użyciu anonimowego obiektu losowego (bez importu).
źródło
Groovy, 39
Wybiera losową liczbę od 0 do 5 włącznie. Jeśli 0, zgłasza wyjątek dzielenia przez zero.
źródło
Python (56), Haskell (77)
Występuje awaria z błędem indeksu, gdy wygenerowana liczba wynosi 1:
Rozwiązanie Haskell ma ten sam pomysł:
źródło
Python,
59 5553,65 5956ZeroDivisionError
przyord(os.urandom(1))%6
wartości 0IndexError
przyord(os.urandom(1))%6
ocenie do 5źródło
import random as r
następnie użyjr.randint
import os
, a następnie użyjord(os.urandom(1))%6
jako losowego int.print
.VBA - 39/46
Nie podoba mi się wynik liczbowy Seana Cheshire'a (choć nadal jest to dobra odpowiedź, technicznie nie
No input, and no other outputs are allowed.
odpowiada specyfikacji ...), a ponadto używa/0
, więc oto moje alternatywy:To rozwiązuje problem
Run-time error '5': Invalid procedure
podczas próby osiągnięcia znaku 0 (VBA jest indeksowaniem opartym na 1).To rozwiązuje problem
Run-time error '13': Type mismatch
przy zastosowaniu przełącznika ujemnego do łańcucha.źródło
Japt v1.4.5, 16 bajtów
Spróbuj
-1 bajt dzięki @Shaggy!
Zgłasza się,
TypeError: U.í is not a function
gdy przypadkowa liczba w zakresie[0,6)
to0
.źródło
N.í()
metodę do wersji 1.4.6.N.í()
to moje „pójście do” za zgłoszenie błędu (kiedyśN.y()
). Istnieje kilka innych sposobów na uzyskanie błędu, ale rzadko są one przydatne.