Saltar al contenido

Piedra-papel-tijera multijugador

Investigamos en internet y así traerte la solución a tu dilema, si tienes dudas déjanos la pregunta y respondemos con mucho gusto, porque estamos para servirte.

Solución:

Python, 41 bytes

lambda r,s,p:[s>p<=r>0,p>r<=s>0,r>s<=p>0]

¡Pruébelo en línea!

Toma cuenta como (r,s,p). Genera una lista de tres elementos con True en la posición del ganador, o todos Falsees si hay un empate o solo aparece una figura.

Rock:     [True, False, False]
Scissors: [False, True, False]
Paper:    [False, False, True]
Tie:      [False, False, False]

Usamos una caracterización alternativa sin multiplicación (excepto cuando solo hay una figura presente). A continuación se muestra la condición para ganar Rock, con tijeras y papel que tienen condiciones similares.

La piedra gana si: El papel tiene la menor cantidad, estrictamente menos que las tijeras, pero posiblemente lo mismo que la piedra.

Podemos escribir esto en Python como s>p<=r utilizando el encadenamiento de desigualdad.

Desafortunadamente, esto no maneja correctamente el caso especial cuando r=p=0, diciendo que Rock gana a pesar de que solo Scissors está presente. Para solucionar este problema, fortalecemos la condición para que Rock gane para incluir r>0 vía s>p<=r>0, lo que hace que el único estuche de tijeras dé todo False para cada condición, a juego con una corbata.


44 bytes

lambda r,s,p:r*s==s*p==p*r or[s>p<=r,p>r<=s]

¡Pruébelo en línea!

Toma cuenta como (r,s,p). Salidas como:

Rock:     [True, False]
Scissors: [False, True]
Paper:    [False, False]
Tie:      True    

El caso "Tie" también incluye donde solo hay una figura presente.

05AB1E, 14 13 bytes

Ćü*ZÊ2βD3*7%M

Ingrese como una lista de números enteros en el orden PS[r,s,p]PS.
Salida como uno de los siguientes cuatro:

Rock wins:      3
Scissors wins:  5
Paper wins:     6
Tie:            0

-1 byte gracias a @xnor.

Pruébelo en línea o verifique algunos casos de prueba más.

Explicación:

Ć              # Enclose the (implicit) input-list, appending its own head
               #  i.e. input=[3,2,2] → STACK: [[3,2,2,3]
 ü             # For each overlapping pair: [a,b,c,d] → [[a,b],[b,c],[c,d]]
  *            #  Multiply them together
               #   STACK: [[6,4,6]]
   Z           # Get the maximum (without popping)
               #   STACK: [[6,4,6],6]
    Ê          # Check which of the values in the list are NOT equals to this maximum
               #  STACK: [[0,1,0]]
     2β        # Convert this list of 0s and 1s from a binary list to integer
               #  STACK: [2]
       D       # Duplicate it
               #  STACK: [2,2]
        3*     # Multiply it by 3
               #  STACK: [2,6]
          7%   # Take modulo-7:
               #  STACK: [2,6]
            M  # Push the largest value on the stack
               #  STACK: [2,6,6]
               # (after which the top of the stack is output implicitly as result)

Después de la Ćü*ZÊ podemos tener los siguientes valores:

                One of:
Rock wins:      [[0,1,1], [0,0,1]]
Scissors wins:  [[1,0,1], [1,0,0]]
Paper wins:     [[1,1,0], [0,1,0]]
Ties:           [[0,0,0]]

Convirtiendo los de listas binarias en enteros:

                One of:
Rock wins:      [3, 1]
Scissors wins:  [5, 4]
Paper wins:     [6, 2]
Ties:           [0]

El 3*7% (gracias a @xnor!) mapeará los valores más bajos a los valores más altos en el par, y tampoco estará seguro de que los valores más bajos no aumentarán.

Esto funciona porque los pares [1,3], [2,6], [4,5] se construyen a partir de bits donde el segundo número tiene dos bits establecidos: el del primer número y la posición del bit a su derecha, envuelto en 3 bits. Esto proviene de la lista binaria del juego RPS. Podemos hacer el set-next-bit con *3 y hacer cumplir el ajuste de 3 bits con %7.

                One of:
Rock wins:      [3→2, 1→3]
Scissors wins:  [5→1, 4→5]
Paper wins:     [6→4, 2→6]
Ties:           [0]

Después de lo cual podemos usar M para mantener solo el valor más grande en la pila para nuestro resultado:

                One of:
Rock wins:      [3, 3]
Scissors wins:  [5, 5]
Paper wins:     [6, 6]
Ties:           [0]

C (gcc), 61 $ cdots $53 52 bytes

Guardado 3 bytes gracias a Kevin Cruijssen !!!
Guardado 3 bytes gracias a Arnauld !!!
Guardado un byte gracias a roofcat !!!

Usa la fórmula de xnor convertida a $ 3 $ para Rock, $ 2 $ para tijeras $ 1 $ para papel, y $ 0 $ por una corbata o solo aparece una figura.

f(r,s,p)r=s>p&p<=r&&r?3:p>r&r<=s&&s?2:r>s&s<=p&&p;

¡Pruébelo en línea!

Acuérdate de que puedes optar por la opción de decir si diste con la contestación.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *