コード例 #1
0
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")))