Manage Food Waste - codepath/compsci_guides GitHub Wiki
Unit 4 Session 2 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 goal of the problem?
- A: The goal is to determine if the total food waste in a queue decreases over time as records are processed.
- Q: What are the inputs?
- A: The input is a list of tuples, where each tuple contains a date (in the format
"YYYY-MM-DD"
) and an integer representing the amount of food wasted on that date.
- A: The input is a list of tuples, where each tuple contains a date (in the format
- Q: What are the outputs?
- A: The output is a boolean value:
True
if the food waste decreases over time as records are processed, andFalse
otherwise.
- A: The output is a boolean value:
- Q: How should the waste reduction be managed?
- A: Use a queue to process the waste records and check if each subsequent waste amount is less than the previous one.
- Q: Are there any assumptions about the input?
- A: The list of waste records is well-formed, sorted by date, and contains valid date strings and non-negative integers.
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Use a queue to simulate processing the waste records in the order they are provided. Compare each waste amount with the previous one to check for a decreasing trend.
1) Initialize a queue with the `waste_records`.
2) If the queue is empty, return `True` since no trend can be identified.
3) Dequeue the first element and store its waste amount in `previous_waste`.
4) While the queue is not empty:
a) Dequeue the next element and compare its waste amount with `previous_waste`.
b) If the current waste amount is not less than `previous_waste`, return `False`.
c) Update `previous_waste` with the current waste amount.
5) If all records show a decreasing trend, return `True`.
**⚠️ Common Mistakes**
- Forgetting to correctly dequeue elements from the queue, which could lead to incorrect comparisons.
- Assuming that the queue will always have multiple records, not handling the case of a single record or an empty list.
- Misunderstanding the input format, leading to incorrect processing of the records.
I-mplement
from collections import deque
def manage_food_waste_with_queue(waste_records):
# Initialize a queue with the waste records
waste_queue = deque(waste_records)
# Check if there are no records
if not waste_queue:
return True # No trend can be identified if there are no records
# Initialize the previous waste amount with the waste of the first record
previous_waste = waste_queue.popleft()[1]
# Process each record in the queue
while waste_queue:
current_waste = waste_queue.popleft()[1]
# If the current waste is not less than the previous waste, the trend is not reducing
if current_waste >= previous_waste:
return False
# Update previous waste amount for the next comparison
previous_waste = current_waste
return True
Example Usage:
waste_records_1 = [
("2024-08-01", 150),
("2024-08-02", 120),
("2024-08-03", 100),
("2024-08-04", 80),
("2024-08-05", 60)
]
waste_records_2 = [
("2024-08-01", 150),
("2024-08-02", 180),
("2024-08-03", 160),
("2024-08-04", 140),
("2024-08-05", 120)
]
print(manage_food_waste_with_queue(waste_records_1))
# Output: True
print(manage_food_waste_with_queue(waste_records_2))
# Output: False