Rosyjska Ruletka

28

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.

vsz
źródło
1
Czy możemy polegać na uczciwości bazowego środowiska wykonawczego, nawet jeśli nie jest to wyraźnie zagwarantowane w dokumentacji? Np. Python randrange(5)może być zaimplementowany jako randrange(MAX_INT)%6.
ugoren
Aby zainspirować kreatywność, możesz rozważyć przyznanie premii tym rozwiązaniom, które nie polegają na dzieleniu przez zero.
primo
Być może wspomniana premia powinna obejmować podzielenie wyniku przez 2.
Joe Z.
1
@JoeZeng: to byłoby za dużo. Zwykle można ustawić inny błąd, np. Odwołanie do wskaźnika zerowego itp., Kosztem zaledwie kilku znaków.
vsz
Widzę. Nie mam zbyt dużego doświadczenia w tworzeniu warunków punktacji dla zagadek golfowych, więc wciąż się tego uczę.
Joe Z.

Odpowiedzi:

4

05AB1E , 13 12 bajtów

6LΩiFë“IЖd!

-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:

6L          # Create the list [1,2,3,4,5,6]
  Ω         # Get a random choice from this list
   i        # If it is 1:
    F       #  Do a ranged loop, which currently results in a "(RuntimeError) Could not
            #  convert  to integer." error when no argument is given
   ë        # Else:
    IЖd!  #  Push dictionary string "I survived!" (which is output implicitly as result)

Zobacz moją wskazówkę 05AB1E (sekcja Jak korzystać ze słownika? ), Aby zrozumieć, dlaczego tak “IЖd!jest "I survived!".

Kevin Cruijssen
źródło
Wygląda na to, że 5ÝΩz“IЖd!powinno działać, ale najwyraźniej 1 / 0 = 0.
Magic Octopus Urn
1
@MagicOctopusUrn Tak, 05AB1E prawie nigdy nie popełnia błędów. Oprócz całkiem starego wbudowanego narzędzia, .0któ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. ;)
Kevin Cruijssen
1
Tęsknię za starym .0, niejednokrotnie sprawiło, że ktoś powiedział: „Wat ... Dlaczego to rozkaz?”
Magic Octopus Urn
11

PHP 38 bajtów

<?~$$s[rand(+$s=sssss,5)]?>I survived!

Umieszczenie +przed łańcuchem nieliczbowym spowoduje ocenę 0. Powinien rand(0,5)zwrócić 5, $s[rand(0,5)]będzie pusty ciąg (ponieważ $sma 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-4powróci s, a ponieważ $sjest zdefiniowana, przeżyjesz.

Uwaga: od wersji PHP 4.2.0 generator liczb losowych jest inicjowany automatycznie .

primo
źródło
6

R 30

"I survived!"[6*runif(1)<5||Z]

Raz na sześć wyśle ​​błąd: Error: object 'Z' not found

flodel
źródło
6

Ruby, 24–28

p rand(6)<5?"I survived!":1/0

Około co 6 razy pojawia się ZeroDivisionError

Istnieje nawet krótsza wersja z 24 znakami (dzięki ugoren i histocrat):

6/rand(6);p"I survived!"

Jeśli nie akceptujesz danych "wyjściowych, potrzebuję jeszcze 3 znaków. Pierwsza opcja ( puts) dodaje nową linię, druga ( $><<) nie wprowadza nowej linii:

6/rand(6);puts"I survived!"
6/rand(6);$><<"I survived!"

W SO jest pytanie o liczbę losową w rubinie . Ziarno z srandjest 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)

p rand(6)<5?"I survived!":a
knut
źródło
Może być nawet krótszy 6/rand(6).
ugoren
Czy Ruby automatycznie wysiewa swój RNG?
vsz
Możesz przyciąć kolejne trzy znaki, usuwając przepływ kontrolny:1/rand(6);p "I survived!"
histocrat
@ugoren / histocrat Dzięki za wskazówki, dostosowałem swoje rozwiązanie.
knut
Kolejny bajt dla Ciebie: między pi nie jest wymagana biała spacja "I survived!". Według moich obliczeń, to tylko 24 bajty.
primo
6

Dyalog APL - 25 22 21 20 Charachters

'I Survived!'⊣1÷6⊤?6

Drukuje się DOMAIN ERRORjako 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.

('I Survived!'1)[~6⍷?6]

Rzuca INDEX ERROR

Wypróbuj tutaj

Czcionka APL tutaj

MrZander
źródło
Chciałbym to zaakceptować, ale wydaje się, że to nie działa. Kilka razy drukuje „ I survived”, ale po DOMAIN ERRORjednorazowym wydrukowaniu drukuje tylko to. Nawet jeśli przeładuję stronę całkowicie, nigdy nie przetrwa.
vsz
@vsz Jak dziwne ... Działa w moim Dyalog APL WS i pamiętam testowanie go z TryAPL, kiedy skończyłem. Nadal działa na moim tłumaczu, ale nie na stronie internetowej. Jeśli to pomoże: dl.dropbox.com/u/9086539/apl.png
MrZander
1
1÷0jest DOMAIN ERRORw Dyalog, ale w ngn / apl jest . Wynik ?6to 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 .
ngn
1
Całkiem możliwe, że coś się wtedy zmieniło, od czasu do czasu aktualizujemy oprogramowanie za TryAPL lub eksperymentujemy z funkcjami strony. Czy jestem stowarzyszony? Jeśli ci powiem, będę musiał cię zabić ... cóż, z prawdopodobieństwem 1 ÷ 6 :)
ngn
1
Nawiasem mówiąc, oto rozwiązanie 18 znaków: „Przeżyłem!” ⊣ ÷ ⍟? 6
ngn
5

Python, 96

from ctypes import*
from random import*
randrange(5)or pointer(c_int())[9**9]
print'I survived!'

Jeśli randrange(5)zwróci 0, to Python ulegnie awarii z powodu błędu segmentacji.

grc
źródło
5

vba, 27

?1/int(6*rnd),"I Survived!"

używane w bezpośrednim oknie.
W przypadku awarii
dzielenie przez zero
pojawia się okno błędu z informacją:

SeanC
źródło
Brakuje !w tekście.
steenslag,
@steenslag, naprawiono
SeanC
@SeanCheshire Zaproponowałem alternatywę dla twojej odpowiedzi.
Gaffi
5

Befunge - 48 znaków

 v >91+"!devi"v
/?>?<v"I surv"<
 / / :
   :,_@#

Jedyną losowością Befunge jest ?operator, który wysyła cię w jednym z czterech możliwych kierunków ( 1/4szansa). Blokując jeden lub dwa kierunki, masz 1/3lub masz 1/2szansę, a łącząc je, masz 1/6szansę 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:

$ for i in {1..6} ; do ./befungee.py roulette.befunge ; done
Error (1,2): integer division or modulo by zero
Error (3,2): integer division or modulo by zero
Error (1,2): integer division or modulo by zero
I survived!
Error (0,1): integer division or modulo by zero
I survived!
daniero
źródło
5

J, 18

'I survived!'[q:?6

Błąd domain errorpodczas próby uwzględnienia 0.

randomra
źródło
Czy J automatycznie wysiewa swój RNG?
vsz
@vsz Tak, z ?. Możesz użyć ?.do stałych nasion.
randomra
4

C, 67 65 62 znaków

rand()%8nie traci uczciwości. Podział ulega awarii dla t=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.

main(){
        for(srand(time(0));2/(rand()%8););
        puts("I survived!");
}
ugoren
źródło
To robi. „żadne inne dane wyjściowe nie są dozwolone”
vsz
@vsz, jakoś to przegapiłem. Ale w każdym razie, z gcc / Linux nic nie drukuje. Ponadto, ściśle przestrzegając normy, wymaganie to jest niemożliwe, ponieważ niezdefiniowane zachowanie może wydrukować cokolwiek.
ugoren,
@vsz, teraz naprawione - w żadnym wypadku nie ma dodatkowej wydajności. Działa również z optymalizacją i krótszymi o 2 znaki.
ugoren,
4

T-SQL 56 44 40 + 6

 if 1/cast(ceiling(rand()*6)-1as int)<2print'I Survived!'

Uznanie dla Sean Cheshire za niepotrzebne wezwanie obsady

 if 1/ceiling(rand()*6-1)<2print'I Survived!'

Uznanie osobiste przesłanie od Seana Cheshire za sugestię zmiany sufitu na podłogę.

 if 1/floor(rand()*6)<1print'I Survived!'

Death Err Msg: Msg 8134, poziom 16, stan 1, wiersz 3 Napotkano błąd dzielenia przez zero.

swobodny
źródło
1
-1i ceilingnie są potrzebne. castzostanie obcięty
SeanC
Testuję, czy sufit można usunąć bez naruszania wymogu równomiernej dystrybucji, doktorzy twierdzą, że rand () zwraca wartości zmiennoprzecinkowe od 0 do 1.
wolny
Chciałem wiedzieć, czy sufit można usunąć z mojego pierwszego wpisu. Nie byłem w stanie ustalić z dokumentacji T-SQL, czy funkcja rand () zwróci 1, czy nie. Więc uruchomiłem pętlę około 50 milionów razy, testując funkcję rand (), ani razu nie zwróciło 1. Ale usunięcie pułapu z mojego pierwszego wpisu nadal wynosiłoby 47 bajtów, więc mój drugi wpis jest jeszcze krótszy. Zachowaj sufit i usuń obsadę.
freewary
Wątpię, czy przetestowałeś ten skrypt ponad 20 razy. To nie zawsze zawsze zwraca oczekiwany wynik. 1 na 6 to zawiedzie i nie zwróci wyniku. Ta składnia będzie działać: 0 / floor (rand () * 6) = 0
t-clausen.dk
3

JavaScript, 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 bodwołuje się określony , powodując awarię procesu.

zaphod1984
źródło
3

Używając zwykłej metody dzielenia przez zero:

Wersja Perla 5.8

1/(int rand 6)&&print "I survived!"

Wersja Perla 5.10

1/(int rand 6)&&say "I survived!"

W przypadku awarii zostaną wyświetlone:

Illegal division by zero at -e line 1.

Korzystanie z funkcji bless, która jest używana do tworzenia obiektów w perlu.

Wersja Perla 5.8

print (int rand 6?"I survived!":bless me);

Wersja Perla 5.10

say (int rand 6?"I survived!":bless me);

W przypadku awarii zostaną wyświetlone:

Can't bless non-reference value at -e line 1.
xxfelixxx
źródło
3
kilka sugestii: pozbyć się nawiasów, logiki &&i dodatkowej przestrzeni. użyj ~~zamiast, intaby wymusić wartości całkowite. wynik jest taki:1/~~rand 6;print"I survived!"
ardnew
3

GolfScript, 21 znaków

,6rand/;'I survived!'

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:

5,6rand=+;'I survived!'

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ć nilwartość 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.)

Ilmari Karonen
źródło
To zdecydowanie wydaje się błędem. 5,5>pozostawia []na stosie, co prawdopodobnie należy zrobić, ale 4,5>pozostawia nil. Jeśli go nie usuniesz, interpreter ulegnie awarii podczas próby jego wydrukowania. Ciekawym efektem ubocznym jest to, że 4,6rand>+;'I survived!'staje się ważnym rozwiązaniem. Ktoś powinien prawdopodobnie poinformować Flagitiousa.
primo,
1
Zgłosiłem to i zostało to naprawione (wraz z innym błędem, na który natknąłem się) w najnowszej wersji interpretera GolfScript.
Ilmari Karonen,
3

Python, 70 znaków

Z inspiracją z odpowiedzi grc.

from random import*
if randrange(5)<1:exec'()'*9**5
print'I survived!'

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.

Joshua Sleeper
źródło
3

PHP - 30 bajtów

<?rand(0,5)?:~[]?>I survived!

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 .

Leigh
źródło
Dzielenie przez zero nie zatrzymuje się, generuje tylko ostrzeżenie, a także tekst „Przeżyłem!”. Również rand()%6nie jest jednolity rozkład, jak 32768 = 2 (mod 6). Jednak rand(0,5)||~$adla 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+).
primo,
@primo Zgaduję, że szukałem śladu stosu tylko podczas sprawdzania podziału przez zero jeden, nie zauważyłem, że nadal jest drukowany. Wiem, że jest skrótem trójargumentowy 5.3+, ale ja naprawdę nie mają żadnego interesu we wspieraniu długo z aktualnych wersji :)
Leigh
Z czym się zgadzam. W tym momencie nie ma uzasadnionego argumentu za dalszym używaniem mniejszym niż 5,3. 5.4, ​​wciąż czekam na dwucyfrowy numer wersji.
primo,
1
Liczę 29 bajtów.
Tytus
3

Befunge, 38

v>25*"!devivrus I",,,,,,,,,,,@
?^
v
?^
<1

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.

Joe K
źródło
Uważam, że to rekord w przypadku kolejnych przecinków, jakie kiedykolwiek widziałem w programie.
Joe Z.
A potem patrzę w górę, jak faktycznie działa Befunge i dotykam dłonią twarzy.
Joe Z.
2

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

set/a1/(%RANDOM% %% 6)&&echo I Survived!

W przypadku awarii zostanie wydrukowany

Błąd dzielenia przez zero.

SeanC
źródło
2

R, 50 44 42 36

ifelse(!is.na(sample(c(NA,1:5),1)),'I Survived!',)

ifelse(floor(runif(1,0,5))>0,'I Survived!',)

ifelse(floor(runif(1,0,5)),'I Survived!',)

ifelse(sample(0:5,1),'I Survived!',)

Wiadomość o błędzie śmierci:

Błąd w ifelse (! Is.na (1 / sample (c (NA, 1: 5), 1)), „I Survived!”,): Brak argumentu „no”, brak wartości domyślnej

swobodny
źródło
Próbowałem R, ale nie udało mi się, aby zawiódł - if(1/0)"I Survived!"wciąż drukowany Przeżyłem
SeanC
W przeciwieństwie do innych języków, R nie uważa 1/0 za błąd matematyczny i nie przerywa wykonywania, po prostu zwraca inf dla 1/0. Myślę, że @vsz chce zepsutego błędu w tej rundzie. Ale przypuśćmy, że vsz uznał NA za błąd śmierci, mogłem sprowadzić mój program do 41 znaków: ifelse (próbka (c (NA, 1: 5), 1), „I Survived”,)
Freewary
2

Emacs-Lisp, 42 znaki

(if (= (random 6) 5) 
    z (message "I survived!")
    )
dualność
źródło
2

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:

alert(6*Math.random()|0?"I survived!":f)

Nie takie krótkie, choć zabawne :)

Tomsmeding
źródło
2

PowerShell, 40 znaków

IF(6/(Get-Random -Max 6)){'I Survived!'}

W przypadku niepowodzenia: „Próbowano podzielić przez zero”.

DBADon
źródło
Witamy w PPCG!
Laikoni
1
32 bajty
mazzy
31 bajtów
Veskah
2

TI-BASIC (TI-84 + / SE), 36 bajtów

startTmr→rand:1/(1<randInt(1,6:"I survived!

Brak danych wejściowych, jak określa wyzwanie.
Wyjście jest I survived!pomyślne, w DIVIDE BY 0przeciwnym razie błąd.

Ekran DIVIDE BY 0błędu wygląda następująco:

ERR:DIVIDE BY 0
1:Quit
2:Goto

Wybranie jednej z opcji (i powrót do ekranu głównego, jeśli 2jest zaznaczone) pojawia się Errorpo wywołaniu programu.

Przykłady:

prgmCDGFE
           Error
prgmCDGFE
I survived!
prgmCDGFE
I survived!
prgmCDGFE
           Error

Wyjaśnienie:

startTmr→rand:1/(1<randInt(1,6:"I survived!   ;full program

startTmr→rand                                 ;store the current time into "rand"
                                              ; this is necessary because "rand" is 0 after
                                              ; factory reset, the default state for TI-BASIC
                                              ; submissions
                   randInt(1,6                ;get a random integer in [1,6]
                 1<                           ;is greater than 1?  1 if true, 0 if false
              1/(                             ;divide 1 by the result
                                              ; throws "DIVIDE BY 0" error if result was
                                              ; false
                               "I survived!   ;leave this string in "Ans"
                                              ;implicitly print "Ans"

Uwagi:

  • TI-BASIC jest językiem tokenizowanym. Liczba bajtów nie jest równa liczbie znaków.

  • Małe litery mają po dwa bajty .

    • Małe litery można włączyć za pomocą tego programu do montażu.
  • startTmrjest poleceniem tylko w kalkulatorach TI-84 + i TI-84 + SE. Wspomniane kalkulatory mają różne systemy operacyjne.

Tau
źródło
2

Python, 53 bajty

Oto krótki 53-bajtowy program spoza zakresu indeksu python:

import time
[0][time.time()%6<1]
print("I survived!")
Alexander Wahlsten
źródło
Witam i witam Pamiętaj, że w zasadach tego wyzwania stwierdza się, że „MOD 6 nie będzie wystarczający”. Chociaż nie znam Pythona, wydaje mi się, że używasz tutaj Modulo.
Shaun Bebbers
1
@ShaunBebbers Cytat brzmi: „Oznacza to, że niezainicjowana zmienna (lub RNG bez nasion) MOD 6 nie będzie wystarczająca”, ale w tym poście napisano, że modulo bieżącego czasu wystarcza na PRNG do gry w golfa
Stephen
Moje nieporozumienie.
Shaun Bebbers
1

Java, 149

public class R{public static void main(String[]s){int[]a={1,1,1,1,1};System.out.println(a[new java.util.Random().nextInt(7)]>0?"I survived!":"");}}

Błąd z błędem „Array poza granicami”. Udało się ogolić kilka znaków przy użyciu anonimowego obiektu losowego (bez importu).

Noah
źródło
1

Groovy, 39

1/new Random().next(6);print"I survived!"

Wybiera losową liczbę od 0 do 5 włącznie. Jeśli 0, zgłasza wyjątek dzielenia przez zero.

Will Lp
źródło
1

Python (56), Haskell (77)

Występuje awaria z błędem indeksu, gdy wygenerowana liczba wynosi 1:

z losowego importu *
drukuj [„Przeżyłem!”] [1 / randint (1,7)]

Rozwiązanie Haskell ma ten sam pomysł:

import System.Random
main = putStrLn. ([„I survival!”] !!). div 1 = << randomRIO (1,6)
Lambda Fairy
źródło
1

Python, 59 55 53, 65 59 56

import os
1/(ord(os.urandom(1))%6)
print"I survived!"

ZeroDivisionErrorprzy ord(os.urandom(1))%6wartości 0

import os
print(["I survived!"]*5)[ord(os.urandom(1))%6]

IndexErrorprzy ord(os.urandom(1))%6ocenie do 5

Raufio
źródło
Zapisz 5 znaków, zmieniając import: import random as rnastępnie użyjr.randint
Steven Rumbalski
1
Lub zapisz 8 znaków, zmieniając import na import os, a następnie użyj ord(os.urandom(1))%6jako losowego int.
Steven Rumbalski
Uratuj 1 postać, usuwając spację po print.
Steven Rumbalski
1

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:

?Mid("I Survived!",IIf(Int(6*Rnd),1,0))

To rozwiązuje problem Run-time error '5': Invalid procedurepodczas próby osiągnięcia znaku 0 (VBA jest indeksowaniem opartym na 1).

n="I Survived!":If Int(6*Rnd) Then ?n Else ?-n

To rozwiązuje problem Run-time error '13': Type mismatchprzy zastosowaniu przełącznika ujemnego do łańcucha.

Gaffi
źródło
1

Japt v1.4.5, 16 bajtów

6ö
ªí
`I s¨viv!

Spróbuj

-1 bajt dzięki @Shaggy!

Zgłasza się, TypeError: U.í is not a functiongdy przypadkowa liczba w zakresie [0,6)to 0.

dana
źródło
1
17 bajtów
Kudłaty
Właściwie może być dobrym pomysłem użycie w tym celu wersji 1.4.5, na wypadek gdyby ETH dodał N.í()metodę do wersji 1.4.6.
Kudłaty
Zaktualizowano - Japt stara się nie upaść na dziwne programy. Próbowałem wymyślić sposób odwoływania się do zmiennej, która nie istniała (zdefiniowano AZ), ale nie zastanawiałem się nad wywołaniem metody, która nie istniała.
dana
Tak, 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.
Kudłaty
Dlaczego nie pomyślałem o użyciu trzeciej linii ?! : \
Shaggy