¡Escribe un programa que juegue a la ruleta rusa!
Si se inicia el programa,
- debería haber una probabilidad de 5 en 6 de que termine normalmente después de imprimir "¡Sobreviví!"
- debería haber una probabilidad de 1 en 6 de que el programa se bloquee. (falla de segmentación, etc.)
No hay entrada y no se permiten otras salidas.
La aleatoriedad debe ser justa: debe tener una distribución de probabilidad uniforme. Esto significa que una variable no inicializada (o un RNG sin semilla) MOD 6 no será suficiente.
Si la solución funciona con un solo sistema operativo / plataforma dedicado, recibirá una penalización de 6 bytes por puntaje.
El código más corto gana, no antes de 10 días después de la primera respuesta válida.
randrange(5)
podría implementarse comorandrange(MAX_INT)%6
.Respuestas:
05AB1E ,
1312 bytes-1 byte gracias a @Emigna .
05AB1E en realidad no debería ser capaz de error en absoluto, pero dado que la nueva versión de 05AB1E todavía tiene algunos problemas en comparación con la versión heredada, puedo aprovechar eso para equivocarme en este desafío.
Pruébalo en línea.
Explicación:
Ver este consejo 05AB1E mío (sección Cómo usar el diccionario? ) Para entender por qué
“IЖd!
es"I survived!"
.fuente
5ÝΩz“IЖd!
debería funcionar, pero aparentemente1 / 0 = 0
..0
que solía lanzar un error de división por 0 a STDERR en una versión anterior de 05AB1E, ni siquiera sé cómo cometer errores en el legado 05AB1E . Sin embargo, la nueva versión todavía tiene muchos errores, lo que aproveché para mi oportunidad aquí. ;).0
, en más de una ocasión hizo que alguien dijera "Wat ... ¿Por qué es eso una orden?"PHP 38 bytes
Colocando
+
antes de una cadena no numérica se evaluará a0
. Deberíarand(0,5)
volver5
,$s[rand(0,5)]
será la cadena vacía (ya que$s
tiene solo cinco caracteres de longitud), y posteriormente$$s[rand(0,5)]
será una variable no inicializada. Intentar realizar la inversión se detendrá en Tipo de operando no compatible. Cualquier otro valor0-4
volverás
y, como$s
está definido, sobrevivirá.Nota: a partir de la versión 4.2.0 de php, el generador de números aleatorios se siembra automáticamente .
fuente
R 30
Una vez de cada seis, arrojará un error:
Error: object 'Z' not found
fuente
Rubí, 24-28
Aproximadamente cada 6 veces, hay un
ZeroDivisionError
Incluso hay una versión más corta con 24 caracteres (Gracias a ugoren e histocrat):
Si no acepta el
"
en la salida, entonces necesito 3 caracteres más. La primera opción (puts
) agrega una nueva línea, la segunda ($><<
) no hace nueva línea:Hay una pregunta sobre el número aleatorio en rubí en SO . La semilla con
srand
se llama automáticamente con la semilla desde la hora actual si aún no se ha llamado. (ver comentario de Julians )Primo tuvo la idea de un bono extra para aquellas soluciones que no dependen de la división por cero .
Mi primera solución puede acortarse (28 caracteres) con un
undefined local variable or method ``a' for main:Object (NameError)
fuente
6/rand(6)
.1/rand(6);p "I survived!"
p
y"I survived!"
. Según mi cuenta, son solo 24 bytes.Dyalog APL -
25222120 CharachtersImprime
DOMAIN ERROR
como el error, debido a la división por cero.La solución de no división por cero más corta que se me ocurrió es de 23 caracteres.
Arroja un
INDEX ERROR
Pruébalo aquí
APL Font aquí
fuente
I survived
", pero después de imprimirDOMAIN ERROR
una vez, sigue imprimiendo solo eso. Incluso si vuelvo a cargar el sitio por completo, nunca volverá a sobrevivir.1÷0
es unDOMAIN ERROR
en Dyalog pero en ngn / apl lo es∞
. El resultado de?6
es 1..6 cuando⎕IO←1
(predeterminado en Dyalog) y 0..5 cuando⎕IO←0
(única opción en ngn / apl). En Dyalog, el PRNG se puede sembrar configurando⎕RL
. Inicialmente tiene un valor predeterminado predeterminado. Si configura⎕RL←0
, el sistema operativo vuelve a sembrar PRNG de forma bastante impredecible. TryAPL está usando Dyalog y admite la?
función .Python, 96
Si
randrange(5)
devuelve 0, Python se bloqueará debido a un error de segmentación.fuente
vba, 27
utilizado en ventana inmediata.
En caso de fallo,
aparece una ventana de error que indica:
fuente
!
en el texto.Befunge - 48 caracteres
La única aleatoriedad de Befunge es el
?
operador, que te envía en una de las cuatro direcciones posibles (1/4
posibilidad). Al bloquear una o dos direcciones, usted tiene1/3
o1/2
casualidad, y mediante la combinación de éstos, se obtiene1/6
la oportunidad de salir del programa "vivo".El programa se bloquea al hacer una división por cero. Supongo que es específico de la implementación lo que sucederá (en Wikipedia dice que el programa debería pedir la respuesta deseada), pero befungee.py se bloquea o sale enojado:
fuente
J, 18
Fallando con
domain error
al tratar de factorizar 0.fuente
?
. Se puede usar?.
para semilla fija.C,
676562 caracteresrand()%8
No pierde la justicia. La división se bloquea parat=0
, da verdadero para 1 y 2 (reintento), da falso para 3..7 (sobrevivido).EDITAR: La versión anterior utilizaba una variable temporal, que terminó siendo completamente innecesaria.
2/(rand()%8)
implementa ambas condiciones necesarias.fuente
T-SQL
56 4440 + 6Crédito Sean Cheshire por llamar al elenco como innecesario
Acredite el mensaje personal de Sean Cheshire por la sugerencia de cambiar el techo al piso.
Mensaje de error de muerte: Mensaje 8134, Nivel 16, Estado 1, Línea 3 Divide por cero error encontrado.
fuente
-1
yceiling
no son necesarioscast
se truncaráJavascript, 42
(Math.random()*6|0)?alert('i survived!'):b
El bit a bit o pisos el resultado de la multiplicación, por lo tanto, un valor entre 0 y 5 resultados. 0 se convierte implícitamente en falso, por lo que en 5 de 6 casos la alerta aparece en el sexto caso un cierto
b
se hace referencia a , lo que bloquea el proceso.fuente
Usando el método habitual de dividir por cero:
Perl 5.8 Versión
Versión Perl 5.10
En caso de falla, estos mostrarán:
Usando la función de bendición que se usa para crear objetos en perl.
Perl 5.8 Versión
Versión Perl 5.10
En caso de falla, estos mostrarán:
fuente
&&
y el espacio extra use en~~
lugar deint
forzar valores integrales. el resultado es el siguiente:1/~~rand 6;print"I survived!"
GolfScript, 21 caracteres
Como la mayoría de las respuestas, esta tiene una posibilidad entre seis de estrellarse con ZeroDivisionError. La solución más corta que podría administrar sin usar la división por cero es 23 caracteres:
que tiene una probabilidad de 1/6 de chocar con
undefined method `+' for nil:NilClass (NoMethodError)
.(Ps. Mientras desarrollaba esto, encontré lo que podría ser un error en el intérprete de GolfScript: el código
0,1>
parece dejar unnil
valor en la pila, que luego bloqueará el programa si intenta hacer algo con ese valor, excepto abrirlo y deséchelo;
. Desafortunadamente, el hecho de que necesito usar el valor de alguna manera para provocar un bloqueo significa que incluso explotar este error no me ayudó a obtener menos de 23 caracteres).fuente
5,5>
deja[]
en la pila, que es probablemente lo que debería hacer, pero se4,5>
vanil
. Si no lo elimina, el intérprete se bloqueará al intentar generarlo. Un efecto secundario interesante es que se4,6rand>+;'I survived!'
convierte en una solución válida. Alguien probablemente debería informar a Flagitious.Python, 70 caracteres
Con inspiración de la respuesta de grc.
randrange (5) devuelve un valor entre 0 y 5.
Si devuelve un 0, Python se bloquea al intentar ejecutar (utear ) una cadena de código que contiene 9 ^ 5 conjuntos de paréntesis.
fuente
PHP - 30 bytes
Requiere PHP 5.4+ para la sintaxis de matriz corta, idea de operador inválida robada descaradamente de @primo.
Como se indicó,
rand()
se siembra automáticamente en el primer uso .fuente
rand()%6
no es una distribución uniforme, como32768 = 2 (mod 6)
. Sin embargo,rand(0,5)||~$a
para 30 bytes es, y además funcionará con todas las versiones de PHP (la segunda expresión en un ternario solo es opcional en 5.3.0+).Befunge, 38
Muy claro. El bloqueo se realiza presionando 1s en la pila hasta que se desborde. Hice algunos intentos de recortar esas 11 comas y reemplazarlas con un bucle más eficiente para imprimir todo, pero no pude obtener menos de 11 caracteres.
Tenga en cuenta que contar personajes en Befunge es un poco complicado ... Por ejemplo, solo hay un personaje en la tercera línea, pero estoy contando uno adicional allí ya que la ejecución podría viajar a través de esa ubicación.
fuente
CMD Shell (Win XP o posterior), 40 +6
Solo estoy haciendo esto porque DOS no es algo que deba pensarse para el golf de código, y el espacio en blanco es importante
En caso de falla, imprimirá
fuente
R,
50 44 4236Mensaje de error de muerte:
fuente
if(1/0)"I Survived!"
todavía impreso I SurvivedEmacs-Lisp, 42 caracteres
fuente
Javascript, 40 caracteres
En Javascript, el truco de dividir por cero ni siquiera funciona: solo devuelve Infinity. Por lo tanto, haciendo referencia a una variable no existente:
No tan corto, aunque divertido :)
fuente
PowerShell, 40 caracteres
En caso de falla: "Intentó dividir por cero".
fuente
TI-BASIC (TI-84 + / SE), 36 bytes
No hay entrada, como especifica el desafío.
La salida es
I survived!
si tiene éxito, unDIVIDE BY 0
error de lo contrario.La
DIVIDE BY 0
pantalla de error tiene el siguiente aspecto:Seleccionando cualquiera de las opciones (y volviendo a la pantalla de inicio si
2
está seleccionado) se muestraError
después de la llamada del programa.Ejemplos:
Explicación:
Notas:
TI-BASIC es un lenguaje tokenizado. El recuento de bytes no es igual al recuento de caracteres.
Las letras minúsculas son de dos bytes cada una.
startTmr
es un comando solo en las calculadoras TI-84 + y TI-84 + SE. Dichas calculadoras tienen diferentes sistemas operativos.fuente
Python, 53 bytes
Aquí hay un breve programa de índice fuera de rango de 53 bytes de Python:
fuente
Java, 149
Falla con el error "Array fuera de límites". Se las arregló para afeitar algunos caracteres mediante el uso de objetos aleatorios anónimos (sin importaciones)
fuente
Groovy, 39
Selecciona un número aleatorio entre 0 y 5 inclusive. Si es 0, lanza una excepción dividir por cero.
fuente
Pitón (56), Haskell (77)
Esto se bloquea con un IndexError cuando el número generado es 1:
La solución de Haskell tiene la misma idea:
fuente
Python,
59 5553,65 5956ZeroDivisionError
cuando seord(os.urandom(1))%6
evalúa a 0IndexError
cuando seord(os.urandom(1))%6
evalúa a 5fuente
import random as r
luego user.randint
import os
, luego useord(os.urandom(1))%6
como su int aleatorio.print
.VBA - 39/46
No me encanta la salida numérica de Sean Cheshire (aunque sigue siendo una buena respuesta, técnicamente falla
No input, and no other outputs are allowed.
la especificación ...), además de que la usa/0
, así que aquí están mis alternativas:Esto se resuelve a
Run-time error '5': Invalid procedure
cuando se intenta alcanzar el carácter 0 (VBA es indexación basada en 1).Esto se resuelve en a
Run-time error '13': Type mismatch
cuando se aplica un interruptor negativo a una cadena.fuente
Japt v1.4.5, 16 bytes
Intentalo
-1 byte gracias a @Shaggy!
Emite
TypeError: U.í is not a function
cuando un número aleatorio en el rango[0,6)
es0
.fuente
N.í()
método a v1.4.6.N.í()
es mi "ir a" por arrojar un error (solía serN.y()
). Hay algunas otras formas de obtener un error, pero rara vez son útiles.