Y el ganador es...

En muchos de los concursos de programación, como en el que hoy participas, cada vez que un equipo resuelve correctamente un problema recibe un globo del color asociado a ese problema. Al final, quien más globos consigue no sólo tiene su ordenador más colorido, sino que será el ganador del concurso.

Dada la lista de los globos colocados a cada equipo, ¿eres capaz de decir quién es el ganador?

Globos

Entrada

La entrada estará compuesta de múltiples casos de prueba, cada uno de ellos simulando un concurso. Cada caso de prueba comienza con una línea con dos números, el primero de ellos indicando el número de equipos participantes (entre 1 y 20) y el segundo el número de globos entregados.

A continuación aparecerá una línea por cada globo entregado, con el número del equipo que lo ha recibido (entre 1 y el número de equipos) y el color (una palabra de un máximo de 20 letras). Un equipo nunca recibirá dos veces el mismo color de globo.

La entrada terminará cuando se llegue a un concurso sin equipos ni globos.

Salida

Para cada caso de prueba se debe escribir el número del equipo ganador en una línea. En caso de empate, se escribirá EMPATE.

Entrada de ejemplo

4 3
2 Rojo
3 Amarillo
3 Azul
4 4
2 Rojo
3 Amarillo
3 Azul
2 Verde
0 0

Salida de ejemplo

3
EMPATE

Solución propuesta

if __name__ == '__main__':
    # Leer número equipos y globos
    equipos, globos = [int(x) for x in list(input().split(' '))]
    while equipos != 0 and globos != 0 and 1 <= equipos <= 20:
        # Generar el diccionario para las puntuaciones
        # se utiliza diccionario porque el equipo más bajo es el 1
        # Además, al ser un diccionario no podemos aprovechar las
        # listas por comprensión
        puntuaciones_equipos = {}
        for x in range(1, equipos+1):
            puntuaciones_equipos[x] = 0
        # Se leen los globos ganados por cada equipo
        # no nos importa el color, por eso no se utiliza
        for x in range(globos):
            equipo, color = [x for x in list(input().split(' '))]
            equipo = int(equipo)
            puntuaciones_equipos[equipo] += 1
        # Se busca el más alto o máximo
        # Si dos equipos tienen la misma puntuación, entonces hay empate
        # Si otro equipo tiene más puntuación, rompe el empate
        equipo_ganador = 0
        empate = False
        for equipo in puntuaciones_equipos.keys():
            if puntuaciones_equipos[equipo] > puntuaciones_equipos[equipo_ganador]:
                equipo_ganador = equipo
                empate = False
            elif puntuaciones_equipos[equipo] == puntuaciones_equipos[equipo_ganador]:
                empate = True
        if empate:
            print("EMPATE")
        else:
            print(equipo_ganador)
        equipos, globos = [int(x) for x in list(input().split(' '))]

Enlace del código

Enlace en aceptaelreto.com

Publicado el 26 de junio de 2017