Fabric Stacks - 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 fabric name (string) and its eco-friendliness rating (integer).
  • Q: What is the output?

    • A: The output is a list of fabric names in the order they would be retrieved from the stack, starting with the least eco-friendly fabric.
  • Q: How should the fabrics be organized?

    • A: The fabrics should be organized in a stack such that the least eco-friendly fabric is at the top of the stack (and thus retrieved first).
  • Q: Are there any constraints on the input, such as the fabrics needing to be sorted?

    • A: The fabrics do not need to be sorted initially; the function will handle sorting by eco-friendliness rating.

P-lan

Plan the solution with appropriate visualizations and pseudocode.

General Idea: Sort the fabrics by their eco-friendliness rating, then push the fabric names onto a stack. Finally, pop the fabrics from the stack to retrieve them in the desired order.

1) Sort the `fabrics` list by the eco-friendliness rating in ascending order.
2) Initialize an empty list called `stack`.
3) For each `fabric` in `fabrics`:
   a) Push the `fabric[0]` (fabric name) onto the `stack`.
4) Initialize an empty list called `organized_fabrics`.
5) While the `stack` is not empty:
   a) Pop the top element from `stack` and append it to `organized_fabrics`.
6) Return the `organized_fabrics` list.

**⚠️ Common Mistakes**

- Forgetting to correctly sort the fabrics by their eco-friendliness rating.
- Not correctly implementing the stack operations (push and pop).

I-mplement

def organize_fabrics(fabrics):
    fabrics.sort(key=lambda x: x[1])  # Sort fabrics by eco-friendliness rating
    stack = []

    for fabric in fabrics:
        stack.append(fabric[0])  # Push fabric names onto the stack

    organized_fabrics = []
    while stack:
        organized_fabrics.append(stack.pop())  # Pop fabrics from the stack in reverse order

    return organized_fabrics