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

../../../../_images/cimsvalls.png

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)
Paràmetres:

it_cotes – un iterador de punts de cota (int)

Retorna:

un iterador de punts de cota (int) amb el punt inicial, el punt final, els cims i les valls de it_cotes, en l’ordre en que apareixen a 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.