diff options
Diffstat (limited to 'tanken.py')
| -rw-r--r-- | tanken.py | 57 |
1 files changed, 0 insertions, 57 deletions
diff --git a/tanken.py b/tanken.py deleted file mode 100644 index 2c65c73..0000000 --- a/tanken.py +++ /dev/null @@ -1,57 +0,0 @@ -"""Utilities to support splitting fuel and car maintainance costs""" - -import typing as T - -PassengerResult = dict[str, int] -Results = dict[str, PassengerResult] -TankenFailure = T.Tuple[None, str] -TankenSuccess = T.Tuple[Results, None] -TankenResult = T.Union[TankenSuccess, TankenFailure] - - -# cost should be given in cents -def tanken(_drives: list[str], cost: int, service_charge=0) -> TankenResult: - """calculate costs per passange for one tank load""" - passengers = {} - distance = 0. - drives = [d.split(' ') for d in _drives] - - for drive in drives: - try: - drive_distance = int(drive[0]) - except (IndexError, ValueError): - return None, "Lines have to start with the driven distance!" - - # calculate overall distance - distance += drive_distance - - # collect distances per passenger - for passenger in drive[1:]: - if passenger not in passengers: - passengers[passenger] = { - "distance": drive_distance, - "cost": 0, - "service_charge": 0 - } - else: - passengers[passenger]["distance"] += drive_distance - - # calculate cost per kilometer - if distance <= 0: - return None, "Driven distance must be greater than 0!" - - c_km = cost / distance - - for drive in drives: - drive_distance = int(drive[0]) - # calculate cost per drive split among passengers - c_d = int(c_km * drive_distance / (len(drive) - 1)) - for passenger in drive[1:]: - passengers[passenger]["cost"] += c_d - - # calculate service charge per drive split among passengers - sc_d = int(service_charge * drive_distance / (len(drive) - 1)) - for passenger in drive[1:]: - passengers[passenger]["service_charge"] += sc_d - - return passengers, None |
