## Q1
def dist(a,b):
    s=0
    for i in range(len(a)):
        s=s+ (a[i]-b[i])**2
    return s
## Q2
def indice_min(L):
    imin=0
    vmin=L[0]
    for i in range(1,len(L)):
        if L[i]<vmin:
            vmin=L[i]
            imin=i
    return imin
## Q3
import csv
dossier="Q:\\documents en consultation\\"
chemin=dossier+"donnees_entrainement.csv"
D_E_str = list(csv.reader(open( chemin )))
## Q4
D_E=[]
for l in D_E_str:
    a=[]
    for x in l:
        a.append(int(x))
    D_E.append(a)
## Q5
print( dist(D_E[15],D_E[51]))
## Q6
import matplotlib.pyplot as plt

image2=[]
for i in range(8):
    image2.append(D_E[2][8*i : 8*i+8])
plt.imshow(image2,cmap="gray_r")
plt.show()

## Q7
chemin=dossier+"donnees_test.csv"
D_T_str = list(csv.reader(open( chemin )))
D_T=[]
for l in D_T_str:
    a=[]
    for x in l:
        a.append(int(x))
    D_T.append(a)
## Q8
def toutes_distances(a):
    L=[]
    for b in D_E:
        L.append(dist(a,b))
    return L
## Q9
chemin=dossier+"chiffres_entrainement.txt"
C_E_str=list(open(chemin))
C_E=[]
for x in C_E_str:
    C_E.append(int(x))
## Q10
a=D_T[0]
L=toutes_distances(a)
i=indice_min(L)
print("indice :",i)
print("chiffre : ",C_E[i])
## Q11
def predire_chiffre(a):
    L=toutes_distances(a)
    i=indice_min(L)
    return C_E[i]
## Q12
P100=[]
for i in range(100):
    P100.append(predire_chiffre(D_T[i]))
print (P100)

# Estimation pour le jeu de test entier 18 fois plus long que ci-dessus, car la compexité est linéaire et le jeu de test compte environ 1800 images.
# Sur ma machine c'est donc 18*7 seconde = environ 2 minutes

## Q13 : tache de fond
Pred=[]
for a in D_T:
    Pred.append( predire_chiffre(a) )

## Q13
chemin=dossier+"chiffres_test.txt"
C_T_str=list(open(chemin))
C_T=[]
for x in C_T_str:
    C_T.append(int(x))

# On crée d'abord M remplie de zéros
M=[]
for i in range(10):
    M.append([0]*10)
# Ensuite on parcourt une seule fois la liste des
# prédictions pour faire le remplissage de M
for k in range(len(Pred)):
    j=Pred[k]
    i=C_T[k]
    M[i][j]=M[i][j]+1

