1. Cims i valls (5 punts)¶
Avís
Per a resoldre aquest exercici no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar els elements dels iteradors.
Es disposa d’una seqüència de punts de cota al llarg d’un camí. Alguns d’aquests punts són màxims locals (cims) o mínims locals (valls). Podem suposar que hi ha 3 punts com a mínim.
Ens demanen de generar un iterador de punts de cota on el primer i darrer coincideixen amb els de la seqüència donada i els altres punts són els cims i les valls de la seqüència donada en el mateix ordre en què apareixen en aquesta.
En l’exemple següent es mostra una seqüència de punts de cota on els punts inicial i final, així com els cims i les valls es mostren en negreta (vegeu també la figura):
1, 3, 4, 7, 6, 8, 9, 10, 11, 10, 9, 7, 12, 10, 8, 6, 4, 5, 6, 7, 11
L’iterador de punts de cota generat per aquest exemple seria:
1 - 7 - 6 - 11 - 7 - 12 - 4 - 11
En un fitxer anomenat cims_valls.py deseu la funció generadora especificada a continuació.
- cims_valls.cims_valls(it_cotes)¶
Per exemple:
>>> it1 = iter([1, 3, 4, 7, 6, 8, 9, 10, 11, 10, 9, 7, 12, 10, 8, 6, 4, 5, 6, 7, 11])
>>> it2 = cims_valls(it1)
>>> iter(it2) is it2
True
>>> next(it2)
1
>>> next(it2)
7
>>> next(it2)
6
>>> for p in it2:
... print(p)
11
7
12
4
11
Disposeu de més proves en el fitxer test-cims_valls.txt
Nota
Una manera de resoldre aquest exercici és generant finestres
de 3 punts de cota consecutius, a, b, c. La
condició de cim és: a<b>c. De manera similar es pot
definir la condició de vall.