tijera probabilidad piedra papel libro lagarto juego ingles friv fisica educacion con aros c

c - probabilidad - Una sola línea para determinar quién gana en piedra, papel y tijera



piedra papel o tijera probabilidad (1)

winner = (3 + player1 - player2) % 3;

Esto le dará 1 si el jugador 1 gana, 2 si el jugador 2 gana, 0 por un empate.

Explicación : En la secuencia Rock=0, Paper=1, Scissors=2 , cada elemento derrota al anterior. Esto es cierto incluso si tratamos la secuencia como un ajuste (es decir, el último elemento precede al primero).

Para poner esto en términos más matemáticos, para cualquier artículo X:

  • X es derrotado por (X+1) % 3 .
  • X derrotas (X+2) % 3 .

A partir de esto, se puede mostrar que (3+XY) % 3 es 1 si X derrota a Y, o 2 si Y derrota a X.

Se necesita sumar 3 para forzar que el resultado sea no negativo: el módulo de un número negativo será negativo o cero en C99 y dependerá de la implementación en C89.

Así que estoy escribiendo un simple juego de piedra, papel y tijera en C (es una tarea por cierto, aunque lo principal es aprender sockets. Además, sospecho que será necesario antes de obtener una buena respuesta). Lo tengo configurado como Rock = 0, Paper = 1, y Scissors = 2. ¿Hay un sencillo de una sola línea para determinar quién gana? Intenté jugar con eso en papel, pero no pude averiguar ningún patrón.