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:
A
B
A
DRAW
Entrada: arr[] = {“SS”, “RP”, “PS”}
Salida:
Dibujar
B
B
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>
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