def bolos_1(nomf,tveu,n):
    ncant = 0
    with open(nomf,'r') as f:
        for cantaire in f:
            cantaire = cantaire.replace('\n','')
            lcantaire = cantaire.split('&')
            nom,tipusveu,solista = lcantaire
            if tipusveu == tveu and solista == 'True':
                ncant = ncant + 1
                if ncant == n:
                    return True
    return False

def bolos_2(nomf,tveu,n):
    ncant = 0
    with open(nomf,'r') as f:
        for cantaire in f:
            nom,tipusveu,solista = tracta_linia_cantaire(cantaire)
            if tipusveu == tveu and solista:
                ncant = ncant + 1
                if ncant == n:
                    return True
    return False

def bolos_3(nomf,tveu,n):
    ncant = 0
    with open(nomf,'r') as f:
        cantaires = filtra_cantaires_veu_solista(f, tveu)
    return len(cantaires) >= n

def filtra_cantaires_veu_solista(cantaires, veu_solista):
    cvs = []
    for cantaire in cantaires:
        nom, veu, solista = tracta_linia_cantaire(cantaire)
        if veu == veu_solista and solista:
            cvs.append(nom)
    return cvs

# Tria la versió que vols provar
# bolos = bolos_1
# bolos = bolos_2
bolos = bolos_3

def tracta_linia_cantaire(linia):
    nom, veu, solista_s = linia.strip().split('&')
    return nom, veu, eval(solista_s)


def dicc_solistes_1(nomf):
    with open(nomf,'r') as f:
        dsol = filtra_solistes(f)
    for veu in dsol:
        dsol[veu].sort()
    return dsol

def filtra_solistes(cantaires):
    dsol = {}
    for cantaire in cantaires:
        nom, veu, solista = tracta_linia_cantaire(cantaire)
        if solista:
            if veu in dsol:
                dsol[veu].append(nom)
            else:
                dsol[veu] = [nom]
    return dsol


def dicc_solistes_2(nomf):
    dsol = {}
    with open(nomf,'r') as f:
        for cantaire in f:
            cantaire = cantaire.replace('\n','')
            lcantaire = cantaire.split('&')
            nom,tipusveu,solista = lcantaire
            if solista == 'True':
                if tipusveu in dsol:
                    dsol[tipusveu].append(nom)
                else:
                    dsol[tipusveu] = [nom]
    for veu in dsol:
        dsol[veu].sort()
    return dsol

# Tria la versió que vols provar
dicc_solistes = dicc_solistes_1
# dicc_solistes = dicc_solistes_2
