# vots_minim

def vots_minim(dic, minim):
    for candidat in dic:
        if dic[candidat] <= minim:
            return True
    return False


# can_mes_votat

## solució 1: calculem el mínim amb l'esquema sintetitza

def can_mes_votat_1(dic):
    guanyador = ''
    vots_guanyador = 0
    for candidat in dic:
        if dic[candidat] > vots_guanyador:
            guanyador = candidat
            vots_guanyador = dic[candidat]
    return guanyador

## solució 2: calculem el mínim amb la funció max i la funció clau adient

def can_mes_votat_2(dic):
    guanyador = max(dic, key=lambda candidat: dic[candidat], default='')
    return guanyador

## tria la solució que vulguis provar
#can_mes_votat = can_mes_votat_1
can_mes_votat = can_mes_votat_2


# vots_ingressos

## solució 1: calculem la llista de les claus que compleixen amb
## l'esquema filtra

def vots_ingressos_1(dvots, ding):
    desconeguts = []
    for candidat in dvots:
        if candidat not in ding:
            desconeguts.append(candidat)
    desconeguts.sort()
    return desconeguts

## solució 2: calculem la llista per compresió de les claus que compleixen

def vots_ingressos_2(dvots, ding):
    desconeguts = [candidat for candidat in dvots if candidat not in ding]
    desconeguts.sort()
    return desconeguts

## tria la solució que vulguis provar
#vots_ingressos = vots_ingressos_1
vots_ingressos = vots_ingressos_2


# rics

## solució 1: ordenem segons els ingressos calculant una nova llista,
## fem la llesca dels 10 primers i marquem els candidats

def rics_1(dvots, ding):
    # Creem una llista de tuples (ingressos, persona) de tots els habitants 
    lrics = []
    for persona in ding:
        lrics.append((ding[persona], persona))
    # Ordenem la llista, començant pels ingressos màxims
    lrics.sort(reverse=True)
    # Ens quedem amb els deu primers de la llista ordenada
    lrics = lrics[:10]
    # Formem la llista que retornarem a partir de lrics: només els noms,
    #   afegint '*' al final si són candidats 
    lret = []
    for ingressos, persona in lrics:
        if persona in dvots:
            persona = persona + '*'
        lret.append(persona)
    return lret

## solució 2: ordenem segons els ingressos cridant a sorted i la
## funció clau addient, fem la llesca dels 10 primers i marquem els
## candidats

def rics_2(dvots, ding):
    lrics = sorted(ding.items(), reverse=True, key=lambda x: x[1])
    lrics = lrics[:10]
    lret = []
    for persona, ingressos in lrics:
        if persona in dvots:
            persona = persona + '*'
        lret.append(persona)
    return lret

## tria la solució que vulguis provar
#rics = rics_1
rics = rics_2

