init commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
# Derek Holloway 010396173
|
||||
|
||||
import datetime
|
||||
import AssignmentData
|
||||
import UI
|
||||
from MyHashTable import DerekHashTable
|
||||
from Truck import Truck
|
||||
from DeliveryObject import deliveryStatus
|
||||
|
||||
def main():
|
||||
|
||||
UserUI = UI.DataUI() # Load in the UI library
|
||||
globalTime = datetime.time(8, 0)
|
||||
|
||||
package_hash = DerekHashTable() # Init the hash table
|
||||
for pkg in AssignmentData.packages: # Load the packages into the hash table
|
||||
pkg.status = deliveryStatus.AT_THE_HUB
|
||||
package_hash.addItem(pkg.id, pkg)
|
||||
|
||||
truck1 = Truck("1") # Init truck 1 starting at 8:00
|
||||
truck1.startTime = datetime.time(8, 0)
|
||||
|
||||
truck2 = Truck("2") # Init truck 2 starting at 9:15 -> Delayed for package 6
|
||||
truck2.startTime = datetime.time(9, 5)
|
||||
|
||||
truck3 = Truck("3") # Init truck 3 starting as soon as the fastest truck returned
|
||||
truck3.startTime = None
|
||||
|
||||
pauseTime = UserUI.TimePrompt(globalTime, truck1, truck2, truck3, package_hash) # start the first time prompt
|
||||
|
||||
noRequirements = [1,2,4,5,7,8,10,11,12,17,21,22,23,24,26,27,29,30,31,33,34,35,37,39,40]
|
||||
truck2Only = [3,18,36,38]
|
||||
delayed = [6,9,25,28,32]
|
||||
sameTruck = [13,14,15,16,19,20]
|
||||
|
||||
# Package requirements
|
||||
priority = [1,6,13,14,15,16,21,25,29,30,31,34,37,40]
|
||||
priority_hash = DerekHashTable() # Load the priority packages into a hash for quick lookup
|
||||
for cur in priority:
|
||||
priority_hash.addItem(cur, cur)
|
||||
|
||||
# Sort the known packages
|
||||
t1_load = sameTruck # Start with the packages that requrie the same truck
|
||||
t2_load = truck2Only + delayed # add in the truck 2 only and the delays
|
||||
t3_load = [] # create an empty list
|
||||
|
||||
# Sort the Unknown packages
|
||||
for i, v in enumerate(noRequirements): # enumerate through all the packages not predefined
|
||||
if priority_hash.getItem(v): # if the item is a priority item
|
||||
if len(t1_load) < 16: # load priorities on truck 1 first as it leaves earlier
|
||||
t1_load.append(v)
|
||||
elif len(t2_load) < 16: # fallback to truck 2
|
||||
t2_load.append(v)
|
||||
else: # fallback again to truck 3
|
||||
t3_load.append(v)
|
||||
else:
|
||||
if len(t3_load) < 16: # non priority pkgs default to truck 3 as it leaves last
|
||||
t3_load.append(v)
|
||||
elif len(t2_load) < 16: # fall back to truck 2
|
||||
t2_load.append(v)
|
||||
elif len(t1_load) < 16: # fallback again to truck 1
|
||||
t1_load.append(v)
|
||||
|
||||
# Run the simulation until all the packages have been delivered
|
||||
debounce1 = True
|
||||
debounce2 = True
|
||||
debounce3 = True
|
||||
truck3LoadDebounce = True
|
||||
while True:
|
||||
|
||||
# update global time
|
||||
if globalTime >= datetime.time(10, 20): # If the time is correct for update
|
||||
pkg9 = package_hash.getItem(9) # Handle the Package #9 address correction before Truck 3 starts
|
||||
pkg9.address = "410 S State St"
|
||||
|
||||
# load packages for truck 1
|
||||
if globalTime >= truck1.startTime and debounce1: # If its time to laod the packages, run once
|
||||
debounce1 = False # set debounce for only one run
|
||||
truck1.hasLoad = True # Set the truck load variable
|
||||
for pkg_id in t1_load: # Load the packages in truck 1
|
||||
truck1.addPkg(package_hash.getItem(pkg_id))
|
||||
|
||||
# load packages for truck 2
|
||||
if globalTime >= truck2.startTime and debounce2: # If its time to laod the packages, run once
|
||||
debounce2 = False # set debounce for only one run
|
||||
truck2.hasLoad = True # Set the truck load variable
|
||||
for pkg_id in t2_load: # Load the packages in truck 2
|
||||
truck2.addPkg(package_hash.getItem(pkg_id))
|
||||
|
||||
# load packages for truck 3
|
||||
if globalTime >= truck3.startTime and debounce3: # If its time to laod the packages, run once
|
||||
debounce3 = False # set debounce for only one run
|
||||
truck2.hasLoad = True # Set the truck load variable
|
||||
for pkg_id in t2_load: # Load the packages in truck 2
|
||||
truck2.addPkg(package_hash.getItem(pkg_id))
|
||||
|
||||
# deliver packages for truck 1
|
||||
if truck1.hasLoad and globalTime >= truck1.getTimeOfDay(): # if there is more packages and the time has passed
|
||||
packagesLeft = truck1.driveNextClosest(priority_hash) # deliver the next set of packages
|
||||
if packagesLeft == 0 and truck3LoadDebounce: # if all the packages are delivered
|
||||
truck3LoadDebounce = False # set the debouce
|
||||
truck3.startTime = truck1.getTimeOfDay() # set truck3 start time
|
||||
|
||||
# deliver packages for truck 2
|
||||
if truck2.hasLoad and globalTime >= truck2.getTimeOfDay(): # if there is more packages and the time has passed
|
||||
packagesLeft = truck2.driveNextClosest(priority_hash) # deliver the next set of packages
|
||||
if packagesLeft == 0 and truck3LoadDebounce: # if all the packages are delivered
|
||||
truck3LoadDebounce = False # set the debouce
|
||||
truck3.startTime = truck1.getTimeOfDay() # set truck3 start time
|
||||
|
||||
# deliver packages for truck 3
|
||||
if truck3.hasLoad and globalTime >= truck3.getTimeOfDay(): # if there is more packages and the time has passed
|
||||
truck3.driveNextClosest(priority_hash) # deliver the next set of packages
|
||||
|
||||
# Calculate new global time
|
||||
totalMins = (globalTime.hour * 60) + globalTime.minute + 5 # Get total mins and add 30
|
||||
offsetHour = (totalMins // 60) % 24 # pull hours back out
|
||||
offsetMins = totalMins % 60 # pull minutes back out
|
||||
globalTime = datetime.time(offsetHour, offsetMins) # return the time of day
|
||||
|
||||
# if we are done delivering
|
||||
if (truck3.hasLoad == False and truck2.hasLoad == False and truck1.hasLoad == False):
|
||||
break
|
||||
|
||||
UserUI.MainSelectionPrompt(truck1, truck2, truck3, package_hash) # Display the command prompt Menus
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user