Supply Chain - codepath/compsci_guides GitHub Wiki

Unit 4 Session 1 Advanced (Click for link to problem statements)

U-nderstand

Understand what the interviewer is asking for by using test cases and questions about the problem.

  • Q: What is the structure of the input?

    • A: The input is a list of tuples, where each tuple contains a supply name (string) and its priority level (integer).
  • Q: What is the output?

    • A: The output is a list of supply names in the order they would be processed, with higher priority supplies processed first.
  • Q: How should the supplies be processed?

    • A: The supplies should be processed based on their priority, with the highest priority supplies processed first.
  • Q: Are there any constraints on the input, such as the supplies needing to be pre-sorted?

    • A: The supplies do not need to be pre-sorted; the function will handle sorting by priority.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Sort the supplies by their priority in descending order, then process them in that order.

1) Sort the `supplies` list by the priority level in descending order.
2) Initialize a `deque` to store the supply names in the sorted order.
3) For each `supply` in `supplies`:
   a) Enqueue the `supply[0]` (supply name) into the `deque`.
4) Initialize an empty list called `processed_supplies`.
5) While the `deque` is not empty:
   a) Dequeue the first element from the `deque` and append it to `processed_supplies`.
6) Return the `processed_supplies` list.

**⚠️ Common Mistakes**

- Forgetting to correctly sort the supplies by their priority level.
- Mismanaging the deque operations (enqueue and dequeue).

I-mplement

from collections import deque

def process_supplies(supplies):
    supplies.sort(key=lambda x: -x[1])  # Sort supplies by priority in descending order
    queue = deque(supply[0] for supply in supplies)  # Enqueue the supplies in sorted order

    processed_supplies = []
    while queue:
        processed_supplies.append(queue.popleft())  # Process supplies in the order they are dequeued

    return processed_supplies