Exercise 2 solution (Python) def naismith(km, ascent_m): return km / 5 * 60 + ascent_m / 10 def clock(minutes): return f"{int(minutes // 60):02d}:{int(round(minutes % 60)):02d}" legs = [("Car park to bridge", 1.5, 40, 80), ("Bridge to col", 2.5, 260, 35), ("Col to summit", 1.0, 190, 120), ("Summit to car park", 5.0, 0, 200)] t = 9 * 60 print("Start", clock(t)) for name, km, ascent, bearing in legs: t += naismith(km, ascent) print(f"{name}: {km} km, {ascent} m up, bearing {bearing}, arrive {clock(t)}") Output: Start 09:00 Car park to bridge: 1.5 km, 40 m up, bearing 80, arrive 09:22 Bridge to col: 2.5 km, 260 m up, bearing 35, arrive 10:18 Col to summit: 1.0 km, 190 m up, bearing 120, arrive 10:49 Summit to car park: 5.0 km, 0 m up, bearing 200, arrive 11:49 Total: 10 km and 490 m of ascent, 169 minutes of moving time. These are moving times only: add breaks and a safety margin (see the notes on the chapter page), and write the finish time on the card as an estimate, not a promise.