26 votos

Cómo sustituir los dados de 8 caras por otros dados

La pregunta exacta es: Necesitas un dado de 8 caras para un juego. Sólo tienes una moneda, dos dados de cuatro caras y uno de 10 caras. ¿Cómo se puede sustituir el dado de 8 caras? No se permite repetir las tiradas.

Me han dicho que hay varias soluciones para esto, yo encontré una, pero mi solución no era una de las esperadas. ¿Qué soluciones se te ocurren?

Mi solución fue:

Tira un dado de 10 caras y 2 de 4 caras, suma el resultado y tira y resta un dado de 2 caras (la moneda) que divides por 2 al final para obtener el resultado (redondea)

2 votos

Hay muchas respuestas posibles. Si la tuya no estaba en la lista corta elaborada por la persona que plantea el problema, eso no significa que tu solución sea incorrecta. Además, el singular de "dado" es "die"; si la persona que hizo la pregunta cometió este error, eso también debería hacerte reflexionar.

0 votos

Tengo la impresión de que mi forma de pensar era tan diferente de lo que el entrevistador esperaba, que supuse que había entendido la pregunta totalmente mal. Además, tanto él como yo no éramos hablantes nativos de inglés, así que ni siquiera pensé en ese error gramatical :)

0 votos

¿Por qué no compartes TU solución y te decimos si tienes razón?

66voto

Riccardo Orlando Puntos 609

No sólo hay que generar números entre el 1 y el 8, sino también asegurarse de que están distribuidos uniformemente.

Su solución no produce resultados uniformemente distribuidos (al menos según MJD, en los comentarios).

Sin embargo, este procedimiento sí lo hace: puedes lanzar un dado de 4 caras para obtener un valor entre 1 y 4, y luego lanzar una moneda: si sale cara, suma 4 al resultado.

Es fácil ver que cada número del 1 al 8 se produce exactamente con un resultado: por ejemplo, un resultado de 3 requiere una tirada de 3 y un lanzamiento de cruz, mientras que un resultado de 5 requiere una tirada de 1 y un lanzamiento de cara.

5 votos

Para obtener puntos extra, puedes simular el lanzamiento de la moneda tirando de nuevo y tomando pares/apuestas.

16 votos

¡@Hurkyl para obtener puntos extra, puedes usar tu 8-die simulado para simular un 4-die, y un lanzamiento de moneda, para luego simular un 8-die diferente!

2 votos

Tira el dado de diez caras para obtener t, y el de cuatro caras para obtener f. Calcula (t+10*f)/5.

47voto

anschauung Puntos 2689

Existen esencialmente tres formas básicas de generar un número a partir de $\{1\dots k\}$ para $k\ne n$ con un $n$ -que preserva la probabilidad uniforme de todos los resultados:

  • Truncamiento: si $k\lt n$ puede simplemente ignorar (volver a tirar) los resultados superiores a $k$
  • División: si $n=mk$ para algún número entero $m$ puede designar $m$ resultados diferentes como dar un resultado $i$ para $1\le i\le k$ (es decir, para simular una $3$ -con un troquel de $6$ -sin duda, se puede designar $\{1,2\}\rightarrow 1$ , $\{3,4\}\rightarrow 2$ y $\{5,6\}\rightarrow 3$ )
  • Exponenciación: si $k=n^m$ para algún número entero $m$ puedes tirar el dado $m$ veces, interpretando los resultados como los dígitos de un $m$ -Número entero de dígitos en base $n$ (e interpretar un resultado de $n$ como $0$ y una cadena de todos los $0$ 's como $k$ ) Ejemplo: dados de percentil

Se puede utilizar cualquier combinación de ellas, por lo que, por ejemplo, se podría simular un $8$ -con un troquel de $6\text{-sided}$ mueren por exponenciación en 2 (simulando un $36$ -de la cara) seguido de la división por 4 (simulando un $9$ -) seguido de un truncamiento a $8$ . Como tienes varios dados para empezar, son posibles más soluciones, pero sólo necesitas un dado. Por ejemplo, puedes simular un $n\text{-sided}$ morir por cualquier $n$ con sólo una moneda utilizando la exponenciación (generando cadenas binarias con cabeza $\rightarrow 1$ y la cola $\rightarrow 0$ ) y el truncamiento (volver a tirar los resultados superiores a $n$ ), y en sentido contrario, se puede simular una moneda con un $n$ -sin duda, un troquel para cualquier $n\ge 2$ por truncamiento a un número par (si $n$ es impar), seguido de la división a $2$ .

Si se tienen varios tamaños de dados, la exponenciación se puede generalizar a la multiplicación (como se utiliza en la respuesta aceptada): si $k=mn$ , y tienes dados de tamaños $m$ y $n$ puede hacer rodar el $n$ -(interpretando un resultado de $n$ como $0$ ) y añadir $n$ veces el resultado de tirar el $m$ -sin duda, un troquel de cara a la interpretación $m$ como $0$ ), e interpretar $0$ como $k$ . En la respuesta aceptada $n=4$ , $m=2$ y $k=8$ pero una solución alternativa sería utilizar $n=2$ y $m=4$ por lo que podría (por ejemplo) hacer rodar el $4$ -sin duda, un troquel de cara a la interpretación $4$ como 0), multiplicar el resultado por $2$ luego agrega $1$ si sale cara, e interpreta un resultado global de $0$ (es decir $[4,\text{tails}]$ ) como $8$ . Es equivalente (y más sencillo) multiplicar el $\text{d}4$ resultado por $2$ y restar $1$ si se lanza la cola.

1 votos

Buena generalización, sin embargo, la pregunta implicaba que no había que volver a tirar. así que la primera y la tercera opción no son aplicables. y no puedes hacer la segunda ya que no hay ningún dado de 16 caras o más que puedas tirar.

1 votos

Es justo, me perdí esa parte. En realidad, se me ocurrieron estas reglas basadas en una vieja pregunta de una entrevista de Google sobre la simulación de un $8$ -de la cara utilizando un $5$ -sufrir un troquel de lado. Estaba bastante contento de que mi solución (exponenciación a $25$ , truncando a $24$ , división a $8$ ) requirió menos tiradas en promedio que la supuesta respuesta "correcta" (truncamiento a $4$ , división a $2$ , la exponenciación a $8$ ), aunque haya generado los tres "bits" por $4 \times 2$ en lugar de $2 \times 2 \times 2$ .

0 votos

Cualquier cosa que requiera una nueva tirada podría potencialmente (aunque sea poco probable) resultar en infinitas tiradas (o una serie finita muy larga) si el número de tirada se repite continuamente.

32voto

Dave Puntos 321

Tira el D10 y si sacas 9 o 10, vuelve a tirar. Es fácil de recordar y de hacer. Y da resultados uniformes.

0 votos

Me temo que no está permitido hacer una tirada de dados.

12 votos

Me gusta este, aunque de vez en cuando puede llegar a casa muy tarde de la noche de juegos.

5 votos

Se trata de una aplicación sencilla del muestreo de rechazo. Como persona de simulación monte-carlo, lo apruebo. es.wikipedia.org/wiki/Muestreo de rechazo

14voto

celtschk Puntos 13058

Estoy asumiendo que todos los dados (contando la moneda como un dado de 2 caras) se tiran en paralelo, y no se permite volver a tirar. Utilizaré la notación estándar D $n$ para un $n$ -su cara (D2 para la moneda).

Como tenemos que simular un D8, que es una potencia de 2, necesitamos multiplicar distribuciones uniformes con potencias de 2; podemos considerarlas como bits aleatorios.

  • El D2 entrega un bit aleatorio.

  • Cada D4 entrega dos bits aleatorios.

  • El D10 entrega sólo un bit aleatorio, ya que 2 es la mayor potencia de 2 que divide a 10. Dado que no se permiten las repeticiones de tirada, el factor 5 es inútil para generar distribuciones uniformes para potencias de 2.

Así que tenemos 6 bits en total, de los cuales podemos seleccionar 3 arbitrarios para generar una sola tirada de D8.

Por ejemplo, puedes utilizar un D4 (2 bits) y el D2 (1 bit) para obtener 3 bits (esta es la solución que dieron otras respuestas).

También se pueden tomar los dos D4, y utilizar sólo un bit para uno de ellos, por ejemplo sumando 4 al resultado del segundo D4 si el primer D4 da un resultado impar.

O podría seleccionar 3 dados arbitrarios, y tomar su valor de bits como 0 si el resultado de la tirada es par y 1 si el resultado es impar, y luego a partir de los tres bits formar $4a+2b+c+1$ donde $a$ , $b$ y $c$ son los bits derivados de los tres dados.

De hecho, ¡podrías utilizar los cuatro dados dados para simular que lanzas dos D8 en paralelo!

3voto

barak manos Puntos 17078

Denotemos lo siguiente:

  • $a$ : el valor de la $10$ -sided die , i.e, $a\in[1,10]$
  • $b$ el valor de la 1a. $4$ -su cara, es decir, $b\in[1,4]$
  • $c$ el valor de la 2a. $4$ -su cara, es decir, $c\in[1,4]$
  • $d$ : el valor de la $2$ -una moneda de dos caras, es decir, $d\in[1,2]$

Entonces el valor del $8$ -en función de las variables anteriores es:

$$f(a,b,c,d)=[32(a-1)+8(b-1)+2(c-1)+(d-1)]\bmod8+1$$


Aquí hay un breve script que confirma la distribución uniforme:

dict = {1:0,2:0,3:0,4:0,5:0,6:0,7:0,8:0}

for a in range(1,10+1):
    for b in range(1,4+1):
        for c in range(1,4+1):
            for d in range(1,2+1):
                dict[(32*(a-1)+8*(b-1)+2*(c-1)+(d-1))%8+1] += 1

print dict

La salida es {1: 40, 2: 40, 3: 40, 4: 40, 5: 40, 6: 40, 7: 40, 8: 40} .

1 votos

Pero a y b no tienen ningún efecto en su ecuación, ya que 32 mod 8 = 0 y 8 mod 8 = 0.

2 votos

Por supuesto $32(a-1)\equiv 0 \pmod{8}$ y $8(b-1)\equiv 0 \pmod{8}$ Así que tus dos primeros términos no son más que una forma elaborada de escribir $0$ . Además, para todos los valores posibles de $c$ y $d$ tenemos $2(c-1)+(d-1)<8$ Por lo tanto, después de eliminar los dos primeros términos, el $\mod 8$ también se vuelve superfluo, por lo que la fórmula se simplifica a $2(c-1)+d$ .

0 votos

@Justin: Tienes razón, el $8$ -puede simularse utilizando $c$ y $d$ sólo (es decir, uno de los $4$ -de un dado y la moneda).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X