Question
In this question, we will write a function to assign ponies for each segment on the path provided. The function should find the best allocation
In this question, we will write a function to assign ponies for each segment on the path provided. The function should find the best allocation according to the following criteria: (the main optimization criterion) 1. Assignment is superior if it has lower total unused pony capacity (an extra heuristic to resolve a tie at criterion 1) 2. Smaller differences between the capacity of two assigned ponies are preferred [Used in Q3 only] (an extra heuristic to resolve a tie at criterion 2) 3. If moves are different, prefer the one with greater elevation raise [Used in Q3 only] (an extra heuristic to resolve a tie at criterion 3) 4. Prefer moves into lower value (x,y) coordinates Here "lower" means (x1,y1)<(x2,y2). The last criterion is used to make our solutions more deterministic. Write a function assign_pony_to_path(elevations, path, capacities) Arguments: elevations a list of rows, where each row is a list of cells, each cell (village) is provided with its absolute elevation level path a list of tuples, each tuple provides (x,y) coordinates for each path segment to take the trolley on. Should start with (0,0) and finish at (M,N) capacities a list of elevations by which every pony can pull the trolley The function should return a list assignments a list of assignments (tuples) for each pair of ponies to a path segment. If there are two possible ways to create a pony pair, then use the one with the smaller value first. For example, if (37, 73) and (73, 37) are both valid pairs, then keep (37, 73). You may assume all inputs are well-formatted.>>> pony_assignments = [(73, 73)] * 6 >>> village_elevations = [[ 100, 200, 300, 400, 100, 600], [0, 100, 200, 300, 400, 500 ]] >>> lower_village_elevations = [[ 10, 20, 30, 40, 10, 60], [0, 10, 20, 30, 40, 50 ]] >>> assign_pony_to_path(village_elevations, journey_path, pony_capacities) [(37, 73), (37, 73), (37, 73), (17, 17), (37, 73), (37, 73)] >>> assign_pony_to_path(lower_village_elevations, journey_path, pony_capacities) [(17, 17), (17, 17), (17, 17), (17, 17), (17, 17), (17, 17)] >>> another_journey_path = [(0,0), (1,0), (1,1), (1,2), (1,3), (1,4), (1,5)] >>> assign_pony_to_path(village_elevations, another_journey_path, pony_capacities) [(17, 17), (37, 73), (37, 73), (37, 73), (37, 73), (37, 73)] >>> impossible_journey_path = [(0,0), (0,1), (0,2), (0,3), (0,4), (0,5), (1,5)] >>> assign_pony_to_path(village_elevations, impossible_journey_path, pony_capacities) [(37, 73), (37, 73), (37, 73), (17, 17), None, (17, 17)]
Hint
It would be a nice idea to use helper functions. For example, possible helper function(s) can (1) compare two assignments and decide which one is better, and/or (2) find the best pony allocation for a given move, etc. Split your logic into defined units, with individual functions for each section of logic!
Using helper functions (instead of having a very long and complicated main function) improves readability and makes your life easier.
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started