File size: 1,408 Bytes
b6aeef5
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
from typing import TypedDict

class PathSummary(TypedDict):
    average_speed_m_per_s: float
    success_rate: float
    total_distance_m: float

def summarize_paths(records: list[dict]) -> PathSummary:
    """Summarize simple path history records.

    Each record is expected to have:
      - distance_m (float)
      - duration_s (float)
      - success ("yes"/"no")
    """
    if not records:
        return {
            "average_speed_m_per_s": 0.0,
            "success_rate": 0.0,
            "total_distance_m": 0.0,
        }

    total_distance = 0.0
    total_duration = 0.0
    success_count = 0

    for r in records:
        d = float(r.get("distance_m", 0.0))
        t = float(r.get("duration_s", 0.0))
        total_distance += d
        total_duration += max(t, 0.0)
        if str(r.get("success", "")).lower() == "yes":
            success_count += 1

    avg_speed = total_distance / total_duration if total_duration > 0 else 0.0
    success_rate = success_count / len(records)

    return {
        "average_speed_m_per_s": round(avg_speed, 3),
        "success_rate": round(success_rate, 3),
        "total_distance_m": round(total_distance, 3),
    }

if __name__ == "__main__":
    example_records = [
        {"distance_m": 6.0, "duration_s": 40, "success": "yes"},
        {"distance_m": 8.0, "duration_s": 50, "success": "no"},
    ]
    print(summarize_paths(example_records))