2. Desnivell acumulat (4 punts)

Avís

Per a resoldre aquest exercici no es poden fer servir iteracions (ni for ni while ), només les funcions predefinides de Python i les dels mòduls itertools, functools i operator. Tampoc no es poden fer servir llistes, tuples, diccionaris ni cap altra estructura de dades per a desar tots els elements d’un iterador.

El desnivell acumulat d’una ruta de muntanya és la suma total dels desnivells dels trams de pujada (els trams de baixada no intervenen en el càlcul). Per exemple la ruta de la figura té un desnivell acumulat de 1150 metres, ja que els desnivells dels trams de pujada (els marcats en vermell) sumen 350+500+100+200.

../../../../_images/figura_desnivell.svg

Es demana que, en un fitxer anomenat desnivell.py, hi deseu la funció especificada a continuació:

desnivell.desnivell_acumulat(it)
Paràmetres:

it – seqüència d’enters positius, corresponents a les alçades en metres de cada punt d’una ruta

Retorna:

el desnivell acumulat de la ruta, en metres

Per exemple:


>>> from desnivell import desnivell_acumulat

>>> desnivell_acumulat(iter([0, 110, 200, 350]))
350
>>> desnivell_acumulat(iter([3000, 2800, 2767, 2522]))
0
>>> desnivell_acumulat(iter([0, 100, 200, 100, 300, 0]))
400
>>> l1 = [2000, 2100, 2215, 2350, 2300, 2405, 2510, 2677, 2730,
...       2800, 2680, 2546, 2500, 2566, 2600,
...       2517, 2384, 2242, 2200, 2367, 2380, 2400, 
...       2342, 2339, 2272, 2228, 2200]
>>> desnivell_acumulat(iter(l1))
1150

Per a resoldre aquest problema us pot resultar útil la funció itertools.pairwise(), entre d’altres.

Disposeu d’un joc de proves més complet al fitxer tests-desnivell.txt.