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.
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.