Ejemplo n.º 1
0
    def prep_trucks(self):
        # Big O: O(N^2)
        h = HashMap()

        # temporary lists to manage addresses
        truck2_addresses = []
        deadline_addresses = []
        delayed_addresses = []
        delivered_with_addresses = []
        other_addresses = []

        # temporary lists to manage packages
        truck2_packages = []
        deadline_packages = []
        delayed_packages = []
        delivered_with_packages = []
        other_packages = []

        # loads package details for easy assigning and sorting packages
        h.load_package_details("package_details.txt", h)

        # begins the assigning process
        for item in h.items():
            # only applies to the packages that aren't already
            # on a truck or delivered
            if "ON TRUCK" or "DELIVERED" not in item[7]:
                # If it has a deadline (i.e. does not say "EOD" in deadline)
                # this will add it to a separate list
                if "EOD" not in item[4].upper():
                    if item[0] not in deadline_addresses:
                        deadline_addresses.append(item[0])
                # If notes says it must be on truck 2
                # this will add it to a separate list
                if "TRUCK" in item[6].upper():
                    if item[0] not in truck2_addresses:
                        truck2_addresses.append(item[0])
                # If notes says it is delayed
                # this will add it to a separate list
                if "DELAYED" in item[6].upper():
                    if item[0] not in delayed_addresses:
                        delayed_addresses.append(item[0])
                # if notes says it needs to be delivered with ...
                # this will add it to a separate list
                if "DELIVERED WITH" in item[6].upper():
                    a = [int(s) for s in item[6].split() if s.isdigit()]
                    for number in a:
                        if number not in delivered_with_addresses:
                            address = h.get_address(str(number))
                        if address not in delivered_with_addresses:
                            delivered_with_addresses.append(address)
                    if item[0] not in delivered_with_addresses:
                        delivered_with_addresses.append(item[0])
                # this makes a list for everything else
                # without a deadline or without any notes
                if "EOD" in item[4].upper() or "NA" in item[6].upper():
                    if item[0] not in other_addresses:
                        other_addresses.append(item[0])

                # if any overlaps occur between "truck 2", "deadline", or "other"
                # sets priority to truck 2
                for address in truck2_addresses:
                    if address in deadline_addresses:
                        deadline_addresses.remove(address)
                    if address in other_addresses:
                        other_addresses.remove(address)

                # if any overlaps occur between "delayed", "deadline", or "other"
                # sets priority to delayed
                for address in delayed_addresses:
                    if address in deadline_addresses:
                        deadline_addresses.remove(address)
                    if address in other_addresses:
                        other_addresses.remove(address)

                # if any overlaps occur between "delivered with", "deadline", or "other"
                # set priority to delivered_with_addresses
                for address in delivered_with_addresses:
                    if address in deadline_addresses:
                        deadline_addresses.remove(address)
                    if address in other_addresses:
                        other_addresses.remove(address)

                # if any overlaps occur between deadline and "other"
                # set priority to deadline_addresses
                for address in deadline_addresses:
                    if address in other_addresses:
                        other_addresses.remove(address)

        # gets package IDs for addresses assigned to specific lists
        truck2_packages = self.reform_list(h, truck2_addresses)
        deadline_packages = self.reform_list(h, deadline_addresses)
        delayed_packages = self.reform_list(h, delayed_addresses)
        delivered_with_packages = self.reform_list(h, delivered_with_addresses)
        other_packages = self.reform_list(h, other_addresses)

        # sends each list through a double check function finding
        # and finds any with "wrong address" and assigns them to truck 3
        new_truck2 = self.double_check(h, truck2_packages)
        new_deadline = self.double_check(h, deadline_packages)
        new_delayed = self.double_check(h, delayed_packages)
        new_delivered_with = self.double_check(h, delivered_with_packages)
        new_other = self.double_check(h, other_packages)

        # merges package lists, assigns list to trucks
        self.truck_1_packages(h, new_deadline, new_delivered_with)
        self.truck_2_packages(h, new_truck2, new_delayed)
        self.truck_3_packages(h, new_other)

        return self.truck_1, self.truck_2, self.truck_3