Add solution for day 1
commit
0326b26027
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,87 @@
|
||||||
|
"""
|
||||||
|
--- Day 1: Calorie Counting ---
|
||||||
|
|
||||||
|
Santa's reindeer typically eat regular reindeer food, but they need a
|
||||||
|
lot of magical energy to deliver presents on Christmas. For that, their
|
||||||
|
favorite snack is a special type of star fruit that only grows deep in
|
||||||
|
the jungle. The Elves have brought you on their annual expedition to
|
||||||
|
the grove where the fruit grows.
|
||||||
|
|
||||||
|
To supply enough magical energy, the expedition needs to retrieve a
|
||||||
|
minimum of fifty stars by December 25th. Although the Elves assure you
|
||||||
|
that the grove has plenty of fruit, you decide to grab any fruit you
|
||||||
|
see along the way, just in case.
|
||||||
|
|
||||||
|
Collect stars by solving puzzles. Two puzzles will be made available on
|
||||||
|
each day in the Advent calendar; the second puzzle is unlocked when you
|
||||||
|
complete the first. Each puzzle grants one star. Good luck!
|
||||||
|
|
||||||
|
The jungle must be too overgrown and difficult to navigate in vehicles
|
||||||
|
or access from the air; the Elves' expedition traditionally goes on
|
||||||
|
foot. As your boats approach land, the Elves begin taking inventory of
|
||||||
|
their supplies. One important consideration is food - in particular,
|
||||||
|
the number of Calories each Elf is carrying (your puzzle input).
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
For example, suppose the Elves finish writing their items' Calories and
|
||||||
|
end up with the following list:
|
||||||
|
|
||||||
|
1000
|
||||||
|
2000
|
||||||
|
3000
|
||||||
|
|
||||||
|
4000
|
||||||
|
|
||||||
|
5000
|
||||||
|
6000
|
||||||
|
|
||||||
|
7000
|
||||||
|
8000
|
||||||
|
9000
|
||||||
|
|
||||||
|
10000
|
||||||
|
|
||||||
|
This list represents the Calories of the food carried by five Elves:
|
||||||
|
|
||||||
|
- The first Elf is carrying food with 1000, 2000, and 3000 Calories, a
|
||||||
|
total of 6000 Calories.
|
||||||
|
- The second Elf is carrying one food item with 4000 Calories.
|
||||||
|
- The third Elf is carrying food with 5000 and 6000 Calories, a total
|
||||||
|
of 11000 Calories.
|
||||||
|
- The fourth Elf is carrying food with 7000, 8000, and 9000 Calories, a
|
||||||
|
total of 24000 Calories.
|
||||||
|
- The fifth Elf is carrying one food item with 10000 Calories.
|
||||||
|
|
||||||
|
In case the Elves get hungry and need extra snacks, they need to know
|
||||||
|
which Elf to ask: they'd like to know how many Calories are being
|
||||||
|
carried by the Elf carrying the most Calories. In the example above,
|
||||||
|
this is 24000 (carried by the fourth Elf).
|
||||||
|
|
||||||
|
Find the Elf carrying the most Calories. How many total Calories is
|
||||||
|
that Elf carrying?
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open("input.txt", "r", encoding="utf-8") as f:
|
||||||
|
calories_per_elf = [0]
|
||||||
|
|
||||||
|
for line in f:
|
||||||
|
if line.strip():
|
||||||
|
calories_per_elf[-1] += int(line.strip())
|
||||||
|
else:
|
||||||
|
calories_per_elf.append(0)
|
||||||
|
continue
|
||||||
|
|
||||||
|
highest_calories = max(*calories_per_elf)
|
||||||
|
index_of_highest = calories_per_elf.index(highest_calories)
|
||||||
|
|
||||||
|
print(f"Elf #{index_of_highest+1} is carrying {highest_calories} calories")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,49 @@
|
||||||
|
"""
|
||||||
|
--- Part Two ---
|
||||||
|
|
||||||
|
By the time you calculate the answer to the Elves' question, they've
|
||||||
|
already realized that the Elf carrying the most Calories of food might
|
||||||
|
eventually run out of snacks.
|
||||||
|
|
||||||
|
To avoid this unacceptable situation, the Elves would instead like to
|
||||||
|
know the total Calories carried by the top three Elves carrying the
|
||||||
|
most Calories. That way, even if one of those Elves runs out of snacks,
|
||||||
|
they still have two backups.
|
||||||
|
|
||||||
|
In the example above, the top three Elves are the fourth Elf (with
|
||||||
|
24000 Calories), then the third Elf (with 11000 Calories), then the
|
||||||
|
fifth Elf (with 10000 Calories). The sum of the Calories carried by
|
||||||
|
these three elves is 45000.
|
||||||
|
|
||||||
|
Find the top three Elves carrying the most Calories. How many Calories
|
||||||
|
are those Elves carrying in total?
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
|
with open("input.txt", "r", encoding="utf-8") as f:
|
||||||
|
calories_per_elf = [0]
|
||||||
|
|
||||||
|
for line in f:
|
||||||
|
if line.strip():
|
||||||
|
calories_per_elf[-1] += int(line.strip())
|
||||||
|
else:
|
||||||
|
calories_per_elf.append(0)
|
||||||
|
continue
|
||||||
|
|
||||||
|
total_highest_calories = 0
|
||||||
|
highest_calories = max(*calories_per_elf)
|
||||||
|
index_of_highest = calories_per_elf.index(highest_calories)
|
||||||
|
i = 3
|
||||||
|
while i > 0:
|
||||||
|
total_highest_calories += calories_per_elf[index_of_highest]
|
||||||
|
calories_per_elf.pop(index_of_highest)
|
||||||
|
highest_calories = max(*calories_per_elf)
|
||||||
|
index_of_highest = calories_per_elf.index(highest_calories)
|
||||||
|
i -= 1
|
||||||
|
|
||||||
|
print(f"The three elves carrying the most calories together have {total_highest_calories} calories")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
|
@ -0,0 +1,14 @@
|
||||||
|
1000
|
||||||
|
2000
|
||||||
|
3000
|
||||||
|
|
||||||
|
4000
|
||||||
|
|
||||||
|
5000
|
||||||
|
6000
|
||||||
|
|
||||||
|
7000
|
||||||
|
8000
|
||||||
|
9000
|
||||||
|
|
||||||
|
10000
|
Loading…
Reference in New Issue