from itertools import pairwise, tee, filterfalse


# troba_anomalies


## Solució 1

def troba_anomalies_1(it):
    return (p for p in pairwise(it) if es_anomalia(p))


## Solució 2

def troba_anomalies_2(it):
    parelles = pairwise(it)
    parelles_anomales = filter(es_anomalia, parelles)
    return parelles_anomales


## Tria la solució que vols provar

# troba_anomalies = troba_anomalies_1
troba_anomalies = troba_anomalies_2


## Funcions auxiliars per a les dues solucions

def es_anomalia(parell):
    p1, p2 = parell
    return sum(map(lambda c1, c2: abs(c1 - c2), p1, p2)) != 1


# classifica_anomalies


## Solució 1

def classifica_anomalies_1(anom):
    an1, an2 = tee(anom)
    no_canvien = (p for p in an1 if p[0] == p[1])
    canvien = (p for p in an2 if p[0] != p[1])
    return no_canvien, canvien


## Solució 2

def classifica_anomalies_2(anom):
    an1, an2 = tee(anom)
    no_canvien = filter(lambda p: p[0] == p[1], an1)
    canvien = filterfalse(lambda p: p[0] == p[1], an2)
    return no_canvien, canvien


## Tria la solució que vols provar

# classifica_anomalies = classifica_anomalies_1
classifica_anomalies = classifica_anomalies_2
