You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
import os
|
|
|
|
from entities.items.food import Food
|
|
from entities.elf import Elf
|
|
|
|
|
|
class CalorieList:
|
|
"""
|
|
Day 1 - Calorie List
|
|
|
|
The Elves take turns writing down the number of Calories contained by the various meals, snacks, rations, etc. that they've brought with them, one item per line.
|
|
Each Elf separates their own inventory from the previous Elf's inventory (if any) by a blank line.
|
|
"""
|
|
|
|
def __init__(self, path: str):
|
|
if not os.path.isfile(path):
|
|
raise FileNotFoundError(f"File was not found or isn't a file: {path}")
|
|
|
|
self.file_path = path
|
|
|
|
def parse_file(self):
|
|
"""
|
|
read the file and parse its contents
|
|
:return:
|
|
"""
|
|
elf_invs = []
|
|
with open(self.file_path, "r") as file:
|
|
curr_elf_inventory = []
|
|
for line in file:
|
|
line = line.replace("\n", "")
|
|
if line.isnumeric():
|
|
curr_elf_inventory.append(int(line))
|
|
elif len(line) == 0: # line is empty, next inventory
|
|
elf_invs.append(curr_elf_inventory)
|
|
curr_elf_inventory = list()
|
|
else:
|
|
raise ValueError(f"Unexpected line encountered in calorie list file: {line}")
|
|
elf_invs.append(curr_elf_inventory)
|
|
|
|
elves = []
|
|
for inv in elf_invs:
|
|
elf = Elf()
|
|
for calories in inv:
|
|
elf.add_to_inventory(Food(calories))
|
|
elves.append(elf)
|
|
|
|
return elves
|
|
|