import csv
from math import sqrt

iris = list(csv.DictReader(open("iris.csv")))
print(len(iris), "données dans le fichier")

long = float(input("Longueur pétale : "))
larg = float(input("Largeur  pétale : "))

def dist(d):
    """renvoie la distance entre d et (long, larg)"""
    dlong = float(d["petal_length"])
    dlarg = float(d["petal_width"])
    return sqrt((dlong - long) ** 2 + (dlarg - larg) ** 2)

def insere(d, t):
    """insère une nouvelle donnée d dans le tableau t
    en maintenant t croissant pour dist"""
    t.append(d)
    i = len(t) - 1
    while i > 0 and dist(t[i - 1]) > dist(d):
        t[i] = t[i - 1]
        i = i - 1
    t[i] = d

def majoritaire(t):
    """renvoie un élément majoritaire dans t
    on suppose t non vide"""
    assert len(t) > 0
    c = {}
    mx = 1
    mj = t[0]
    for x in t:
        if x not in c:
            c[x] = 0
        c[x] += 1
        if c[x] > mx:
            mx = c[x]
            mj = x
    return mj

def ppv(k):
    t = []  # maintenu en ordre croissant de distance
    for d in iris:
        insere(d, t)
        if len(t) > k:
            t.pop()
    # print([dist(d) for d in t])
    return majoritaire([x["species"] for x in t])

for k in range(1, 10):
    print("k=", k, "donne", ppv(k))