#!/bin/env python3 # cost should be given in cents def tanken(drives, cost, service_charge=0): passengers = {} service_charges = {} distance = 0. drives = [d.split(' ') for d in drives] for d in drives: try: d[0] = int(d[0]) except: return None, "Lines have to start with the driven distance!" # calculate overall distance distance += d[0] # collect distances per passenger for p in d[1:]: if p not in passengers: passengers[p] = {"distance": d[0], "cost": 0, "service_charge": 0} else: passengers[p]["distance"] += d[0] # calculate cost per kilometer if distance <= 0: return None, "Driven distance must be greater than 0!" c = cost/distance for d in drives: # calculate cost per drive split among passengers c_d = int(c * d[0] / (len(d) - 1)) for p in d[1:]: passengers[p]["cost"] += c_d # calculate service charge per drive split among passengers sc_d = int(service_charge * d[0] / (len(d) - 1)) for p in d[1:]: passengers[p]["service_charge"] += sc_d return passengers, None