f | from itertools import cycle | f | from itertools import cycle |
| | | |
| def speed(path, stops, times): | | def speed(path, stops, times): |
n | path_iter = iter(path) | n | distance_iter = iter(path) |
| stops_iter = cycle(stops) | | stop_sequence = cycle(stops) |
| times_iter = iter(times) | | time_iter = iter(times) |
| while True: | | while True: |
n | stop_count = next(stops_iter) | n | report_stops = next(stop_sequence) |
| segment_distance = 0 | | total_distance = 0 |
| distances_covered = 0 | | segments_count = 0 |
| for _ in range(stop_count): | | for _ in range(report_stops): |
| distance = next(path_iter, None) | | segment = next(distance_iter, None) |
| if distance is None: | | if segment is None: |
| break | | break |
n | segment_distance += distance | n | total_distance += segment |
| distances_covered += 1 | | segments_count += 1 |
| if distances_covered == 0: | | if segments_count == 0: |
| return | | return |
n | time = next(times_iter, None) | n | travel_time = next(time_iter, None) |
| if time is None: | | if travel_time is None: |
| yield (segment_distance / distances_covered) | | yield (total_distance / segments_count) |
| return | | return |
t | if time > 0: | t | if travel_time > 0: |
| yield (segment_distance / time) | | yield (total_distance / travel_time) |