# -*- coding: utf-8 -*-   Questo commento informa l'interprete python che il file usera' lettere accentate, per favore non cancellatelo

piloti=("Hamilton","Massa","Raikkonen","Kubica","Alonso","Heidfeld","Kovalainen","Vettel","Trulli","Glock")


#Punti: 10 al vincitore, 8 al secondo, 6 al terzo, e poi a scalare di 1 punto fino all'ottavo
ord_arrivo=[
("Melbourne","Australia","1","0","8","0","4","2","5","0","0","0"),
("Sepang","Malesia","5","0","1","2","8","6","3","0","4","0"),
("Sakhir","Bahrain","0","1","2","3","0","4","5","0","6","0"),
("Barcellona","Spagna","3","2","1","4","0","0","0","0","8","0"),
("Istanbul","Turchia","2","1","3","4","6","5","0","0","0","0"),
("Montecarlo","Monaco","1","3","0","2","0","0","8","5","0","0"),
("Montreal","Canada","0","5","0","1","0","2","0","8","6","4"),
("Magny-Cours","Francia","0","1","2","5","8","0","4","0","3","0"),
("Silverstone","Inghilterra","1","0","4","0","6","2","5","0","7","0"),
("Hockenheim","Germania","1","3","6","7","0","4","5","8","0","0"),
("Hungaroring","Ungheria","5","0","3","8","4","0","1","0","7","2"),
("Valencia","Europa","2","1","0","3","0","0","4","6","5","7"),
("Spa","Belgio","3","1","0","6","4","2","0","5","0","0"),
("Monza","Italia","7","6","0","3","4","5","2","1","0","0"),
("Singapore","Singapore","3","0","0","0","1","6","0","5","0","4"),
("Fuji","Giappone","0","7","3","2","1","0","0","6","5","0"),
("Shangai","Cina","1","2","3","6","4","5","0","0","0","7"),
("Interlagos","Brasile","5","1","3","0","2","0","7","4","8","6")
]

pil2cost={"Hamilton":"McLaren","Massa":"Ferrari","Raikkonen":"Ferrari","Kubica":"BMW" ,"Alonso":"Renault","Heidfeld":"BMW" ,"Kovalainen":"McLaren","Vettel":"Toro Rosso", "Trulli":"Toyota","Glock":"Toyota"}



#togliete il commento dalla funzione sottostante che dovete implementare,
#inserite gli eventuali parametri formali secondo l'ordine indicato nell'assegnamento, 
#implementate la funzione




"""
Dal testo ... La funzione riceve in ingresso il nome di un pilota (l’utente che richiamerà la funzione dovrà passare come nome del pilota un nome identico ad uno dei nomi presenti nella lista precaricata) e deve restituire una tupla lista (formata da numeri interi) contenente: il totale dei punti, in numero di vittorie (cioè quate volta il pilota è arrivato primo) e il numero dei podi del pilota (un pilota sale sul podio quando arriva al 1°, al 2°, oppure al 3° posto). La lista restituita dovrà essere composta solo da numeri interi e i numeri dovranno rispettare l’ordine seguente: [punti, n_vittorie, n_podi].
"""
def puntiPilota(nome):
    pil2col={"Hamilton":2,"Massa":3,"Raikkonen":4,"Kubica":5,"Alonso":6, "Heidfeld":7,"Kovalainen":8,"Vettel":9,"Trulli":10,"Glock":11}

    arrivo2punti=[0, 10, 8, 6, 5, 4, 3, 2, 1]
    col=pil2col[nome]

    punti=0
    vittorie=0
    podi=0
    
    for tu in ord_arrivo:
        posarrivo = int(tu[col]) # la posizione e' memorizzata come stringa, la converto in intero
        
        punti = punti + arrivo2punti[posarrivo]

        if posarrivo==1:
            vittorie=vittorie+1

        if posarrivo>=1 and posarrivo<=3:
            podi=podi+1
        
    return [punti, vittorie, podi]


"""
Dal testo ... La funzione non riceve alcun parametro in ingresso e deve restituire un dizionario formato da coppie chiave valore, dove la chiave è una stringa che contiene il nome del pilota, mentre il valore associato alla chiave è un intero che rappresenta il totale dei punti che il pilota ha conseguito alla fine del campionato mondiale. 
"""
def classificaPiloti():
    classifica = {}
    
    for nomePilota in piloti:
        li=puntiPilota(nomePilota) # sfrutto la funzione precedente
        punti=li[0]
        classifica[nomePilota] = punti # questa isgtruzione potrebbe essere fusa con la precedente
           
    return classifica

# versione alternativa rispetto alla precedente
def classificaPilotiAlternativa():
    pil2col={"Hamilton":2,"Massa":3,"Raikkonen":4,"Kubica":5,"Alonso":6, "Heidfeld":7,"Kovalainen":8,"Vettel":9,"Trulli":10,"Glock":11}
    arrivo2punti=[0, 10, 8, 6, 5, 4, 3, 2, 1]

    classifica = {}
    for pilota in pil2col:
        classifica[pilota]=0

    for tu in ord_arrivo:
        for pilota in pil2col:
            punti = arrivo2punti[int(tu[pil2col[pilota]])]
            classifica[pilota]+=punti

    return classifica

"""
Dal testo ... La funzione non riceve alcun parametro in ingresso e deve restituire un dizionario formato da coppie chiave valore, dove la chiave è una stringa che contiene il nome del costruttore, mentre il valore associato alla chiave è un intero che rappresenta il totale dei punti che il costruttore ha conseguito alla fine del campionato mondiale. I punti conseguiti da un costruttore sono la somma dei punti che i piloti che corrono per il costruttore hanno conseguito durante l’anno.

Nota bene: nelle strutture dati precaricati mancano i dati di alcuni dei piloti delle squadre  Renault e Toro Rosso, per questo i dati calcolati dalla funzione non corrispondono con i dati reali
"""
def classificaCostruttori():

    classificaCostruttori = {}
    for pilota in pil2cost:
        costruttore=pil2cost[pilota]
        classificaCostruttori[costruttore]=0
    
    for nomePilota in piloti:
        li=puntiPilota(nomePilota) # sfrutto la funzione precedente
        punti=li[0]
        costruttore=pil2cost[nomePilota]
        classificaCostruttori[costruttore] += punti
           
    return classificaCostruttori

    
print('puntiPilota(...)')    
corridore = "Hamilton"
li=puntiPilota(corridore)
print(corridore, li)

print('classificaPiloti()')
classifica = classificaPiloti()
print(classifica)

print('classificaPilotiAlternativa()')
classificaAlt = classificaPilotiAlternativa()
print(classificaAlt)

print("classificaCostruttori()")
classificaCostr = classificaCostruttori()
print(classificaCostr)
