import operator


def calcola_punteggio(punteggi: list):
    punteggi_ordinati = sorted(punteggi, reverse=True)
    return float(punteggi_ordinati[0]) + float(punteggi_ordinati[1]) + float(punteggi_ordinati[3])


def leggi_file(filename: str):
    fio = open(filename, "r")

    prodotti = []

    for line in fio:
        line = line.strip().split(" ")
        codice = line[0]
        categoria = line[1]
        costo = line[2]
        nazione = line[3]
        punteggio_totale = calcola_punteggio(line[4::])

        prodotti.append({"codice": codice, "categoria": categoria, "costo": costo, "nazione": nazione, "punteggio": punteggio_totale})

    fio.close()
    return prodotti


def prodotto_vincente(prodotti: list):
    stati = {} # stato: punteggio
    categorie = {} # categoria: [codice, valore]

    prodotto_vincente = 0

    for i in range(len(prodotti)):
        prodotto = prodotti[i]
        categoria = prodotto["categoria"]
        nazione = prodotto["nazione"]
        codice = prodotto["codice"]
        punteggio = prodotto["punteggio"]

        if punteggio > prodotti[prodotto_vincente]["punteggio"]:
            prodotto_vincente = i

        if categoria not in categorie or punteggio > categorie[categoria][1]:
            categorie[categoria] = [codice, punteggio]

        if nazione not in stati:
            stati[nazione] = punteggio
        else:
            stati[nazione] += punteggio

    stati = sorted(stati, key=operator.itemgetter(1))

    print("Prodotto vincente", prodotti[prodotto_vincente]["codice"])
    print("I primi tre stati vincenti sono: ", stati[0], stati[1], stati[2])

    for categoria in categorie:
        print("Il vincitore della categoria", categoria, "è il prodotto", categorie[categoria][0])


def main():
    prodotti = leggi_file("input.txt")
    prodotto_vincente(prodotti)

main()


