Encuentre el ganador de un juego donde los puntajes se dan como una string binaria – Part 1

Dada una string binaria que representa los puntajes de un partido de Voleibol. La tarea es encontrar al ganador del partido de acuerdo con las siguientes condiciones: 
 

  • En voleibol, los dos equipos juegan entre sí y el equipo que anote primero 15 puntos será el ganador, excepto en el caso en que ambos equipos hayan llegado a 14 puntos.
  • En el caso de que ambos equipos hayan alcanzado los 14 puntos, el equipo que mantenga una ventaja de dos puntos será el ganador.

En la string binaria dada, 0 significa que el equipo de GEEK pierde un punto y 1 significa que el equipo de GEEK gana un punto. Tienes que averiguar si el equipo de GEEK había ganado o perdido el partido.
Ejemplos: 
 

Input : score[] = 01011111111110110101
Output : GEEK's won

Input : score[] = 010101010101010101010101010100
Output : GEEK's lost

Caso I: Cuando uno del equipo anota primero 15 puntos y el segundo equipo ha anotado menos de 15 puntos. Luego, recorra la string binaria dada y almacene el conteo de ceros y unos. Después de eso, si obtienes la cuenta de uno para ser 15 y la cuenta de cero menos de 15, entonces GEEK ganó y, por otro lado, si obtienes la cuenta de cero para ser 15 y la cuenta de uno menos de 15, entonces GEEK perdió.
Caso II: cuando ambos equipos anotan 14 puntos, reinicie el conteo de ambos a cero y por cada cero o uno incremente su conteo y verifique simultáneamente si abs (conteo [0] – conteo [1]) es igual a 2, si esto sucede entonces significa que cualquiera del equipo ha anotado dos puntos más que su oponente y será el ganador. Puede encontrar al ganador en el valor de count[0] y count[1].
A continuación se muestra la implementación del enfoque anterior:
 

C++

// Cpp program for predicting winner
#include <bits/stdc++.h>
using namespace std;
 
// function for winner prediction
void predictWinner(string score, int n)
{
 
    int count[2] = { 0 }, i;
    for (i = 0; i < score.size(); i++) {
 
        // increase count
        count[score[i] - '0']++;
 
        // check losing condition
        if (count[0] == n && count[1] < n - 1) {
            cout << "GEEKS lost";
            return;
        }
 
        // check winning condition
        if (count[1] == n && count[0] < n - 1) {
            cout << "GEEKS won";
            return;
        }
 
        // check tie on n-1 point
        if (count[0] == n - 1 && count[1] ==
                                   n - 1) {
            count[0] = 0;
            count[1] = 0;
            break;
        }
    }
 
    for (i++; i < score.size(); i++) {
 
        // increase count
        count[score[i] - '0']++;
 
        // check for 2 point lead
        if (abs(count[0] - count[1]) == 2) {
 
            // condition of lost
            if (count[0] > count[1])
                cout << "GEEKS lost";
 
            // condition of win
            else
                cout << "GEEKS won";
 
            return;
        }
    }
}
 
// driver program
int main()
{
    string score = "1001010101111011101111";
    int n = 15;
    predictWinner(score, n);
    return 0;
}

Java

// Java program for
// predicting winner
import java.io.*;
import java.util.*;
import java.lang.*;
 
class GFG
{
// function for
// winner prediction
static void predictWinner(String score,
                          int n)
{
 
    int count[] = new int[2], i;
    for (i = 0;
         i < score.length(); i++)
    {
 
        // increase count
        count[score.charAt(i) - '0']++;
 
        // check losing
        // condition
        if (count[0] == n &&
            count[1] < n - 1)
        {
            System.out.print("GEEKS lost");
            return;
        }
 
        // check winning condition
        if (count[1] == n &&
            count[0] < n - 1)
        {
            System.out.print("GEEKS won");
            return;
        }
 
        // check tie on n-1 point
        if (count[0] == n - 1 &&
            count[1] == n - 1)
        {
            count[0] = 0;
            count[1] = 0;
            break;
        }
    }
 
    for (i++; i < score.length(); i++)
    {
 
        // increase count
        count[score.charAt(i) - '0']++;
 
        // check for 2 point lead
        if (Math.abs(count[0] -
                     count[1]) == 2)
        {
 
            // condition of lost
            if (count[0] > count[1])
                System.out.print("GEEKS lost");
 
            // condition of win
            else
                System.out.print("GEEKS won");
 
            return;
        }
    }
}
 
// Driver Code
public static void main(String[] args)
{
    String score = "1001010101111011101111";
    int n = 15;
    predictWinner(score, n);
}
}

Python3

# Python 3 program for predicting winner
 
# function for winner prediction
def predictWinner(score, n):
    count = [0 for i in range(2)]
 
    for i in range(0, len(score), 1):
         
        # increase count
        index = ord(score[i]) - ord('0')
        count[index] += 1
 
        # check losing condition
        if (count[0] == n and count[1] < n - 1):
            print("GEEKS lost", end = " ")
            return
 
        # check winning condition
        if (count[1] == n and count[0] < n - 1):
            print("GEEKS won", end = " ")
            return
 
        # check tie on n-1 point
        if (count[0] == n - 1 and
            count[1] == n - 1):
            count[0] = 0
            count[1] = 0
            break
    i += 1   
         
    for i in range(i, len(score), 1):
         
        # increase count
        index = ord(score[i]) - ord('0')
        count[index] += 1
 
        # check for 2 point lead
        if (abs(count[0] - count[1]) == 2):
             
            # condition of lost
            if (count[0] > count[1]):
                print("GEEKS lost", end = " ")
 
            # condition of win
            else:
                print("GEEKS won", end = " ");
 
            return
 
# Driver Code
if __name__ == '__main__':
    score = "1001010101111011101111"
    n = 15
    predictWinner(score, n)
 
# This code is contributed by
# Surendra_Gangwar

C#

// C# program for predicting winner
using System;
 
class GFG
{
// function for winner prediction
public static void predictWinner(string score,
                                 int n)
{
 
    int[] count = new int[2]; int i;
    for (i = 0; i < score.Length; i++)
    {
 
        // increase count
        count[score[i] - '0']++;
 
        // check losing
        // condition
        if (count[0] == n && count[1] < n - 1)
        {
            Console.Write("GEEKS lost");
            return;
        }
 
        // check winning condition
        if (count[1] == n && count[0] < n - 1)
        {
            Console.Write("GEEKS won");
            return;
        }
 
        // check tie on n-1 point
        if (count[0] == n - 1 &&
            count[1] == n - 1)
        {
            count[0] = 0;
            count[1] = 0;
            break;
        }
    }
 
    for (i++; i < score.Length; i++)
    {
 
        // increase count
        count[score[i] - '0']++;
 
        // check for 2 point lead
        if (Math.Abs(count[0] - count[1]) == 2)
        {
 
            // condition of lost
            if (count[0] > count[1])
            {
                Console.Write("GEEKS lost");
            }
 
            // condition of win
            else
            {
                Console.Write("GEEKS won");
            }
 
            return;
        }
    }
}
 
// Driver Code
public static void Main(string[] args)
{
    string score = "1001010101111011101111";
    int n = 15;
    predictWinner(score, n);
}
}
 
// This code is contributed by Shrikant13

Javascript

<script>
 
// JavaScript program for predicting winner
 
// function for winner prediction
function predictWinner(score, n)
{
    count = new Array(2).fill(0);
 
    for(let i = 0;i < score.length; i++)
    {
         
        // increase count
        index = score.charCodeAt(i) - '0'.charCodeAt(0)
        count[index]++
 
        // check losing condition
        if (count[0] == n && count[1] < n - 1)
        {
            document.write("GEEKS lost"," ")
            return
        }
 
        // check winning condition
        if (count[1] == n && count[0] < n - 1){
            document.write("GEEKS won"," ")
            return
        }
 
        // check tie on n-1 point
        if (count[0] == n - 1 && count[1] == n - 1){
            count[0] = 0
            count[1] = 0
            break
        }
    }
    i += 1   
         
    while(i < score.length)
    {
         
        // increase count
        index = score.charCodeAt(i) - '0'.charCodeAt(0)
        count[index] += 1
 
        // check for 2 point lead
        if (Math.abs(count[0] - count[1]) == 2){
             
            // condition of lost
            if (count[0] > count[1])
                document.write("GEEKS lost"," ")
 
            // condition of win
            else
                document.write("GEEKS won"," ");
 
            return
        }
        i++
    }
}
 
// Driver Code
 
let score = "1001010101111011101111"
let n = 15
predictWinner(score, n)
 
// This code is contributed by ShinjanPatra
 
</script>
Producción: 

GEEKS won

 

Este artículo es una contribución de Shivam Pradhan (anuj_charm) . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *