Problema
A partir de n=2
dados:
- Tira los
n
dados, con cada número del 1 al 6 igualmente probable en cada dado. - Compruebe si su suma es igual a la suma más probable para
n
dados, es decir3.5*n
.- Si son iguales, termina.
- De lo contrario, imprima
n
y repita desde el principio conn+2
dados
Su código no tiene que hacer este procedimiento exactamente, pero debería dar una salida aleatoria probabilísticamente equivalente a él, según nuestra definición de aleatoriedad .
Su programa debería generar todos los números en su propia línea; por ejemplo, si el programa obtuvo hasta 8 dados y sacó el número más probable con 8 dados, la salida sería:
2
4
6
Ejecución de ejemplo
En 2 dados, 7
es la suma más probable. Digamos que los números obtenidos fueron 2
y 3
. Entonces, imprimirías 2
.
En 4 dados, 14
es la suma más probable. Digamos que los números rodados eran 3
, 4
, 2
, y 5
. Entonces, la suma es14
, entonces el programa terminaría aquí.
El resultado final en este caso es "2"
.
Reglas
- code-golf, la solución más corta en bytes gana
- Se aplican lagunas estándar
- Se aplica la metadefinición de aleatoriedad
- Puede usar funciones y programas
2, 4, 6, 8, ...
tantos dados cada vez hasta que llegue al número más probable para esa iteración?Respuestas:
Python 2 , 70 bytes
Pruébalo en línea!
El truco consiste en calcular la suma mediante
eval
una cadena que se parececon
n
copias de la expresión concatenada. Lasrandrange(6)
salidas de un número aleatorio a partir de[0,1,2,3,4,5]
, que se desplaza hacia abajo por2.5
tener promedio de0
. Cuando la suma si0
, lawhile
condición falla y el ciclo termina.Una alternativa que usaba
map
era 4 bytes más:He encontrado un montón de expresiones de igual longitud para un dado desplazado a cero, pero ninguno más corto
fuente
MATL , 13 bytes
Pruébalo en línea!
Explicación
fuente
Jalea ,
1914 bytes-5 bytes con ayuda de Leaky Nun (pasando del conteo a la recursividad)
Un programa completo que imprime los resultados separados por nuevas líneas (también se imprime un espacio adicional y una nueva línea, y los errores del programa al final).
Pruébalo en línea! - cada vez que se superan los 6 dados, TIO mata esto debido al uso de memoria, pero funciona en principio, también tarda unos 40 segundos en hacerlo.
Aquí está disponible una versión más amigable de 15 bytes que no lleva tanto tiempo o requiere tanta memoria .
¿Cómo?
Recurrentemente tira 2 dados más hasta que la suma de las caras cada una reducida en 3.5 sea cero, imprimiendo el número de dados a medida que avanza, cuando se alcanza el cero intenta usar un carácter de espacio causando un error de tipo.
fuente
n
, está bien, tal vez sea rescatable. Pensé que te referías a las sumas :)TI-BASIC, 28 bytes
Explicación
randInt(1,6,N)
genera una lista de N números aleatorios del 1 al 6mean(randInt(1,6,N)-3.5
obtiene el promedio de los rollos desplazado hacia abajo por 3.5While
continúa hasta que la expresión promedio sea igual a cero (la suma más probable)fuente
R , 49 bytes
sample(6,n,T)
generan
(pseudo) muestras aleatorias del rango1:6
con reemplazo. Restar 3.5 de cada elemento produce un resultado cuyosum
es 0 (falsey) si y solo si es el valor más común.Pruébalo en línea!
Omite las tiradas de dados impares.
fuente
Java 8,
123149113108 bytesO 107 bytes si usamos un
Object null
parámetro no utilizado no lugar.+26 bytes para una corrección de errores, señalado correctamente por @Jules en los comentarios.
-41 bytes gracias al gran pensamiento de @ OliverGrégoire !
Explicación:
Pruébalo aquí
fuente
r
es igual,3.5*n
el programa debe terminar directamente. Pero, si entiendo la función correctamente, se imprimirían
una última vez antes de finalizar.n
en 2. Entonces contenía dos errores (1-12 en lugar de 2-12; y tira dados como 2 -> 2 -> 4 -> 6 -> ..., en lugar de 2 -> 4 -> 6 -> ...). Sin embargo, se estaba imprimiendo correctamente, porque no se habría utilizadoSystem.out.println(n),n+=2
sir
fuera realmente igual a3.5*n
.()->{for(int n=2,s=0,e=7,i;s!=e;n+=2,e+=7){for(i=n,s=n;i-->0;)s+=Math.random()*6;if(s!=e)System.out.println(n);}}
. También, correcto en lo que respecta al comentario de Jules y mi explicación.n
es dados,s
es suma,e
se espera,i
es índice. Finalmente, la suma comienzan
para evitar a+1
,n
veces, ys!=e
se repite porque simplemente no sé cómo evitar ese caso.()->{for(int i=0,s=1,j;s!=i*7;){for(j=s=++i*2;j-->0;)s+=Math.random()*6;if(s!=i*7)System.out.println(i*2);}}
05AB1E ,
2220 bytes-2 Bytes gracias a Emigna
Pruébalo en línea!
Explicación
fuente
O
después.R
puedes eliminar)
ys
.R,
484442 bytesUna mejora de 5 bytes en la respuesta de Giuseppe .
Esto (ab) utiliza el hecho de que
F
es una variable asignada de forma predeterminada a laFALSE
que coacciona0
y que luego puede incrementarse, lo que nos ahorra la necesidad de inicializar una variable de contador.fuente
sample(6)
lugar desample(1:6)
pero tachado 44 sigue siendo 44 .... codegolf.stackexchange.com/a/82343/67312PHP , 75 bytes
Pruébalo en línea!
fuente
5^2/++$i*$d+=rand()%6
Es una condición ligeramente más corta para el bucle. También creo que el ciclo actual sale incorrectamente si el primer "dado" lanzado es un "1" (genera un 0 para la inicial$d
).GolfScript , 41 bytes
Pruébalo en línea!
fuente
Mathematica, 47 bytes
-5 bytes de LLlAMnYP
fuente
05AB1E , 17 bytes
Pruébalo en línea!
Explicación
fuente
Lote, 109 bytes
De manera bastante molesta,
random
es una variable de entorno mágico, por lo que solo se reemplaza con un valor aleatorio durante la expansión del entorno, que normalmente ocurre antes de que comience el ciclo for.call
hace que suceda cada vez a través del ciclo, pero luego debe duplicar los%
signos para evitar que la expansión ocurra antes del ciclo. La diversión comienza porque queremos modular el resultado en 6, lo que requiere un%
signo real , que ahora debe duplicarse dos veces. El resultado es seis consecutivos.%
s .fuente
JavaScript (ES2015),
7578 bytesEmite una cadena de resultados separados por nuevas líneas
Editar: guardó un byte gracias a Shaggy, agregó 4 bytes para iniciar la función a las 2
Explicación
fuente
'\n'
.n=2
, sino que debe especificar el número inicial de dados cuando se llama a la función.php - 89 caracteres
fuente
$r=0;
uso enecho
lugar deprint
$n."
puede escribirse como"$n
y para bucles en lugar de mientras permite hacer algo en el bucle posterior o antes para guardar algunos bytesC (gcc) ,
8480797775807876 bytesPruébalo en línea!
fuente
Haskell
133132 bytesGracias a @Laikoni por las sugerencias en los comentarios a continuación.
fuente
return()
se puede acortarpure()
yputStrLn$show
se puede acortar aprint
.div k 2 then
pueden serdiv k 2then
ydo print k;s(k+2)
sonprint k>>s(k+2)
.Octava 55 bytes
Inspirado por la respuesta de Andrewarchi. Si alguien tiene algunos consejos para acortarlo, son bienvenidos.
fuente
Pyth , 20 bytes
Pruébalo en línea!
fuente
QBIC , 40 bytes
Esto casi literalmente hace lo que pide el desafío; Parece la forma más corta de obtener la distribución correcta.
Explicación
fuente
Rexx (Regina) , 78 bytes
Pruébalo en línea!
fuente
JavaScript (ES6) - 69 caracteres
Explicacion :
y:
fuente
Calc2 0.7,
119118111 bytessin golf:
Podría prescindir de Math.Int () pero desafortunadamente en 0.7 las funciones Random (). Next () tienen un error en el que todos devuelven dobles en lugar de ints. Se ha solucionado, pero solo después de que se publicó esta pregunta. No voy a ganar nada, pero bueno, buena prueba de concepto.
Editar:
Edit2:
eliminó var r y creó un nuevo Random donde es necesario (-4 byte)
cambiado i = 0, d = 0 a i = d = 0 (-2 bytes)
i incrementado después de la verificación (-1 byte)
fuente
Ruby , 52 bytes
Explicación
Pruébalo en línea!
fuente
s=0
en cuenta la parte frontal del bucle y el uso dex.times
. Esto significa que la suma se reinicia cada vez y luegox
se lanzan los dados, que debería ser la distribución correcta. Escribiré una explicación de mi código.Javascript, 87 caracteres
Prueba con en
console.log
lugar dealert
:fuente
lua, 102 bytes
O la versión más legible
Una versión más atractiva para 96 bytes.
Esto funciona más o menos igual que el primero, pero reutiliza los rollos de llamadas anteriores. Debido a esto, puedo eliminar el bucle for. Ambos se prueban en lua 5.2
fuente
Perl 6 , 48 bytes
fuente
PHP, 51 bytes
fuente