def main(): truck1 = Truck(1) truck2 = Truck(2) list_of_packages = ingest_package_data() distances = ingest_distance_data() current_day = datetime.today() current_time = time(hour=8, minute=0) current_time = datetime.combine(current_day, current_time) hashed_packages = HashTable() # Add packages to satisfy deadline and special notes requirements for package in list_of_packages: if package.id in [ 1, 3, 13, 14, 15, 16, 19, 18, 20, 21, 29, 31, 34, 36, 38, 37 ]: truck2.add_package(package, current_time) elif package.id not in [6, 9, 25, 28, 32]: truck1.add_package(package, current_time) hashed_packages.add_package(package) truck1.set_next_stop({'distance': 0, 'address': "4001 South 700 East,"}) truck2.set_next_stop({'distance': 0, 'address': "4001 South 700 East,"}) # Get user input desired_time = get_desired_time() desired_package = get_desired_package() # Late packages are ones that are delayed on flight picked_up_late_packages = False # Package 9 needs to be corrected eventually corrected_package_9 = False while (not truck1.finished_driving or not truck2.finished_driving) and current_time <= desired_time: if not corrected_package_9: corrected_package_9 = check_and_correct_package_9( current_time, hashed_packages) if truck1.finished_driving: distance_to_drive = truck2.distance_to_next_stop current_time = current_time + increment_time(distance_to_drive) drive_truck(truck2, distance_to_drive, list_of_packages, distances, current_time) elif truck2.finished_driving: distance_to_drive = truck1.distance_to_next_stop current_time = current_time + increment_time(distance_to_drive) drive_truck(truck1, distance_to_drive, list_of_packages, distances, current_time) # Drive trucks a distance so that at least one of them reaches its stop else: distance_to_drive = abs( min([ truck1.distance_to_next_stop, truck2.distance_to_next_stop ])) current_time = current_time + increment_time(distance_to_drive) drive_truck(truck1, distance_to_drive, list_of_packages, distances, current_time) drive_truck(truck2, distance_to_drive, list_of_packages, distances, current_time) for truck in [truck1, truck2]: if truck.distance_to_next_stop == 0 and not truck.finished_driving: if not picked_up_late_packages and current_time.hour >= 9: # If after 9:00, go back to the hub and pick up the delayed packages truck.set_next_stop({ "distance": distances[truck.next_stop][0][1], "address": "4001 South 700 East," }) picked_up_late_packages = True else: truck.set_next_stop(get_next_stop(truck, distances)) if desired_package == "All": all_packages = hashed_packages.get_all_packages() for pack in all_packages: print_package(pack.id, hashed_packages) else: print_package(desired_package, hashed_packages) print_trucks_mileage(truck1, truck2) print("Most recent delivery: {}".format(current_time.strftime("%H:%M")))