from itertools import pairwise, groupby


def nove_povezave(pot, zemljevid):
    return pairwise(pot) - zemljevid.keys()


def obiskane_tocke(pot):
    return set(pot)


def popravljena_pot(pot):
    return "".join(k for k, g in groupby(pot))


def povezave_z_vescino(pot, zemljevid, vescina):
    return [p for p in pairwise(pot) if vescina in zemljevid[p]]


def dolgocasna_pot(pot, zemljevid):
    return set() in (zemljevid[p] for p in pairwise(pot))


def dobra_pot(pot, zemljevid):
    return not False in (len(zemljevid[p]) >= 2 for p in pairwise(pot))


def zahtevnost_poti(pot, zemljevid):
    return max(len(zemljevid[p]) for p in pairwise(pot))


def izvedljiva(pot, zemljevid, zivljenj):
    return sum(p not in zemljevid for p in pairwise(pot)) < zivljenj


def enosmerne(zemljevid):
    return {p for p in zemljevid if not (p[1], p[0]) in zemljevid}


def dvosmerne(zemljevid):
    return {k: v for k, v in zemljevid.items() if (k[1], k[0]) in zemljevid}


def najzahtevnejsi_odsek(pot, zemljevid):
    return max((len(zemljevid[p]), p) for p in pairwise(pot))[1]
