Escreva um programa que jogue roleta russa!
Se o programa for iniciado,
- deve haver uma chance de 5 em 6 de terminar normalmente após a impressão "Eu sobrevivi!"
- deve haver uma chance de 1 em 6 do programa travar. (falha de segmentação etc.)
Nenhuma entrada e nenhuma outra saída é permitida.
A aleatoriedade deve ser justa: deve ter uma distribuição de probabilidade uniforme. Isso significa que uma variável não inicializada (ou um RNG sem semente) MOD 6 não será suficiente.
Se a solução funcionar com apenas um sistema operacional / plataforma dedicado, você receberá uma penalidade de 6 bytes na pontuação.
O código mais curto vence, não antes de 10 dias após a primeira resposta válida.
randrange(5)
pode ser implementado comorandrange(MAX_INT)%6
.Respostas:
05AB1E ,
1312 bytes-1 byte graças a @Emigna .
O 05AB1E, na verdade, não deve ser capaz de errar, mas como a nova versão do 05AB1E ainda tem alguns problemas em comparação com a versão herdada, posso aproveitar isso para tirar proveito desse erro.
Experimente online.
Explicação:
Veja esta dica 05AB1E meu (seção Como usar o dicionário? ) Para entender por que
“IЖd!
é"I survived!"
.fonte
5ÝΩz“IЖd!
deve funcionar, mas aparentemente1 / 0 = 0
..0
que costumava lançar uma divisão por 0 erro para STDERR em uma versão antiga do 05AB1E, eu nem sei como errar no legado 05AB1E . A nova versão ainda apresenta muitos erros, que eu aproveitei aqui. ;).0
, em mais de uma ocasião ele fez alguém dizer "Wat ... Por que isso é um comando?"PHP 38 bytes
A colocação de um
+
antes de uma sequência não numérica será avaliada como0
. Deverand(0,5)
retornar5
,$s[rand(0,5)]
será a cadeia vazia (já que$s
possui apenas cinco caracteres) e, posteriormente$$s[rand(0,5)]
, será uma variável não inicializada. A tentativa de inversão será interrompida no tipo de operando não suportado. Qualquer outro valor0-4
retornarás
e, como$s
é definido, você sobreviverá.Nota: a partir da versão 4.2.0 do php, o gerador de números aleatórios é propagado automaticamente .
fonte
R 30
Uma vez em cada seis, lançará um erro:
Error: object 'Z' not found
fonte
Ruby, 24-28
Aproximadamente a cada 6 vezes, há uma
ZeroDivisionError
Existe ainda uma versão mais curta, com 24 caracteres (Graças a ugoren e histocrat):
Se você não aceitar a
"
saída, preciso de mais 3 caracteres. A primeira opção (puts
) adiciona uma nova linha, a segunda ($><<
) não cria uma nova linha:Há uma pergunta sobre número aleatório em ruby no SO . A semente com
srand
é automaticamente chamada com a semente do momento atual, se ainda não foi chamada. (veja o comentário de Julians )Primo teve a idéia de um bônus extra para as soluções que não dependem da divisão por zero .
Minha primeira solução pode ser reduzida (28 caracteres) com um
undefined local variable or method ``a' for main:Object (NameError)
fonte
6/rand(6)
.1/rand(6);p "I survived!"
p
e"I survived!"
. Pela minha conta, são apenas 24 bytes.Dyalog APL -
25222120 CaracteresImprime
DOMAIN ERROR
como o erro, devido à divisão por zero.A menor solução sem divisão por zero que eu pude apresentar é de 23 caracteres.
Lança um
INDEX ERROR
Experimente aqui
Fonte APL aqui
fonte
I survived
", mas após a impressãoDOMAIN ERROR
uma vez, continua imprimindo apenas isso. Mesmo se eu recarregar o site completamente, ele nunca mais sobreviverá.1÷0
é umDOMAIN ERROR
em Dyalog, mas em ngn / apl é∞
. O resultado?6
é 1..6 quando⎕IO←1
(padrão no Dyalog) e 0..5 quando⎕IO←0
(somente opção em ngn / apl). No Dyalog, o PRNG pode ser semeado por configuração⎕RL
. Inicialmente, ele possui algum valor padrão predeterminado. Se você definir⎕RL←0
, o PRNG será reinicializado de forma bastante imprevisível pelo sistema operacional. O TryAPL está usando o Dyalog e suporta a?
função .Python, 96
Se
randrange(5)
retornar 0, o python travará devido a uma falha de segmentação.fonte
vba, 27
usado na janela imediata.
Na falha, uma janela de erro informando:
aparece
fonte
!
no texto.Befunge - 48 caracteres
A única aleatoriedade de Befunge é o
?
operador, que o envia em uma das quatro direções possíveis (1/4
chance). Ao bloquear uma ou duas direções, você tem1/3
ou1/2
chance e, combinando-as, terá a1/6
chance de sair do programa "vivo".O programa falha ao fazer uma divisão por zero. Eu acho que é específico da implementação o que vai acontecer (na Wikipedia, ele diz que o programa deve pedir a resposta desejada), mas o befungee.py meio que falha ou sai com raiva:
fonte
J, 18
Falha
domain error
ao tentar fatorar 0.fonte
?
. Você pode usar?.
para semente fixa.C,
676562 caracteresrand()%8
não perde a justiça. A divisão falha parat=0
, dá verdadeiro para 1 e 2 (nova tentativa), dá falso para 3..7 (sobrevivido).EDIT: A versão anterior usava uma variável temporária, que acabou completamente desnecessária.
2/(rand()%8)
implementa as duas condições necessárias.fonte
T-SQL
56 4440 + 6Crédito a Sean Cheshire por chamar o elenco de desnecessário
Dê crédito a uma mensagem pessoal de Sean Cheshire pela sugestão de mudar o teto para o chão.
Death Err Msg: Msg 8134, Nível 16, Estado 1, Linha 3 Divida pelo erro zero encontrado.
fonte
-1
eceiling
não são necessários.cast
será truncadoJavascript, 42
(Math.random()*6|0)?alert('i survived!'):b
O bit a bit ou calcula o resultado da multiplicação, resultando em um valor entre 0 e 5. 0 é implicitamente convertido em falso; portanto, em 5 de 6 casos, o alerta aparece no 6º caso em que um certo
b
é referenciado, travando o processo.fonte
Usando o método habitual de divisão por zero:
Versão Perl 5.8
Versão Perl 5.10
Na falha, estes serão exibidos:
Usando a função bless, usada para criar objetos em perl.
Versão Perl 5.8
Versão Perl 5.10
Na falha, estes serão exibidos:
fonte
&&
e do espaço extra. use em~~
vez deint
para forçar valores integrais. O resultado é este:1/~~rand 6;print"I survived!"
GolfScript, 21 caracteres
Como a maioria das respostas, essa tem uma chance em seis de travar com um ZeroDivisionError. A solução mais curta que eu poderia gerenciar sem usar a divisão por zero é 23 caracteres:
que tem 1/6 de chance de falhar
undefined method `+' for nil:NilClass (NoMethodError)
.(Obs. Ao desenvolver isso, descobri o que poderia ser um erro no intérprete GolfScript: o código like
0,1>
parece deixar umnil
valor na pilha, que travará o programa mais tarde se você tentar fazer algo com esse valor, exceto desativá-lo e jogá-lo fora com;
. Infelizmente, o fato de que eu preciso para usar o valor de alguma forma para acionar meios de acidente que mesmo exploram esse bug não me ajudar a ficar abaixo de 23 caracteres.)fonte
5,5>
deixa[]
na pilha, o que provavelmente é o que deve fazer, mas4,5>
deixanil
. Se você não removê-lo, o intérprete travará ao tentar produzi-lo. Um efeito colateral interessante é que4,6rand>+;'I survived!'
se torna uma solução válida. Alguém provavelmente deve informar Flagitious.Python, 70 caracteres
Com inspiração na resposta do grc.
randrange (5) retorna um valor entre 0 e 5.
Se retornar 0, o Python trava ao tentar executar (ute) uma sequência de códigos que contém 9 ^ 5 conjuntos de parênteses.
fonte
PHP - 30 bytes
Requer PHP 5.4+ para a sintaxe de matriz curta, ideia de operador inválida roubada descaradamente do @primo.
Como afirmado,
rand()
é automaticamente propagado no primeiro uso .fonte
rand()%6
não é uma distribuição uniforme, como32768 = 2 (mod 6)
. No entanto,rand(0,5)||~$a
para 30 bytes é e, adicionalmente, funcionará com todas as versões do PHP (a segunda expressão em um ternário é apenas opcional no 5.3.0+).Befunge, 38
Bem direto. O travamento é feito pressionando 1s na pilha até ela transbordar. Fiz algumas tentativas de cortar essas 11 vírgulas e substituí-las por um loop mais eficiente para imprimir tudo, mas não consegui obtê-lo com menos de 11 caracteres.
Observe que a contagem de caracteres no Befunge é um pouco complicada ... Por exemplo, há apenas um caractere na terceira linha, mas estou contando um extra lá, já que a execução pode percorrer esse local.
fonte
Shell CMD (Win XP ou posterior), 40 +6
Só estou fazendo isso porque o DOS não é algo que deva ser pensado para o código de golfe, e o espaço em branco é importante
Na falha, ele será impresso
fonte
R,
50 44 4236Mensagem de erro de morte:
fonte
if(1/0)"I Survived!"
ainda impresso I Survived #Emacs-Lisp, 42 caracteres
fonte
Javascript, 40 caracteres
Em Javascript, o truque da divisão por zero nem funciona: ele retorna o Infinity. Portanto, referenciando uma variável inexistente:
Não é tão curto, embora divertido :)
fonte
PowerShell, 40 caracteres
Em falha: "Tentativa de dividir por zero".
fonte
TI-BASIC (TI-84 + / SE), 36 bytes
Não há entrada, como o desafio especifica.
A saída é
I survived!
bem-sucedida, umDIVIDE BY 0
caso contrário erro.A
DIVIDE BY 0
tela de erro é semelhante à seguinte:Selecionar uma das opções (e retornar à tela inicial, se
2
estiver selecionada) é exibidaError
após a chamada do programa.Exemplos:
Explicação:
Notas:
TI-BASIC é uma linguagem tokenizada. A contagem de bytes não é igual à contagem de caracteres.
Letras minúsculas são dois bytes cada.
startTmr
é um comando apenas nas calculadoras TI-84 + e TI-84 + SE. As referidas calculadoras possuem diferentes sistemas operacionais.fonte
Python, 53 bytes
Aqui está um pequeno programa fora do intervalo do índice python de 53 bytes:
fonte
Java, 149
Falha com o erro "Matriz fora dos limites". Conseguiu barbear alguns caracteres usando o objeto Random anônimo (sem importações).
fonte
Groovy, 39
Seleciona um número aleatório entre 0 e 5, inclusive. Se 0, lança uma exceção de divisão por zero.
fonte
Python (56), Haskell (77)
Isso trava com um IndexError quando o número gerado é 1:
A solução Haskell tem a mesma idéia:
fonte
Python,
59 5553,65 5956ZeroDivisionError
quandoord(os.urandom(1))%6
avalia para 0IndexError
quandoord(os.urandom(1))%6
avalia para 5fonte
import random as r
uso, em seguida,r.randint
import os
, e useord(os.urandom(1))%6
como int aleatório.print
.VBA - 39/46
Eu não amo a saída numérica de Sean Cheshire (embora ainda seja uma boa resposta, tecnicamente falha
No input, and no other outputs are allowed.
nas especificações ...), mais ele usa/0
, então aqui estão minhas alternativas:Isso é resolvido ao
Run-time error '5': Invalid procedure
tentar alcançar o caractere 0 (o VBA é uma indexação baseada em 1).Isso é resolvido
Run-time error '13': Type mismatch
quando aplica uma opção negativa a uma sequência.fonte
Japt v1.4.5, 16 bytes
Tente
-1 byte graças a @Shaggy!
Lança
TypeError: U.í is not a function
quando um número aleatório no intervalo[0,6)
é0
.fonte
N.í()
método à v1.4.6.N.í()
é o meu "ir para" por lançar um erro (costumava serN.y()
). Existem algumas outras maneiras de obter um erro, mas raramente são úteis.