Aquellos de ustedes que gustan de Numberphile estarían familiarizados con el Dr. James Grime, quien describió un juego de dados no transitivo en su canal .
El juego consta de tres dados de 6 caras:
- Muere 1: 3,3,3,3,3,6
- Muere 2: 2,2,2,5,5,5
- Muere 3: 1,4,4,4,4,4
Dos jugadores seleccionan cada uno un dado para usar. Los tiran y el dado más alto gana, lo mejor de lo que sea.
Probablemente, el dado 1 vence al dado 2 con> 50% de probabilidad. Del mismo modo, muere 2 latidos muere 3, y, curiosamente, muere 3 latidos muere 1.
Escribir un programa tomando 1
, 2
o 3
como entrada. Esto indica el dado que elige el usuario. Luego, el programa elige el dado que vencería al usuario y generaría los resultados de 21 tiradas, y " Computer/User wins with x points
"
Reglas
- Code-golf, vota como desempate
- Debes usar RNG (o similares) para simular realmente las tiradas de dados.
- No soy demasiado estricto con el formato de salida. Está bien siempre y cuando muestres los dados, de alguna manera se separen entre las 21 tiradas (de una manera diferente de cómo se separan los dados en la misma tirada), y diga la oración anterior.
- La entrada puede ser stdin, argumento de línea de comando, desde la pantalla, etc.
Ejemplo
Entrada
1
Salida
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 3
4 6
1 3
4 3
4 3
1 3
4 3
1 3
4 3
4 3
4 3
4 3
4 6
Computer wins with 16 points
Aquí, el usuario elige el dado 1 y sus tiradas se muestran en la columna derecha. El programa elige morir 3 y lo vence.
|Z-21×X
qué no cambia el recuento de caracteresR - 228
Ejemplo de ejecución:
fuente
summary.factor
contable
, guardando 9 caracteres.Mathematica
208172166159Espacios añadidos para mayor claridad.
fuente
Ruby 1.8, 165
getc
obtiene el valor ascii de la entrada (solo ruby 1.8), que felizmente es congruente módulo 3 a su valor entero.s
comienza en 21, por lo ques.times{code}
se ejecutarácode
21 veces y devolverá 21. En cada iteración, el ciclo suma o resta 1 de s dependiendo de quién gana, por lo que podemos ver quién ganó al ver sis
ha terminado por debajo de 21. Genial hasta ahora , pero luego necesito la expresión torpe[s/=2,21-s].max
para extraer el número real de puntos. Hace mucho que quería hacer aritmética con el valor de retorno de<=>
, así que estoy feliz de todos modos.fuente
Mathematica
234247Código
Uso
Explicación
n
es el número 1, 2 o 3 que corresponde al dado del jugador. Como n también determina (pero no es igual) el dado de la computadora, podemos generar todas las tiradas posibles de los dados cuando n = 1, n = 2, n = 3. También podemos determinar sus respectivas probabilidades.Examine los datos justo después
RandomChoice
:Si el jugador saca el dado 1, los únicos resultados posibles son los siguientes 4 pares
{{3, 1}, {3, 4}, {6, 1}, {6, 4}}
Las probabilidades respectivas de estos pares son
{5, 25, 1, 5}/36
, es decir,{5/36, 25/36, 1/36, 5/36}
RandomChoice[<data>, 21]
saca 21 tiradas de los dos dados.fuente
C,
205191Lee la elección del usuario de stdin.
fuente
for(c=51-getchar(p=0);
,printf("%ser wins
), reordenar expresión enr
que comienzan con(
y ahorrar espacio.(c+1)%3
->-~c%3
, hacerp
static (inicializado a 0), eliminar{}
despuésfor
(;
->,
dentro de ellos), usarp<11?:
dos veces dentro enprintf
lugar de asignarp,q
.s,q
en el bucleprintf
, e incrementarp
después, guardando así los paréntesis. También cambie lac
asignación a usar%3
o%7
, dando un orden diferente de 0,1,2.Factor
Con incluye: 388
Sin: 300
Sí, Factor no es realmente el lenguaje a usar cuando se juega golf, pero es bueno.
fuente
Python 182
fuente
R 206
fuente