2021 Day 25 Part 1

This commit is contained in:
Akumatic 2021-12-25 21:32:39 +01:00
parent cb067ecef9
commit bf2efe4d5a
7 changed files with 525 additions and 3 deletions

303
2021/25/README.md Normal file
View File

@ -0,0 +1,303 @@
# 2021 Day 25: Sea Cucumber
Copyright (c) Eric Wastl
#### [Direct Link](https://adventofcode.com/2021/day/25)
## Part 1
This is it: the bottom of the ocean trench, the last place the sleigh keys could be. Your submarine's experimental antenna **still isn't boosted enough** to detect the keys, but they **must** be here. All you need to do is **reach the seafloor** and find them.
At least, you'd touch down on the seafloor if you could; unfortunately, it's completely covered by two large herds of [sea cucumbers](https://en.wikipedia.org/wiki/Sea_cucumber), and there isn't an open space large enough for your submarine.
You suspect that the Elves must have done this before, because just then you discover the phone number of a deep-sea marine biologist on a handwritten note taped to the wall of the submarine's cockpit.
"Sea cucumbers? Yeah, they're probably hunting for food. But don't worry, they're predictable critters: they move in perfectly straight lines, only moving forward when there's space to do so. They're actually quite polite!"
You explain that you'd like to predict when you could land your submarine.
"Oh that's easy, they'll eventually pile up and leave enough space for-- wait, did you say submarine? And the only place with that many sea cucumbers would be at the very bottom of the Mariana--" You hang up the phone.
There are two herds of sea cucumbers sharing the same region; one always moves **east** (`>`), while the other always moves **south** (`v`). Each location can contain at most one sea cucumber; the remaining locations are **empty** (`.`). The submarine helpfully generates a map of the situation (your puzzle input). For example:
```
v...>>.vv>
.vv>>.vv..
>>.>v>...v
>>v>>.>.v.
v>v.vv.v..
>.>>..v...
.vv..>.>v.
v.v..>>v.v
....v..v.>
```
Every **step**, the sea cucumbers in the east-facing herd attempt to move forward one location, then the sea cucumbers in the south-facing herd attempt to move forward one location. When a herd moves forward, every sea cucumber in the herd first simultaneously considers whether there is a sea cucumber in the adjacent location it's facing (even another sea cucumber facing the same direction), and then every sea cucumber facing an empty location simultaneously moves into that location.
So, in a situation like this:
```
...>>>>>...
```
After one step, only the rightmost sea cucumber would have moved:
```
...>>>>.>..
```
After the next step, two sea cucumbers move:
```
...>>>.>.>.
```
During a single step, the east-facing herd moves first, then the south-facing herd moves. So, given this situation:
```
..........
.>v....v..
.......>..
..........
```
After a single step, of the sea cucumbers on the left, only the south-facing sea cucumber has moved (as it wasn't out of the way in time for the east-facing cucumber on the left to move), but both sea cucumbers on the right have moved (as the east-facing sea cucumber moved out of the way of the south-facing sea cucumber):
```
..........
.>........
..v....v>.
..........
```
Due to **strong water currents** in the area, sea cucumbers that move off the right edge of the map appear on the left edge, and sea cucumbers that move off the bottom edge of the map appear on the top edge. Sea cucumbers always check whether their destination location is empty before moving, even if that destination is on the opposite side of the map:
```
Initial state:
...>...
.......
......>
v.....>
......>
.......
..vvv..
After 1 step:
..vv>..
.......
>......
v.....>
>......
.......
....v..
After 2 steps:
....v>.
..vv...
.>.....
......>
v>.....
.......
.......
After 3 steps:
......>
..v.v..
..>v...
>......
..>....
v......
.......
After 4 steps:
>......
..v....
..>.v..
.>.v...
...>...
.......
v......
```
To find a safe place to land your submarine, the sea cucumbers need to stop moving. Again consider the first example:
```
Initial state:
v...>>.vv>
.vv>>.vv..
>>.>v>...v
>>v>>.>.v.
v>v.vv.v..
>.>>..v...
.vv..>.>v.
v.v..>>v.v
....v..v.>
After 1 step:
....>.>v.>
v.v>.>v.v.
>v>>..>v..
>>v>v>.>.v
.>v.v...v.
v>>.>vvv..
..v...>>..
vv...>>vv.
>.v.v..v.v
After 2 steps:
>.v.v>>..v
v.v.>>vv..
>v>.>.>.v.
>>v>v.>v>.
.>..v....v
.>v>>.v.v.
v....v>v>.
.vv..>>v..
v>.....vv.
After 3 steps:
v>v.v>.>v.
v...>>.v.v
>vv>.>v>..
>>v>v.>.v>
..>....v..
.>.>v>v..v
..v..v>vv>
v.v..>>v..
.v>....v..
After 4 steps:
v>..v.>>..
v.v.>.>.v.
>vv.>>.v>v
>>.>..v>.>
..v>v...v.
..>>.>vv..
>.v.vv>v.v
.....>>vv.
vvv>...v..
After 5 steps:
vv>...>v>.
v.v.v>.>v.
>.v.>.>.>v
>v>.>..v>>
..v>v.v...
..>.>>vvv.
.>...v>v..
..v.v>>v.v
v.v.>...v.
...
After 10 steps:
..>..>>vv.
v.....>>.v
..v.v>>>v>
v>.>v.>>>.
..v>v.vv.v
.v.>>>.v..
v.v..>v>..
..v...>v.>
.vv..v>vv.
...
After 20 steps:
v>.....>>.
>vv>.....v
.>v>v.vv>>
v>>>v.>v.>
....vv>v..
.v.>>>vvv.
..v..>>vv.
v.v...>>.v
..v.....v>
...
After 30 steps:
.vv.v..>>>
v>...v...>
>.v>.>vv.>
>v>.>.>v.>
.>..v.vv..
..v>..>>v.
....v>..>v
v.v...>vv>
v.v...>vvv
...
After 40 steps:
>>v>v..v..
..>>v..vv.
..>>>v.>.v
..>>>>vvv>
v.....>...
v.v...>v>>
>vv.....v>
.>v...v.>v
vvv.v..v.>
...
After 50 steps:
..>>v>vv.v
..v.>>vv..
v.>>v>>v..
..>>>>>vv.
vvv....>vv
..v....>>>
v>.......>
.vv>....v>
.>v.vv.v..
...
After 55 steps:
..>>v>vv..
..v.>>vv..
..>>v>>vv.
..>>>>>vv.
v......>vv
v>v....>>v
vvv...>..>
>vv.....>.
.>v.vv.v..
After 56 steps:
..>>v>vv..
..v.>>vv..
..>>v>>vv.
..>>>>>vv.
v......>vv
v>v....>>v
vvv....>.>
>vv......>
.>v.vv.v..
After 57 steps:
..>>v>vv..
..v.>>vv..
..>>v>>vv.
..>>>>>vv.
v......>vv
v>v....>>v
vvv.....>>
>vv......>
.>v.vv.v..
After 58 steps:
..>>v>vv..
..v.>>vv..
..>>v>>vv.
..>>>>>vv.
v......>vv
v>v....>>v
vvv.....>>
>vv......>
.>v.vv.v..
```
In this example, the sea cucumbers stop moving after **`58`** steps.
Find somewhere safe to land your submarine. **What is the first step on which no sea cucumbers move?**

60
2021/25/code.py Normal file
View File

@ -0,0 +1,60 @@
# SPDX-License-Identifier: MIT
# Copyright (c) 2021 Akumatic
#
# https://adventofcode.com/2021/day/25
def parse_lines(lines: list) -> dict:
x, y = len(lines[0]), len(lines)
return {"x": x, "y": y, "grid": {(i, j): lines[j][i] for j in range(y) for i in range(x)}}
def read_file(filename: str = "input.txt") -> list:
with open(f"{__file__.rstrip('code.py')}{filename}", "r") as f:
return parse_lines([line for line in f.read().strip().split("\n")])
def move_herd(data: dict, herd: str) -> dict:
new = {"x": data["x"], "y": data["y"], "grid": dict()}
# take care of all moving cucumbers
moving_positions = [pos for pos in data["grid"] if data["grid"][pos] == herd]
for position in moving_positions:
if can_move(data, position):
new["grid"][get_next_position(data, position)] = data["grid"][position]
new["grid"][position] = "."
else: # position not in new["grid"]:
new["grid"][position] = data["grid"][position]
# take care of every other location
for position in data["grid"]:
if position not in new["grid"]:
new["grid"][position] = data["grid"][position]
return new
def move_all(data: dict) -> dict:
return move_herd(move_herd(data, ">"), "v")
def get_next_position(data: dict, position: tuple) -> tuple:
if data["grid"][position] == "v":
return (position[0], (position[1] + 1) % data["y"])
else: #data["grid"][position] == ">":
return ((position[0] + 1) % data["x"], position[1])
def can_move(data: dict, position: tuple) -> bool:
if data["grid"][position] == ".":
return False
return data["grid"][get_next_position(data, position)] == "."
def count_possible_steps(data: dict) -> int:
return sum(int(can_move(data, pos)) for pos in data["grid"])
def part1(data: dict) -> int:
count = 1
while count_possible_steps(data) > 0:
data = move_all(data)
count += 1
return count
def part2(data: dict) -> int:
return 0 # not doable until all other 49 stars are done
if __name__ == "__main__":
vals = read_file()
print(f"Part 1: {part1(vals)}")
print(f"Part 2: {part2(vals)}")

137
2021/25/input.txt Normal file
View File

@ -0,0 +1,137 @@
...>..>..>vv>.>v..>..>>v.v...>.v.>......v.>>..>>v.v.vv.>.>.v..>..vv..>.>>vv..v>v>vv>.>...v.>.>.>v>v>.>>v..v..v..>...>.v...>.>>>...>v.v>>v>v
>vvv>vv..>..v...>>.v>>>v..>v..vv>vv..>>.vv..>...v...>..>.v.v>.>..>..>>.>v...>.v.v>......>v..v.v>......>.v.v..>...>...>.v.>>>v>vv....v.>v.>.
.>.v..>..v.vv>.>>.v.>...>..>>v.vv.v.>>..vv.>vvv>...>.>.......v.>>>.v>vv>>.....>.>vv..vv.vv.v>..>..v.v.vvv>..vv>.v.vvvvv.v.>..vv.>v>v.>..vv.
.vvv...v.....v..vv>>.>.>..>v..>v.v..>>>vv>.>vv>...>v>.>......v>>.v..>.v>...v>...>.vv..>>.>>.v..v....>..>vvv..vv.v.>..v..v.>v.>...v>>.>.>v..
>>>..vv>.>..>>.v.v...>>...v>vv.....v.v..v.vvvvv....>..v>.>.v.>...>>......>.vv.v.v.v>>.>..>>.vv..>.>.v...>>>v..v>..v.vv>>..v..>.....>vvv...>
...vv.>..>....v>>>>.v...>...>.>vv....>.....>v>v.v...>>..........>...>>.....v>v>..>v>..........>.....>v>..>v>v.....v>>>v...v>vv.v>v.v>v..v>v
>..>..>>.v.....>.v.v..v.vv>v.v......>v>v.v>...>>...v>.v.v>.>......>>>>.>v.>>vv>>vv>.>.>>.v..>v.......v>v..v..>vvvvv....>...v>vv.>v..>v.vv..
..v>v>vv.>..>v.v>.>v.vv...>.vv>.v.v>.>vv.v>.>v.v..>>..>v.v>...>>.>.....v..v.>.>v>.>>>..v>v.v..v>.....>>.....>.v.v.v.>vv.>v.>v>v..v>>>>.v.>.
.>vvv>.v>v>vv>>.vv>.vv>v>....>..v.>vv..v>.>.>.v..>.v...>>v>.v.>.>>.>....>..>...>.>...vv>.v...>...v>..vvv...v.......>>v.>v.v>v>v.v>.>.>v..vv
...>>vvv..>v.>v......vv.>vv>vvvv>.>>...>vv>v>>.>vv..vv..v....vv.vvv>.v.v>v.>>..>v>.v>>....>..vvv......v>.>vv>..>>.v>..>.v>.v.......v.v..>.>
...v>.v..v>>v.v.vv>.vvv.>vvvvv..>.....v.......>.v.v.vvv.v.v...vv..v>>v>>>>..>...v>>>>.vv.>>v.>........vv.vv.vv>>vv.>..vvv...>.>......v.>..v
v.v>vv.>vv>vvv...vv.vv...>...>>...vv.>.vv.v>>..>..>......vv.....>..v..v.>v>.>>vv...v..>.v.v.....vvv.v>.v.vv......v....v....v.>>>.v..>v>....
..v.>..>>>v.....>vv..>>.>>...v.v>v....>..v.v>..v...v..vvv.v>....>>v>.>.>...>v..>..>v.>>>v.>>.>vv>.>v>.>.>>.v.>>..>..vv.v>v....>>>vv..v>....
.>...v>.vv>>..v.v..v.v.vv..v>.>>v..vv>.....v>....>...v......v>.>v>.>..>..>>v.>>>.vv...>>.v>.>>.>.>v>>......v.v...>v..v.>>>v>v..>.v.vvv>>.v.
...v....vv..v.>>.>>.>..>.vv.>.>>>..>..vv..v>.>>v.>..v....vv>....v....v...v.v..vvv.v.v>.vv>.v>..vv.>v.vv>vv....>...>........>...>.>.....vvv>
.v.>........v..>.vv>>vv......v..vv..>>>>>v...v>>v>..vv.>..>v>..vv.vv.>v.v.>.>...v..>>>..vv>.v.v>...>>..>.v>v>>v.>....vv..vv.v.....>v>.>.>.>
.>.v..>v....v>..v>v....v>vv....v>>..vv.>...>.>..>..v.v.>v...vv..v.>....v>>.>vvvvvv..v.>..v.v>..v>>...>.v.>>>..vv.v.>....v>.>v>>.vv.>.v..v..
>>..vvv...v..v.v...>.v.>..>...>.>v>.v.v>v..v.v>..vv>>>..vv..>v.v.>..vv....>v.>>.v...v>v.v>...>v>v......>.>>.>.v.>.>v>>vvv.>v..>...>>v>v..>.
>..v>.v.>v>vvv.v...v>v>..v>.>...v.>..v....>..>.....>..>v....v..vv.v>>v>>...vv...>vv>>.>.>.>.v.....>..v>>.v.>v>v>>..>v>....>.>>.v>.>v>.v.vv.
..vv.>....v..vv>...v>>>v>v>.>.v.>>.vv.v.vv...>.>...>.v>..>v.>v.>>v.v>.>v..v.>>..>.v.>>vvv...v..vv.vv.vvv>...>.v.>>v..vv.>..v..v>..>v>>.....
..v...v>...>>.>.v.v..>..v..>..>>>>vv.v.......v>..v....v.v..v>v.>.....v..vv>.vv..v>>v.>>>..>v.>..vv>.>.v>...v>.v.v>.>..>.>..>..>..v...v>.v..
vv.>v.>.vv>.v.v.vv..>v.v>>>>v..v.v>v>>>>>..>vvv..>.v....>>v....>.>..v>.>...v>vv..v>.>v.v..v...v.....>>>>v.vv..v.v..>v>..v>>>..>>vvv.v>.>vv.
v.>..>>.v>v..>v..vv.v>>vv>..>...>vv...>>..>>v>>..v.v..vv.>....v.>.......>v..v...>v.v>>....vvv..>....>>v>..v.>.v...v..>.v>...>v>v>.>v>.>v..v
v>...v>..>...>>...v....vv>>>.....>.>vv.v..>.v.v.v...v>v.v.v.....vv.>>.vvvv..v...>...vv>...>v.v>.>v.>>>>>v>.>>>>......>.>>.>>v.>.>>>>vv.>..>
>.>..v..v>.....>...v..>.>>.>v>...>v.>>..>..v.>>.v>>.v>>>..v.v.....v...v...v..v...>.v>.vvv...>>..v>>.>..>.v...>..v>v..>...vv>v.>..vv>>..>.v.
.v.vv...v>..>>.......vv>..v.v>v.>..v....v.>v.>>.v..v.v..vv.v.v.>>...v>vvv>>..>v>....v...v>>vv...v>...v>.v..vv>..>..>.......>>..>v>>vv..v.v>
..vv>..v...v.>>vv...>.v.....v>>.........v>v>.>...v>>.>.>v>.>.>..>>>.v.v..vv...>..>>v.v..>..>.>>>.v>..vv.>>v.>>v>..v.v....v...>..v..>>...vv.
.v...v.>v......>.>>v>...v.....vv..v.>.>>.>v..>...vvv.v>....>v>>.....>v...vv>v..>>.>v.>>.v..v..>v>.....>..vvv.vv.>.vv....>....>.>>.....v>...
..>.v......v.>....>vv..v>>v.>.v...>>...>.....v.vv>>.vvvvv.v...v..v.vv>.....vv.vvv...vv>....>.>v...>>>v>..v.v>.v>..v.>..>.>>..v..>..>.>.>v>>
v...vv..v..v>>.vv.>>.v..>v>....vv>v>.>.v>v.>..v.>....v>>.>...vv>.>.>.v.vvv...v....vv>>v...>.vv.v..v.v.vv.v..v.v...>>>.>.>>>>>..v>v>.v.>v.>.
v>.v.v>v..v>vvv....>vv>vv..v..>vv.>v>v..>..vv>>v..v..>.v...v.>>...>.......v>.v>...>v.vv.>...>.v.>>.>>.>>.v>.v....>..>v...>..>.>>.v>v>..>.v.
v>v.>.>>..>.v>v.vvv.>>>>>>.>....v.>>>.>v.v...>vv.>>>v..v>.>>v>vvv...v>v.....v.v>.v.>.>.vv.>v.......v..>v>>.v.>.>.v..vv>.>>>..>v>vvv.v>...v.
....v..v>...v>.>v.vv..v>>v.vv>..>.........v..>>.>.v....vv..v.>v..vvv.v....>..>.vvv.v>..v.>....v>.v.>v>v.v.>..v..>vv.....>>>vv.v.>v>>v>>>..>
...>.vv>..vv.>.v.>>v>>v...>..>.>>>>.>vv.>..>..v.>.>vv.v>..v>vvv>.vv....v.v.>.>.>..vv....v.vvv.vv>v>>>.......>v.>.....>..>.v>.>.>.v.>v.>>..v
..vv.>...>>vvv>..v..>..v..>vv.>.vvv>.v.>...vv>.....>.>vv.vv>.>..>vv.vv.vv>.vv...vv.vv.vv..>.>.>.>....>.>v.vv>.v.>......v>v>.vv.>......v.>..
v>vvv>>>.v..>v.v>v.v>>.v>.>>v>.>.>....vv>v.v>......v>..>..>>v>..>>...>v.......>..v.>.>vv.>>>...>>...v.v....>>..>.>.vv..>>vvv...>vv>>..>...>
v.vv.v.>.v..v...>..>.v...>v.>.>..v.>.>v..>>>.>...>vv.>>..v.>...>v>..>v....v..>..>>v>>..v..v...v.v.....>v>...v.>vvvv.>.>.>.v..>v>>v>>>v.>.>>
..vvv...v.v.>v...v>>....>v>>.>..>.>v>v...v.v.......v>vv...vvvv>..>.v...>.v>..vv>>.....>>>v.>..v>.>>.vv..v.v>.>.......>>.v..v..v>v>>>>.....v
.v>vv.>.>>.>v..>v....v>..>>>vv..>..v.>vv>>.v>v.......>>..v.>>>vv..v..vvvvvv.>>v..v.vv>.vv....vv..v.v.>v>..v.>>>>..v.v...>>v>......v.>.>....
v.>.vv>..>v.......>>>.>.....>>.>>.>.v>>...>v.v...v.>.>vv>.vv>.>v.v.>.>>v.>vv.>>vv...>v.v....v.v.>>.>>>v>.>.>>v..v...>vv>...>>v.....>>v>v>vv
>.v...v..v>v..>v..v....v>...v.>.v..>v.v>>....v>...>vv...v>.vv...>>.v.>..v.v>>.>v.v>.>.v..>.v.....>v.v>v.>v>v.>v>.>v...>.>>..>>v...v.v>.v.v.
.>vv..v..>.v.>>.>..>...v..>>.vv.v>.v.>v>>v....v.v.>...>....>>>v..>>>..v...vv...v>>v.v..v..>>..>v.>>...vvvv..>v.v.v.v.>v>>.v>>.....vvv>..>.>
>.>.>v>>.v>v...>.v...>...v..>>....>v>.vvv>..>...>......vv..>.>.v.v..>>..>.>.vv.v>>vv.v>.>...>>.v.>...v....>>v...........>>.>.v>.>>v.>v.vvv>
...vv.>....v.vvv>v.....>.vvv>.>.v..v.v.v...v.>>...>vv.>.v.>.>..vv.vv>v>>....v.vv.vv>v...v>v>.>>v..>..>vv..>...>>v....>>...vvv>>>>>.v.....>.
>....vv..v..v>.....vv.v.>..v>.>v.>v.v>.v..>...>>.....>..>>..>.vv>..v>.v...v.v.>>.>v>v..v..vv>vvvv>>vvv....>..>...>..v...v>>.v.>.>..>v>.v.v.
...>.v>>..vv..>>>..vv.v>v.v..vv>......v....>.>..v.>...v.v>.v>v>v..>>v..v>v>v...v>.vvv.>v..v..vv>.......>.v>v>>vv>>..>..vv>>.v..vv>>...vv>>.
>...v...v.v.v>>v..>>..vvv.v...>..>v...>v>>>>>..>....vvvv....vv.v.>.v>>.....v..>>.v...v.v.>...v.>v>>vv..v>v....>>vv...>v..>>>.v.v>..v....>.v
.>.v>vv.v>vv....v>..v.v>v.v>v..v>v.vv>>..v>..vv.....vv.v..>v.>.vvv..v..>.v>..v>.>..>.v.v>>..>.v>v>>>v.v...v.v>.v......v.....vv....>.....>>.
>...>>>...>v>v..v>v....>...vv>v..>..>..v>.>>v.vv.>>>.>....v>.>vv>.>.>..v....>>....>>v>.v..>>.>..v>>.vv..v>....v.>.v.>v...>vvv..v>>v....v..>
>.>>.vvv>v>>.v..vv>...>.v.v>v.v....v>>.v..>.>...vvvvv..>v>.v>.>>.>.v..>...>...>.>.>>.>v.v..vvv...>.>>v....>.v....vvvvv.>>..v>.>vvv.v>v.>>>v
v>..vv......>v...vv.>.....>.v>..>..>vvv....v..v.>>v>....>.>.>vvvvv.>...v..v.vv.>........>>v...........v>.>>vv>>>>.......>......>vv..v.....>
.>........v.>>...v........>>>.>.v..>.v..>.>..>>.>.....v>>.>.v>.>v.vv>>>>v>v...vv.v>.v....vvvvv.>>.>>>..>..v>>>.>v.>>..v....>..>>>...vv...>.
.v..>.v..>..v.v.>>.vv.......>..v>...>v...v..>..>v.....v.....v.v>v.v..>.v..v>>.v>>>..v>..>...>>>>..vvv....v>v..>vv..>>.>vv.vvv>>>....v>.vv.>
.>>>v.vvv..>v....vvv.>>>...v...>...vv>>>v>>>vv.v.v>v..v>v>>..>...vv.>>.vv.......vv.v>>.>v>.v.>v..>.>.v.....v>.>>.>...v...>>>>.>v>.vv.>....>
>>.>>.v..v.>>.v...vv...vvv.>.>...v>..>..vv.vv...v>..>v>.v>>..>.vv.>..>..v..vv.>>>v..>>.......>v.>>vvv....v>.v>.v..vvv>.>>>.v>>...>..v>>.v.>
v>>.>vv....>vv.>v..>v.v....>v>...v>vv..v..>...>v>.>v>....v......>vv..v...>v....>>.>>.v..v.vv....v.>v>.>v>.>v.>.>>>>..v....>.>.....>v..>.>..
>>v.v.>>...vvv.v..>vv.v>>v..v.>>v.v.>.>>...>vv.>.v.....vv.>>...>...>v..>>>v.>.v...>..v.v>v>.....v..>..v..>v.v.>v.>>.v.>v.v.v>>.v......v.vvv
>..v>.vvv.>>...>..>v....>v>........v..v...>...vv....vv..>>...v.....>v.>.>v...v..v>vv>>.v....>vv..v>v..>.....v>.>v.v.vv.v>......>v....>>>v>.
>..>>v..>>>>......vv>v.>..>.>.>>...>...vv..v.>>.>.>v.v.v..>..>v>....>.>..>vv.>>.>.>.v...vv....v>..>.....>v>....>.>.v....vv..>..v>>.vv...v>.
v.vv..v>>vv>.v.>.>..>..v..>..>>>v.>..vv>vv>.>>v>v>>v>v.>..>vv....>....v.v.v>>.vv.>.>.>>..>>.vv>.vv>..v>vv.v...>v.>v>v.v....>v...vvv.>.v...>
v>v.>.vv...>v>.>>vv>v...>..v...v.>v...>v..>>..vv..v>>>.>v.v>....>>>..vvv.v>vvv>>.v.>>.v....>.v>...>v...v>.>.vv>.>v..>v.v.v>.v.>......>>...v
v>.v.v...v.>..>>>...>>vvvv....v.....>..>.>.>....>.......>v>..>..>..v>...>v>v.vv.v>>.v>..>v>.v..v.>>..>.>>>v...>>>>.v..>>v..v.>v.v....>>.v..
.v>v.>...v..>..>.>...>..v.v..>.>v.>>v..vv..v..>v..v..>>...v..>..v..vvvv.>.v>vv>vv.>..v..>.v..v.>.....v..v>.v.v..>...v..v.vv..v>>>..>.>vv>..
.v..v.>....>v.v.>...v...>.v...>...v..v..>.>vv.>v.>>>...vv..>>.>...>.v>>v.>>>>..v...>...>.......>.>....vv.v.....v.>>v.....vv>...>...v..v>>.>
....>.v.>v...>..>..v.......v..v.vvv>.>v.>..v>v.>>>vvvvv....>vv...>vv.>.>.vv....v..>>>>>vv..>v>>v>>>>.v..v...v>>.>v>vv..v>v.>vv.>..>>>.v..vv
.>..v.v...v.>.>.vv.v>>.v>..v...>>.v.>>v>..v>..>...>vvv>>v.>.v>>>v..>.v>...>>>...>.v..>>..v.....>v....v>.>>.v>v...>>.>>>...>vv.vv...>>>>.v.v
...vv.>.vvv..v.>>.......>v..v>...v>.v>.>..>vvv..vv>v.v..v>.....>.v.>>....vv>.>...>.v...>>.v.v>.>v.vv.v>v>>..vvv>>..>v....>>v..>.>..vvv>.>.>
..>.>>...>.....v>v>...>.>v.>..vv>..vv...v..>...>...v>>...>v...>..>v..v.>v....v.>v>.>.vv.....>v>vv......v..>.>.vvv..v..v....>...v>v.vvv...>.
>..v...>v.>......>v.v>...>>...>>v>..>.>v>.>v..v>>>>>......>..>>....v.v..>.>>v.>v...>vvvv.>>v.>.v>>.vv>>...v.>.>.v>v.v..>..v>.....>.>.>>...v
.>>.v...>....vvv.v..v>...v..v....v>v.>>>..>.>.....>..v.v...>v>..>v>.v.>>vvv...>.vvv.>v....v...v>...vv..v..v>..>.vvvvvv>>>>.>>.v..v..>..vv>>
...vv.v....v>>v..v.>.vvv>>v...>...>>.v>.v.v>v.>vv>>vv.v>>.>.....>>v.vv...v.vv...v.v.>.>v.....>.vv..>v....vv>.>.v>>.v.>.vv.>...vv.v..v..v.>>
>v..vv>.v>>v>.v....>.v..v....v..>..>>v..>.....v......>>.vv>>v>v...>.v..vv.v>v.v>...v..>>vv.>.v>>vv.vvv...>..v>.>v>.>..>v..>>>.......v..v.>.
..>...vv>.>>>vv......>.vv>v..>.>...>...>.>>.>....v>...>.>vvv..v.v.>v...v>..>>>v>v...v...>v.>.v..>..>...>.v>v>>.v....v>.>v>...v.vv>......v.v
>..v......vv.>>>.v.>.v>.v..>>v.v>>vvv.vvv>.v.>>.v.v.>.v.>>.>.>>.v.>vvvv>v.....>>..v>.........vv>vvv>v.v.>v>v.>v>vv>.......>...v>.v.v.>>.>vv
....v..vv...v...>vvv...v...>>.v>v>v...>.>.>....>v>>v.>v>vv>.>..v>.v....>>.v.vv.vvv.v...>.v.>v.vv.v>>..>.>.v.....>.>..vvvv.....v>>.>v.>...vv
.>vv...>....>...v.vv..v.v>>.>.>>vvv.v.vv.v...v...vv.>.v...v.>v>>>..v.v>>>v..v..v..>.v..>>.............vv.>..v.>>..vv...>....>v>>>....>>v..v
>v.>>..>>v>..v.>v...v>.>>>>>..>vv..>>.>v.>>v.v..>v.vv.v....v..v...>vvvv.>vv>..v>v.v...>.v>vv..v...>>v..vv>vv..>>v.v.vvv>.v..>>..v>vvv.>v>v.
.>>v>vv..>v...>vv>..v.v....v.>>.v..v..>.v...>>>..>...>v>>.>.>..vv>.....>>.v>....v..>>>..v.v>..v>...>...v.>.v....v.v.vv>v.vvvv>>v.>...>>.v.>
.v.v>.>vv.......>>.>.>....>v.>>.vv.>.>vv.vv..>v>.......v>...v..>vv..>>.>.>v>v.vv..v>..v.vv....v.v.>....>>v>>vvv.>.v>.v..>v>>v.v.vvv>v..>v>.
.>v.....v..vv>>.v...>...>...>v>.......v>..vv.v>.>.>v.vv.......v>.>..>>>.........v.v.>.v..>>>.v..vv>.>>v>>>vv...>.>v>.>.>.v..>>>.vv.v..v.>..
.>vv>vv>.....>..>...vv>..>.>.v.>v.>..>.>..v>v....v...>.........v.>......v>.>..>....v.>...v.>>.v>v>>.>.v>.v.v.v>>v>>..v>vv.v..>.v.vv>v...>..
>v>.v.v..v..v..>..>vv.v>vv..v.>.>v......>.>.>...>v.>...>.v>..>>...>.v.>>.vv..vv>......>..v..>.>>vvv...v>>...vv....v....>>>>>v.v.v>>.>..>...
>vv..v..>.>v.v......>>..v>>.>v>>v.v>..v>.>...>v.vv.v>v.vv>.v>>..>>>.v....vvv..v.>>.>>...>>.>v>v.>>....>v.v..>v.>v>....>.>v.>...v.>>.>..vv..
v.>vv....>vv..>.v...v>.>>.v.....>.vv..v>v.>..>vv.>.v.......v.v.vv....v.>..vvv.>.vvv>..>.v.......>.v..>v>>>>.v.v>....v..>.....v.>v...>.v>v>v
.....>>v>.v.>v.v.>v..>>.....v>.v....vv.>..>...>v>>v...v>vv>..>....>...v>..>v...v>v.>...>..>>....v.>v>.......v.>..v.....>>.>v.v......vvvv>v.
.....v>vv.v...>..v..>...v.>....>..>>.v..>..vvv.v.vv>..>v..>.v...v..v>vv.v..>>v.vv.>.>...>v>>.>v..>.>....>vv...>>......>v..v>v..>>>.v>.>.>v.
..>v.>>v.>vv>.>..........v>.vvvv...>v.>.v>.v..v>..>>.v.>..v>.v>v.v.v>...v.>.vv>......>v...vvvv>vv.>>>.vv>v....v>>>vvv>v>.v.v>>.v>.v........
...v>>..>v....v.v..v>vv.>>....>...>>>...>.>..v..v.>.v.v>>.>vv..>>.....>.>.vv.v.v>v.>>........>v.v..>>v.vv.>v>v.>.>.vvv.....>.>.vv>>.v.....>
>.v.vv.>>>.v..v>v.v>.>>.v.v..>>>.v..v..>.v.>vv..>>.v>...>..vvv>..>v>>>.v>>.v...>.>vv>v.>>vv..>....>....v...vvv>..>v..v.v>>>v>...v>>.v>v.>>v
....v..v...v..v.v.>>>.v.v..v.v>>v..v..v>.v..>v.v>>.v.vv..v>>..>.>.>>.v>vv.>>>>...>....vv.>......>.v>>.>v.>>.......v..>v>>>.vv.v>vvv.v>>.v.>
.v..>..>v>v.v...v..>>..>vv.....v>>.>.vvv.vv..>>>vv>vv.>v>.>........>..>v.v>.>.>.>v...v.>..>>.v>>...vv>.vv>.>.v.>..v>.>v.vv>>vv.v>v.v..>vvv>
>...v..>.v>v>.>vv>>v.v...>v...v>>.>.v>.>.>v>>..v.>...vv.v.vv..vv>.v..v.v.>>.v.>>vvv..>v.....v..vvv.>v>v...>..>v..vv.>v>vv.v>.v>.v.v.>.>..>.
>v.>>v>>..>.v>.....>v.>...vv.>>..v>>...>vv>v..v..v..v..v...>.....vvv.>..>v...>v.....v>.....v>>.>>>vv>.>...v.>.v>v>.v>v>...v.....v>vv.>..v..
>..v>v>..>v.>.>>..>...v.>>v.>..vv...>vv>vv>.>v..v..v>..>>.v>>..v>.>..>>>>>v>...v>>v..>.>.v>......>>.>vv>>.vv..>>...>>>>>..vvvv>>>..>>...vv>
.v.v>..>v..>.>v....>vv>>>>v.>v>..>v....v...v.>..>v.......>>>v..>vv.v>..>..v>.vvvv.v.vvv.....vvv>v...v.>....>.>>v.>>...>..>>..>>vv...v>>>..v
..>>>..>...v.v...v.v...>v..vv.>vv....>>>vv>.vvv>>.>v.v.v.>v>.>>.>v..v>.>.v>.>..>v>>vv..v>..>>.>>>>...v.>>.v.>.>v..v.vvv..>v...>.>v...vvv...
>vv.v>.v.v..v.v.>.....v.>>.....>>vv.>vv..>v>.v.....>v>>>...>...v...v.>...>v.v.>..>vv.....>....>>.>>.>v..>>>>v...>vv.v>..v>v..>v.v..v>>>.>>.
v>>>.v.v>v>v.>.>.>>....v..>>v>...>.v>>.......>v>.>...>v>..>>..vv.vv...v..>..vv>...>....vv>>..>v>.>.......>..v>v>v....>.>>..>.v.v>>.v>.>vv.v
v>>v>.vvv>>>..>v.v..v..>.......vv.>.v.....>.>>vv>..v.v>...v>v...vv>.>v>>.>.>v..>...v>vv.>>v.vvv.vv>..>v>....>v>vv...>...v.>v.>..>.>.>.v>..v
.>>>..v>v...>.v...>....v.v>v>..>.v..v.vvv>>..>>>v>>>..>v.v.>>v..>.>.v.>v..v...vv>v....v>....>>.>..>v..>>v>.v..>.>......v.v..v>.v...>.v.>v>v
v.v....v>vvv.vv.>v>......>.>...v.>.v....v>.vvvv.>>.>v.>vv..v.>vvv>.v..v>>.v.>vvv...>.>>>>>v>.>v.v..v>.v>vv..>.>.v.>....v.v>>.vv...>>>v...>.
>.>v>v.v.>.v.>.>>.......v...v..v.>>>v.>vvv..>...>>.v......v.vv>..>>.vv.v>.vv..vv.v.v>>...>.>.vv.>..v.>vv..v........vvv>v>v.vv....v..>.>v...
.>v....>v.>>>.v..>...v>...>.>v...>>v>v>....v>.v.v..vvvvv.v>>....>vv.v..v.>>.v>>>>>>.>vv..v>.....v.v..v.>v..v.....vv...>v>.v>.v...v..v.v.>vv
.v.v..>v.v...>>....>>..v..>>v.>>vv>>>......>v...v>>>.>..vv>..>.vvvv.v..>.>v....>..vv....v>>>.......v..>.v..>v..v>.vv.....>.>>>>>...v.vv.>.>
v.>.vv>>.>v...>..v>>.v...>.>>..>>..vvvv.v>>vv>v......vv.>>vv.....>..>..v...>>..v>.>v.vv>v>v..>>>>...v>v...>>>>>v>>.v.v>.>v.>>vvv.>......>>>
...vvvvv.vvvv>...vv...>..>.>>...>.>.v>v.>.vv>vv.>>vv.>vvv...>.v.>>>v.....v...v.v>v......v..v..v.>>>vv...>.v>.v.>v.>...>v>.v>.v.v>.>v>vv...>
.>..v.....v.v.>...v>v.v>v...v..vv>vvv>>>.>.v...>vvv.>vv.v....v...v...vv.....>..v>..>v.>v.v.>v.....>v>v....v.>.v>.>.v>>.v..v...v>>...v>.>.>v
.vv>v....vv.v.v>.>v..v.v>>.>.vv.>..v.>>.>....>...>vv...>.....>..>vv..v.....>v...v>....v..v...vv.......v.v>v>v>>..>v...v>.v.>..>v.>>..>vv.v.
v..>..v.>....vv.vv..v.>.>v>..v.........v.>.>.>.>>>>>v>>.......>>>.....v.>......>vv>vvv..v>.>...>>.v...>>.>.>....>.vvvv.....vv..vvv..vv.>>.>
.>>..v...>..v.>..vv.>>...>.v..vv.>..v..>.vv.>v..>>...>.>>>.v>>v..>>....>>v....>.>.v..>>.v.vv>..v.>>.v..>.>v.>.vv..vvv..v.v>..v..>v.vv.v>v>.
..>>.v...vv>>.>v...v>v..>.>.v>.v>vv>......>..>.v..v>vvv>.v>.>v.>.>v..v.v>v..>>.>.>v>v..v.v.v>.>...>..v...>>..v>.>..v......>vv.v.v>v.>.....>
.v.>>vv>>..>.v..vv..>......vv>v.>v....v>>..v..vvv>v.>v.v.v.>>.v.>>..v...vv..>>.v..>v>..>vvv>vv>vvvv>...>v.....vvv>v>.v..vv.>>..vv.vvvv..>.v
v>>....vv>.v.v.>.>.v.v.>v.>>.v>v>>.>>..>.>>.>vv...>..v....v...v.v..vv.....>vv>...v.v.......>.>.v>.>v..>..v...>>.>>>>>.v.>...>>.>.>v.v...>>v
..v......>.....>.>v..>vvv..>v..v.>.....v....>.>.>v.v>.>vv>.>..v>>>>.>>v.v.v.>.vv>v..>v.>v..vv>.v>v...v..v.vv>..>..vv.>v...v>.....>.v......>
v>>....v...v.vvv.v..>.v>v...v>......>.v......>..v.>..>>v........>.v..v.vv.vvv....>v>vvvv....>.vv.>>.v>.v...>.v.v.vv..v..vv>..v.vv.v>...>.>>
v.v..vv>v>.>>..>>..>v>v..v...>.v.>.>>...>.v..>.>>.>>.v.v...v.>v.>vv.>>v.>.>>>.v>..v.vvv.>...v>.....>v.>>.v>>..vv.v>.v..v.>.>.>.>.>v...vv>..
>..vvvv.>.vv.v>.v>vv.....vv.vv>.>..>.vv.>.>..v.....>>>>.>.>>>v.vv>>vv..v.>>>>>.>...v.v..v>>>.v.>>.......vvv>v>.>..vv..v.vv>>v....>v........
...>>.>.v..>v..>>..v.v>>..v.>>...>.v.>>..v.v.vvvvv>.v>.v.v>.>....>v...>.>v..vvv..vv>v.v.....>>.v>v....>.....v.v.>v..v.>....>v>..v..vv...>>v
.vv.v.>vv..>..>......vv..v>....>v.v....vv.>.v..vv>.>v...>>.....v>....>>.....v>v.>.v.>.v.>>..>>.........>>>>.v..>v>>.>..v....>......v.>>>.v.
>vv.v>..v.>v.v.v>.v..>.v..v>..>v.>vvv..v.>.>.vv.>v.>...v.....>....v..v..>.>...v..v.v>..>>>vvv......v.>.v...>vvv....>v.v.v.v>>v>>v>>..>v>>.v
>>.....>.>..>>..>>vv.>...>v.v>>v>>.>v.>.v>>v.v>.vvv>.....>>.>..>..>v.vv..v.v..v.>>v>....v.>>.vv.>v>>v>v>v>.>v.v>.v.>..>.v...vv.>v..>>..>>>v
.>>>..vv......vv...v.v.v.>v>.>.>>>..v...>>.v.>.vv..v..>>..v.v...>>v>vv>>>v>....>>v.v>.v>>..v.>.>vv>>v.>...>>.v.>...v...>>.>>v>>v..v.v.>vv..
v>>..v.v.>v.v....v.v.>.>v..>.>.>.v.....v>vv..>vvv.>......>..>...>>v>....>vvvv.>.v.>v>..>>.v..v..>>>..v>>>..v...>>v>.v..>.v...v...v.v>.v.>v.
...>v.v...vvvv......>.v..>>>.>........>..v..>v>.v...vv>vv>>..vv..>>.v....v>>>..v..>..>>vv..v.>v>.>.>>>vv..v...v.vv....v..>v..v>.>.>.v.>..v>
>.v.v>>.>v..v>v..v....v.>>.>vv>v....>.vv......vv>...v.v.vv..v>....>v.>.v.vv..v.v.>v>>v>>>..>>.>.>..>vv..>v..>.vv...v>>..v>v..>.>>..v..>>.>.
.>........>.>>>>.v....>v.>v>...>.v.vv>>..v.>...v.v.>vv.>v.v>..>.>vvvvv...v>.v.>..>....>.vv....>....>..>>vv..vv>.>.v.v>.>..v.v.>...>.>v>>.v.
v..>vv>vvv..vvv......v..v..v..>v.v>>.v.>v.vv.>...v>v>..v>>>..v...vvv>v.....>..vv.v.v...v.>v>....v.>>..v>..v...v.....v>...vv.>v..>.>>.>v>v>>
>v>..>....>..v>>v>>>..>v.vv.v...v.>>.>.v.vv..>vvvv....v....>.v..>v>v>...v.v.v..v>..>.>v.v..>..v.v..v..v.v>...>...v>v..v.>vvv.v>vv..>.......
............v..>.v>v>v>.v>vv>.v>.>v.vvv.v>..>v>..vvv.>>..>>vv...>.>.>.v>v>v.v>.vv.vvv>vv...>vv.>.>.v.....>.>.....>v.......>>>v.v>.v>v.vv.>.
v>.v>>..>....>.vv>>.>.>..v...v.>v.>v..>>...>.v.>v>v..>vvv.>vv.v>>..>>..>>....v....v>.vv....v>>v.v..>......v>v>>.v..>.>vv.>..vv>>v.>>.....>.
..v...v.>v..>.v.>>..>..>v...>.v..>.>..>..>..>v..v.>.>..vv.>vv..>.>>..v.v>..v...>v>.>....>>.>v.>v.v....>..>.v.v>..v>>>.v.v>.v..>>>>.v>v.>>vv
..>>v>>vv>v......>>...>.>>>>>>..>>..>>>.>>>.....>v>>.>>..v>..>>..>>....>>.>.>>.>..vv>.>.v......v>....v>v.>vv...vv>..v.>vv..>v.>..vv..>...v>
.v>vvv.v..>.v>.v.v>..v>...>.........>vv...>.v>.>v.>v.>.....vvv...>vv>.v>>>.v.>....>..vv>vv>...v>..>v>....>....>vvv>>v>vv.>v.>..v.vvv>v>>>.v
..>v....vv.v...>..v...vvv...>>........v...>.>>.>>...v..>.>>..>v.>v.v>..>>.v.v..v>..>.>...v.>v.>v.vv>>v>>>....>>vv.>v.>>>>.v......>>vv.v....
v.>vvv..v..>...v.>v>.>>.v>v.vv>...>.......>...>>..vv..>.>>vv>.v>..vv.....vv.....>v>..>v...v..>..v.>..v......v>..>..>>...>..v.>.v.>.v.vv.>vv
.v.>....v.v>.>.v.>>>v...>>...>>...>>v>>v>.>.>v.>>.>>.>v.>vv>....>.v.>>.v...>v>>v.>v..vv>v...vv.v>.>v...v.v.vvv.>v>.vv>..>v...>>v...>..>...>
......v.vvv.....v...>.....v..v.>>v.>.vv..>..v>v.v.v>v..v..v.>v>>vv>..v.>v.>.....v.>.>v.....>>.v>>...vvv>>.vv.v.>vv..vv..v>v>.>.>>>>v.vv...v

1
2021/25/solution.txt Normal file
View File

@ -0,0 +1 @@
Part 1: 509

12
2021/25/test_code.py Normal file
View File

@ -0,0 +1,12 @@
# SPDX-License-Identifier: MIT
# Copyright (c) 2021 Akumatic
from code import *
def test():
vals = read_file("test_input.txt")
assert part1(vals) == 58
print("Passed Part 1")
if __name__ == "__main__":
test()

9
2021/25/test_input.txt Normal file
View File

@ -0,0 +1,9 @@
v...>>.vv>
.vv>>.vv..
>>.>v>...v
>>v>>.>.v.
v>v.vv.v..
>.>>..v...
.vv..>.>v.
v.v..>>v.v
....v..v.>

View File

@ -37,6 +37,6 @@ Collect stars by solving puzzles. Two puzzles will be made available on each day
| 20 | :white_check_mark: | :white_check_mark: | [Solution](20/code.py) | [Day 20](https://adventofcode.com/2021/day/20) |
| 21 | :white_check_mark: | :white_check_mark: | [Solution](21/code.py) | [Day 21](https://adventofcode.com/2021/day/21) |
| 22 | :white_check_mark: | :white_check_mark: | [Solution](22/code.py) | [Day 22](https://adventofcode.com/2021/day/22) |
| 23 | | | | |
| 24 | | | | |
| 25 | | | | |
| 23 | | | | [Day 23](https://adventofcode.com/2021/day/23) |
| 24 | | | | [Day 24](https://adventofcode.com/2021/day/24) |
| 25 | :white_check_mark: | | [Solution](25/code.py) | [Day 25](https://adventofcode.com/2021/day/25) |