Écrivez un programme qui joue à la roulette russe!
Si le programme démarre,
- il devrait y avoir 5 chances sur 6 de se terminer normalement après avoir imprimé "J'ai survécu!"
- il devrait y avoir 1 chance sur 6 que le programme plante. (défaut de segmentation, etc.)
Aucune entrée et aucune autre sortie ne sont autorisées.
Le caractère aléatoire doit être juste: il doit avoir une distribution de probabilité uniforme. Cela signifie qu'une variable non initialisée (ou un RNG sans graine) MOD 6 ne sera pas suffisante.
Si la solution fonctionne avec un seul système d'exploitation / plateforme dédié, vous recevrez une pénalité de 6 octets au score.
Le code le plus court gagne, au plus tard 10 jours après la première réponse valide.
randrange(5)
pourrait être implémenté en tant querandrange(MAX_INT)%6
.Réponses:
05AB1E ,
1312 octets-1 octet grâce à @Emigna .
05AB1E ne devrait pas du tout pouvoir faire d'erreur, mais comme la nouvelle version de 05AB1E a toujours des problèmes par rapport à la version héritée, je peux profiter de cela pour me tromper pour ce défi.
Essayez-le en ligne.
Explication:
Voir cette astuce de la mine de 05AB1E (section Comment utiliser le dictionnaire? ) Pour comprendre pourquoi
“IЖd!
est"I survived!"
.la source
5ÝΩz“IЖd!
devrait marcher mais apparemment1 / 0 = 0
..0
qui envoyait une division par 0 d'erreur à STDERR dans une ancienne version de 05AB1E, je ne sais même pas du tout comment faire une erreur dans l'héritage 05AB1E . Cependant, la nouvelle version comporte encore beaucoup d’erreurs, que j’ai saisies de l’occasion ici. ;).0
, à plus d'une occasion cela a fait dire à quelqu'un "Wat ... Pourquoi est-ce une commande?"PHP 38 octets
Placer un
+
avant une chaîne non numérique sera évalué à0
. Doitrand(0,5)
revenir5
,$s[rand(0,5)]
sera la chaîne vide (car$s
ne fait que cinq caractères), et$$s[rand(0,5)]
sera par la suite une variable non initialisée. Tenter de prendre l'inversion s'arrêtera sur le type d'opérande non pris en charge. Toute autre valeur,0-4
reviendras
, et parce qu'elle$s
est définie, vous survivrez.Remarque: à partir de la version 4.2.0 de php, le générateur de nombres aléatoires est initialisé automatiquement .
la source
R 30
Une fois sur six, il générera une erreur:
Error: object 'Z' not found
la source
Rubis, 24-28
Environ 6 fois, il y a un
ZeroDivisionError
Il existe même une version plus courte avec 24 caractères (Merci à ugoren et histocrat):
Si vous n'acceptez pas
"
la sortie, j'ai besoin de 3 caractères supplémentaires. La première option (puts
) ajoute une nouvelle ligne, la seconde ($><<
) ne fait aucune nouvelle ligne:Il y a une question sur le nombre aléatoire en rubis chez SO . La graine avec
srand
est automatiquement appelée avec la graine de l'heure actuelle si elle n'a pas déjà été appelée. (voir le commentaire des Julians )Primo a eu l'idée d'un bonus supplémentaire pour les solutions qui ne reposent pas sur une division par zéro .
Ma première solution peut être raccourcie (28 caractères) avec un
undefined local variable or method ``a' for main:Object (NameError)
la source
6/rand(6)
.1/rand(6);p "I survived!"
p
et"I survived!"
. À mon avis, cela ne représente que 24 octets.Dyalog APL -
25222120 CharachtersS'imprime en
DOMAIN ERROR
tant qu'erreur, en raison de la division par zéro.La solution de non-division par zéro la plus courte que j'ai pu trouver est de 23 caractères.
Il jette un
INDEX ERROR
Essayez-le ici
Police APL ici
la source
I survived
", mais après avoir impriméDOMAIN ERROR
une fois, il continue d'imprimer uniquement cela. Même si je recharge complètement le site, il ne survivra plus jamais.1÷0
estDOMAIN ERROR
en Dyalog mais en ngn / apl c'est∞
. Le résultat de?6
est 1..6 lorsque⎕IO←1
(par défaut dans Dyalog) et 0..5 lorsque⎕IO←0
(seule option dans ngn / apl). Dans Dyalog, le PRNG peut être ensemencé par réglage⎕RL
. Initialement, il a une valeur par défaut prédéterminée. Si vous définissez⎕RL←0
, le PRNG est réensemencé de façon assez imprévisible par le système d'exploitation. TryAPL est utilise Dyalog et ne supporte la?
fonction .Python, 96
Si
randrange(5)
renvoie 0, alors python se bloquera en raison d'une erreur de segmentation.la source
vba, 27
utilisé dans la fenêtre immédiate.
En cas d'échec, une fenêtre d'erreur indiquant:
apparaît
la source
!
dans le texte.Befunge - 48 caractères
Le seul hasard de Befunge est l'
?
opérateur, qui vous envoie vous diriger dans l'une des quatre directions possibles (1/4
chance). En bloquant une ou deux directions, vous avez1/3
une1/2
chance, et en les combinant, vous avez la1/6
chance de sortir du programme "vivant".Le programme plante en effectuant une division par zéro. Je suppose que c'est l'implémentation qui va se passer (sur Wikipedia, il dit que le programme devrait demander la réponse souhaitée), mais befungee.py sorte de plantages, ou se termine avec colère:
la source
J, 18
Échec
domain error
lors de la tentative de factorisation de 0.la source
?
. Vous pouvez utiliser?.
pour des graines fixes.C,
676562 caractèresrand()%8
ne perd pas l'équité. La division plante pourt=0
, donne vrai pour 1 et 2 (réessayer), donne faux pour 3..7 (survécu).EDIT: La version précédente utilisait une variable temporaire, qui s'est révélée complètement inutile.
2/(rand()%8)
met en œuvre les deux conditions nécessaires.la source
T-SQL
56 4440 + 6Credit Sean Cheshire pour avoir appelé les acteurs inutiles
Message personnel de crédit de Sean Cheshire pour une suggestion de changer le plafond en plancher.
Death Err Msg: Msg 8134, niveau 16, état 1, ligne 3 Diviser par zéro erreur rencontrée.
la source
-1
etceiling
ne sont pas nécessaires.cast
sera tronquéJavascript, 42
(Math.random()*6|0)?alert('i survived!'):b
Le bit ou les planchers le résultat de la multiplication donc une valeur entre 0 et 5 résultats. 0 est implicitement converti en faux, donc dans 5 des 6 cas, l'alerte apparaît dans le 6e cas, un certain
b
est référencé, ce qui bloque le processus.la source
En utilisant la méthode habituelle de division par zéro:
Version Perl 5.8
Version Perl 5.10
En cas d'échec, ceux-ci afficheront:
Utiliser la fonction bless qui est utilisée pour créer des objets en perl.
Version Perl 5.8
Version Perl 5.10
En cas d'échec, ceux-ci afficheront:
la source
&&
et de l'espace supplémentaire. utiliser~~
au lieu deint
pour forcer les valeurs intégrales. le résultat est le suivant:1/~~rand 6;print"I survived!"
GolfScript, 21 caractères
Comme la plupart des réponses, celle-ci a une chance sur six de se bloquer avec une ZeroDivisionError. La solution la plus courte que j'ai pu gérer sans utiliser la division par zéro est de 23 caractères:
qui a 1/6 de chance de s'écraser avec
undefined method `+' for nil:NilClass (NoMethodError)
.(Ps. En développant cela, j'ai trouvé ce qui pourrait être un bogue dans l'interpréteur GolfScript: du code comme
0,1>
semble laisser unenil
valeur sur la pile, ce qui bloquera plus tard le programme si vous essayez de faire quoi que ce soit avec cette valeur, sauf le sauter et le jeter avec;
. Malheureusement, le fait que je besoin d'utiliser la valeur d'une certaine manière à déclencher un moyen de collision que même exploiteuses ce bug ne m'a pas aidé descendre en dessous de 23 caractères.)la source
5,5>
laisse[]
sur la pile, ce qui est probablement ce qu'il devrait faire, mais4,5>
laissenil
. Si vous ne le supprimez pas, l'interpréteur se bloquera réellement lors de la tentative de sortie. Un effet secondaire intéressant est que cela4,6rand>+;'I survived!'
devient une solution valable. Quelqu'un devrait probablement informer Flagitious.Python, 70 caractères
Avec l'inspiration de la réponse de grc.
randrange (5) renvoie une valeur comprise entre 0 et 5.
S'il renvoie un 0, Python se bloque lors de la tentative d'exécution (ute) d'une chaîne de code contenant 9 ^ 5 jeux de parenthèses.
la source
PHP - 30 octets
Nécessite PHP 5.4+ pour la syntaxe de tableau court, idée d'opérateur invalide sans vergogne volée à @primo.
Comme indiqué,
rand()
est automatiquement semé lors de la première utilisation .la source
rand()%6
n'est pas une distribution uniforme, comme32768 = 2 (mod 6)
. Cependant,rand(0,5)||~$a
pour 30 octets est, et fonctionnera en outre avec toutes les versions de PHP (la deuxième expression dans un ternaire est uniquement facultative dans 5.3.0+).Befunge, 38
Assez simple. Le crash se fait en poussant les 1 sur la pile jusqu'à ce qu'elle déborde. J'ai fait quelques tentatives pour couper ces 11 virgules et les remplacer par une boucle plus efficace pour tout imprimer, mais je n'ai pas pu obtenir moins de 11 caractères.
Notez que compter les personnages dans Befunge est un peu délicat ... Par exemple, il n'y a qu'un seul personnage sur la troisième ligne, mais j'en compte un supplémentaire car l'exécution pourrait voyager à travers cet emplacement.
la source
Shell CMD (Win XP ou version ultérieure), 40 +6
Je ne fais que celui-ci parce que DOS n'est pas quelque chose qui devrait même être pensé pour le golf de code, et l'espace blanc est important
En cas d'échec, il s'imprime
la source
R,
50 44 4236Message d'erreur de mort:
la source
if(1/0)"I Survived!"
toujours imprimé I SurvivedEmacs-Lisp, 42 caractères
la source
Javascript, 40 caractères
En Javascript, l'astuce de division par zéro ne fonctionne même pas: elle renvoie simplement Infinity. Par conséquent, référencer une variable non existante:
Pas si court, mais amusant :)
la source
PowerShell, 40 caractères
En cas d'échec: "Tentative de division par zéro."
la source
TI-BASIC (TI-84 + / SE), 36 octets
Il n'y a aucune entrée, comme le défi le précise.
La sortie est
I survived!
réussie,DIVIDE BY 0
sinon une erreur.L'
DIVIDE BY 0
écran d'erreur ressemble à ceci:La sélection de l'une ou l'autre option (et le retour à l'écran d'accueil si
2
sélectionné) afficheError
après l'appel du programme.Exemples:
Explication:
Remarques:
TI-BASIC est un langage tokenisé. Le nombre d'octets n'est pas égal au nombre de caractères.
Les lettres minuscules sont chacune deux octets .
startTmr
est une commande uniquement sur les calculatrices TI-84 + et TI-84 + SE. Ces calculatrices ont différents systèmes d'exploitation.la source
Python, 53 octets
Voici un court programme hors index de 53 octets en python:
la source
Java, 149
Fails with an "Array out of bounds" error. Managed to shave a few characters by using anonymous Random object (no imports).
la source
Groovy, 39
Picks a random number between 0 and 5 inclusive. If 0, throws a divide by zero exception.
la source
Python (56), Haskell (77)
This crashes with an IndexError when the generated number is 1:
The Haskell solution has the same idea:
la source
Python,
59 5553,65 5956ZeroDivisionError
whenord(os.urandom(1))%6
evaluates to 0IndexError
whenord(os.urandom(1))%6
evaluates to 5la source
import random as r
then user.randint
import os
, then useord(os.urandom(1))%6
as your random int.print
.VBA - 39/46
I don't love Sean Cheshire's numeric output (though still a good answer, it technically fails the
No input, and no other outputs are allowed.
from the spec...), plus he uses/0
, so here are my alternatives:This resolves to a
Run-time error '5': Invalid procedure
when trying to reach character 0 (VBA is 1-based indexing).This resolves to a
Run-time error '13': Type mismatch
when applying a negative switch to a string.la source
Japt v1.4.5, 16 bytes
Try it
-1 byte thanks to @Shaggy!
Throws
TypeError: U.í is not a function
when a random number in the range[0,6)
is0
.la source
N.í()
method to v1.4.6.N.í()
is my "go to" for throwing an error (it used to beN.y()
). There are a few other ways of getting an error but they're rarely useful.