Ganador en el juego de piedra, papel o tijera usando manipulación de bits

Dos jugadores están jugando una serie de juegos de piedra, papel o tijera . Hay un total de N juegos representados por una array arr[][] donde arr[i][0] es el movimiento del jugador uno y arr[i][1] es el movimiento del jugador dos en el i -ésimo juego del conjunto {‘R’, ‘P’, ‘S’} . La tarea es encontrar el ganador de cada uno de los juegos. Tenga en cuenta que el juego es un empate si ambos jugadores eligen el mismo elemento.
Ejemplos: 
 

Entrada: arr[] = {“RS”, “SR”, “SP”, “PP”} 
Salida: 



DRAW
Entrada: arr[] = {“SS”, “RP”, “PS”} 
Salida: 
Dibujar 


 

Enfoque: suponga que el jugador uno está representado por el bit 1 y el jugador dos está representado por 0 . Además, sea Roca representada por 00 (0 en decimal), Papel por 01 (1 en decimal) y Tijeras por 10 (2 en decimal).
Si el jugador uno elige piedra, estará representado por 100.
De manera similar, 101  significa que el jugador uno elige papel.
El primer bit indica el número del jugador y los dos siguientes para su elección.
Patrón: 
100 (4 en decimal) (jugador 1, roca), 001 (1 en decimal) (jugador 2, papel) -> jugador 2 ganó (4-1 = 3) 
101 (5 en decimal) (jugador 1, papel), 010 (2 en decimal) (jugador 2, tijera) -> jugador 2 ganó (5-2 = 3) 
110 (6 en decimal) (jugador 1, tijera), 000 (0 en decimal) (jugador 2, roca) -> jugador 2 ganó (6-0 = 6) 
101 (5 en decimal) (jugador 1, papel), 000 (0 en decimal) (jugador 2, roca) – > jugador 1 ganó (5-0 = 5) 
110 (6 en decimal) (jugador 1, tijera), 001 (1 en decimal) (jugador 2, papel) -> jugador 1 ganó (6-1 = 5) 
100 ( 4 en decimal) (jugador 1, roca), 010 (2 en decimal) (jugador 2, tijeras) -> ganó el jugador 1 (4-2 = 2)
Según el patrón, si la diferencia es múltiplo de 3 entonces el jugador dos victorias o si la diferencia es 4 entonces el juego es un empate. En el resto de los casos, el jugador uno gana el juego.
A continuación se muestra la implementación del enfoque anterior: 
 

C++

// C++ implementation of the approach
#include <bits/stdc++.h>
using namespace std;
 
// Function to return the
// winner of the game
string winner(string moves)
{
    map<char, int> data;
    data['R'] = 0;
    data['P'] = 1;
    data['S'] = 2;
 
    // Both the players chose to
    // play the same move
    if (moves[0] == moves[1]) {
        return "Draw";
    }
 
    // Player A wins the game
    if (((data[moves[0]] | 1 << (2))
         - (data[moves[1]] | 0 << (2)))
        % 3) {
        return "A";
    }
 
    return "B";
}
 
// Function to perform the queries
void performQueries(string arr[], int n)
{
    for (int i = 0; i < n; i++)
        cout << winner(arr[i]) << endl;
}
 
// Driver code
int main()
{
    string arr[] = { "RS", "SR", "SP", "PP" };
    int n = sizeof(arr) / sizeof(string);
 
    performQueries(arr, n);
 
    return 0;
}

Java

// Java implementation of the approach
import java.util.*;
 
class GFG
{
 
// Function to return the
// winner of the game
static String winner(String moves)
{
    HashMap<Character,
            Integer> data = new HashMap<Character,
                                        Integer>();
    data.put('R', 0);
    data.put('P', 1);
    data.put('S', 2);
 
    // Both the players chose to
    // play the same move
    if (moves.charAt(0) == moves.charAt(1))
    {
        return "Draw";
    }
 
    // Player A wins the game
    if (((data.get(moves.charAt(0)) | 1 << (2)) -
         (data.get(moves.charAt(1)) | 0 << (2))) % 3 != 0)
    {
        return "A";
    }
 
    return "B";
}
 
// Function to perform the queries
static void performQueries(String arr[], int n)
{
    for (int i = 0; i < n; i++)
        System.out.print(winner(arr[i]) + "\n");
}
 
// Driver code
public static void main(String[] args)
{
    String arr[] = { "RS", "SR", "SP", "PP" };
    int n = arr.length;
 
    performQueries(arr, n);
}
}
 
// This code is contributed by 29AjayKumar

Python3

# Python3 implementation of the approach
 
# Function to return the
# winner of the game
def winner(moves):
    data = dict()
    data['R'] = 0
    data['P'] = 1
    data['S'] = 2
 
    # Both the players chose to
    # play the same move
    if (moves[0] == moves[1]):
        return "Draw"
 
    # Player A wins the game
    if (((data[moves[0]] | 1 << (2)) -
         (data[moves[1]] | 0 << (2))) % 3):
        return "A"
 
    return "B"
 
# Function to perform the queries
def performQueries(arr,n):
    for i in range(n):
        print(winner(arr[i]))
 
# Driver code
arr = ["RS", "SR", "SP", "PP"]
n = len(arr)
 
performQueries(arr, n)
 
# This code is contributed by Mohit Kumar

C#

// C# implementation of the approach
using System;
using System.Collections.Generic;
 
class GFG
{
 
// Function to return the
// winner of the game
static String winner(String moves)
{
    Dictionary<char,
               int> data = new Dictionary<char,
                                          int>();
    data.Add('R', 0);
    data.Add('P', 1);
    data.Add('S', 2);
 
    // Both the players chose to
    // play the same move
    if (moves[0] == moves[1])
    {
        return "Draw";
    }
 
    // Player A wins the game
    if (((data[moves[0]] | 1 << (2)) -
         (data[moves[1]] | 0 << (2))) % 3 != 0)
    {
        return "A";
    }
 
    return "B";
}
 
// Function to perform the queries
static void performQueries(String []arr, int n)
{
    for (int i = 0; i < n; i++)
        Console.Write(winner(arr[i]) + "\n");
}
 
// Driver code
public static void Main(String[] args)
{
    String []arr = { "RS", "SR", "SP", "PP" };
    int n = arr.Length;
 
    performQueries(arr, n);
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
// Javascript implementation of the approach
 
// Function to return the
// winner of the game
function winner(moves)
{
    let data = new Map();
    data.set('R', 0);
    data.set('P', 1);
    data.set('S', 2);
   
    // Both the players chose to
    // play the same move
    if (moves[0] == moves[1])
    {
        return "Draw";
    }
   
    // Player A wins the game
    if (((data.get(moves[0]) | 1 << (2)) -
         (data.get(moves[1]) | 0 << (2))) % 3 != 0)
    {
        return "A";
    }
   
    return "B";
}
 
// Function to perform the queries   
function performQueries(arr,n)
{
    for (let i = 0; i < n; i++)
        document.write(winner(arr[i]) + "<br>");
}
 
// Driver code
let arr=["RS", "SR", "SP", "PP" ];
let  n = arr.length;
performQueries(arr, n);
 
// This code is contributed by patel2127
</script>
Producción: 

A
B
A
Draw

 

Publicación traducida automáticamente

Artículo escrito por Abhimanyu_kumar y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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