"""
Exercice 1:
Ecrire la fonction occurences qui prend en argument une liste l de valeurs et qui renvoie un dictionnaire donnant,
pour chaque valeur apparaissant dans l, le nombre de fois qu'elle apparait dans l.
"""

def occurrence(l):
    d = {}
    for i in l:
        if i in d:
            d[i] += 1
        else:
            d[i] = 1
    return d

print(occurrence([1,3,2,1,4,1,2,1])) # {1: 4, 2:2, 3:1, 4: 1}
"""
Exercice 2 :
Ecrire une fonction plus_frequent(d,k) qui renvoie le mot de k lettres qui est associé dans le dictionnaire d à la plus grande valeur.
En cas d'égalité, on choisira arbitrairement. S'il n'y a aucun mot de k lettres, on renverra une chaine vide.

On pourra utiliser le texte du fichier ltdme80j.txt.
"""

f = open("ltdme80j-p.txt")
texte = f.read().split()
f.close()

def plus_frequent(d,k):
    m = None
    for i, j in d.items():
        if len(i) == k:
            if m == None: m = i
            elif d[m] < j: m = i
    return m

print(plus_frequent(occurrence(texte),19))


"""
Exercice 3 :
Ecrire une fonction compare_tableaux(t,u) qui determine si deux tableaux contiennent les mêmes éléments, avec pour chacun le même nombre d'occurence.
"""

def compare_tableaux(t,u):
    d1 = occurrence(t)
    d2 = occurrence(u)

    for i in d1.keys():
        if i not in d2: return False
        elif d1[i] != d2[i] : return False

    for i in d2.keys():
        if i not in d1: return False
        elif d1[i] != d2[i] : return False

    return True

print(compare_tableaux([1,3,2,1,4,1,2,1],[1,3,2,1,4,1,2,5])) # False
print(compare_tableaux([1,3,2,1,4,1,2,1],[1,3,2,1,4,1,2,2])) # False
print(compare_tableaux([1,3,2,1,4,1,2,1],[1,3,2,1,4,1,2,1])) # True


"""
Exercice 4 :
Vérifier que la fonction occurences (exercice 1) fonctionne aussi sur les chaines de charactères.
Que renvoie occurrences("tagada") ?
"""

print(occurrence("tagada"))

"""

Exercice 5:
Le Scrabble est un jeu de société où l'on doit former des mots avec tirage aléatoire de lettres, chaque lettre valant un certain nombre de points. Le dictionnaire scrabble contient cette association entre une lettre et son nombre de points.
Écrivez une fonction nb_points qui prend en paramètre une chaîne de caractères majuscules mot et qui renvoie le nombre de points au scrabble de mot.
"""

scrabble = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4, 'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1, 'P': 3, 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 10, 'X': 10, 'Y': 10, 'Z': 10}

def nb_points(mot):
    d = occurrence(mot)
    n = 0
    for i in d.keys():
        n += scrabble[i] * d[i]
    return n

print(nb_points('ARBRE')) # 7
print(nb_points('XYLOPHONE')) # 32
