first commit

This commit is contained in:
Daniel Bulant 2023-12-02 10:46:52 +01:00
commit 028be47d41
220 changed files with 11240 additions and 0 deletions

1
2021/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
target

7
2021/25/Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "twofive"
version = "0.1.0"

8
2021/25/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "twofive"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

137
2021/25/input Normal file
View file

@ -0,0 +1,137 @@
>.v>.v...v..v>>.>.>...vvv>>.v.>.v>>vv..>......v>.......v.>>..vvvv.>..>>.>.>vv...vv>..........>..v...>v...v.vv..>v>.v.v>>v.>vv.v.>.vvv.>v.>.
v.v>>..>v>>.>>v...>>v>v>..>v.>.......v.>..v>>..>>.>.>....>.>>vvv..>...>>>...>v>...>>.vvv...vv..v.v..v.>..v>v...>..>.v.>.>>v>v>vv.v........v
....>.>vv>.v>>.>>>v.v>vv>>..v..v>..>..v......>....v.>vv>....v>>.vvvv.>.>..>.vvv...vvv.v>...>>......v>>.v.>v>.>v>..v...>>.>.vvvv.v.v.vv.v.>>
...>..v.v.....>vv..vv.vv.....>.v.>v.v.>>..>v.vv.v.>>v.>.>..>>>>.>vvvv>.v.v..>..vvv.......v.>.>v>vv>>.v.vvv..>>>>>v>.....>v...v>.vvv.>v...v.
..>.vv.v.v>v.v..v.v...v>v>v.>.v.v>v>.>>..>>v.>..>.>.......v>v..>...>.>.v..>v..v>vv>..>>>....vv.v....>.>..v.v..vv.>.>.v>>v..>>......vv.>.>v>
.>.>.>.>>>>v..>.>.v>vvv.>v>..>v>vv.>v>.v...vv.>...>.v>.>>v.>v.>>.v>.>..v..>v>>...>.>.v>..>.v>>vvv.v.v>v>.>..vv....>.vv..>>v.v..vv..v.>.v>..
>..>.>v>>v>>>>....v....>vv......v>.v.vvvvv.>..>v...>>v....>>v>>>>>.>>.......v..v>...>.>.v.v.vv....>>>v.>..v.>vv>...>v.>v>v.v..>.vv.>..>..>.
v.v>>>.vv..v.v.>v>v>>>......v>.v.>v..>..>>>.v..v>.>..v...v.vv.....v.v>>.v..>..>.....v>....>>v.vv>.......>.>v....>>......v>.>.>.v.>.>>..v...
>.v>..>>>..>..vv.vv>.>.>.>>vv.>v>>v.v>..>...v.>..>..........v..v.vv.>..>..>.v..v...vv..v>>>.>v....>..>>....>>>..v.>....>..v..>...>>.v.>>.>v
>.>..v.vvv..vvv>.v..>v>>v>>.>.>..vv..vv>>v....>.v.>vv>...>..v....v..v..v..>v>.....>>vv.v.v>.>>...v.>..>vv....>.v.v.>>...>..>>.>>>>>>>.v>>v.
v.v>>..vv>.v.v........>.v.v....>.v.vvv.>v>..>....vv.v.vv>.>v>v....vv.>v.v..>v.v>>...>>vv..>.v.>v.>v....v...v>vv>.>.v..>.v.....vvv>>..>...>.
.v>v.v>..>v....v.>v>...vv>v..vv.v.>>...v....v>>.v>v>>>.vv>>.vvv..v...v>....v..>..>vv>>v..v.v.>>>>>.vv..vv...>..vvvvv.v.v>v>>..>v.v.v>..>>v.
..v.vv>..v.v.>>..>v>.....>>.>v..>.>v.v.>vv>>>vv.>.v.>v>vv>>v...v>vv>>.>v>v..>.v>v>>..v>..v..v>v.vv.v>>.>v>>..>>vv.v>..v>v>>.v.v..>.>.v..vv.
>>.vv>....>v.>v.>..>....v.>..v>>..>....vv..>.v>.>>..>.v....v.>v>v....v.>>.v..vv.vv.>..vv>.vv.vv>v.v>v.>..v..>.v>v...v...vvv>....vv>..v>.>..
.v.v>>>v.....v...v..v...v.>.v...>>.vv.>>..v>..>v.v..v..v.v>.>>...>>....>..v>.>v.v.v..v.>>vv..v.>...>>vvv>v.vv.v.v..v.>.v.v>...>>......v..>>
v.>..vvv.v>>v.v>>...v..vv.v.>.>v..v..>v.>v.>>v..v..>..v..>..>v>v.....v.v>.>v.v.>>>.vv.v.>>..>..v..>v>>....v.vv>>v>>v>v.>v..>>>v>..v.vvv.>..
...>..>>.v....v>>..>.>v...v>>>..>....vv.v.>>...>...vv.vvv.v...>..v..>..v>.v>v.vvv>>v.>.vv...vvv>.>vv.>.v.vv...>.vv.>>>>>......>v>v..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.>>>vvv.v..v.vv>.v>..v>.v.v..vv.>v>.v.vv.>...>v..>...v...>v.v..v....>v>>..v...>..>...>...>>.v.v>.>..>.vvvv..>>>v.vv.>v.v>v.
.>...>>....v...>>v>v>v.v......v.vv...>.vv.v.>..vv>.v..>..>.....vvv.v..v.>...vv.>>>vvvv.>v>vvv...v>.v.>v.>.v>>.v.v>vv.>..vv>.v>v>>>v.v...>v>
..v..>v>.v..v..v>v.>v.v.>v>...>>v..v......v.>>>>.v.>.v.>v>v..>>>vv..>...>.....vvvv..>..>.>>>...>>>v>v..>...v.>....>.>...>.>v...>..........>
>.....v.>..>.>>......>vv..v>...v...>>..>.v>>v....v>>...v>......v..v...>...>.>v.>.vv.>....>...v..>>>..>.>...v...vv.v..vv..>...>....>.......>
v.>...>v....>..>>v.vv>.>>>..>vv..v..>>....vv...v..v.v..v>..>>>.>.v.>.v.v>..vv..>>.v.......v>.v.vv..>>v>>.....vv.>>..v>.>>v>...>vv>v>>v..>>v
v>.v>.vv>>.>..v..>....v...v...vv>......v.v>v.>...v.vv>..>v.v>v>.v.>>..>>.>.vv>v.v.>.....>.v.>..v>.....vv.>>..vvv..vv.v..v>...>..>..>vv.>..v
v>.....>v>>.>vv.vv.>>v..vv.>vv>v.vvv..v.v.>...v..>>v>.>vvvv.v...v.>.vvvv.>.v.v...v.>....>vv>..v..v..>....v.>.....vv.>.v.>.>.vv>vv..vv>v>>>.
>vv..vv.>>.vv....v>>vv.v....v>>v.>>.>...vvvv..>.>v..v.v.v.......v.....>>>v..>.v>v>>v.>....vv>>.>v....vvvv.>>...>.v.v>...>>..vv>....v..>>v..
....>...v>vvvv...v...>v.v...v.v...v>v>...vv....>>..vv.>....>>.vv.>.v>.>>v..vv>.v.>.>.>>.>.....v...v...v..v...>.vv.v....>.>v>.>.vv>>.vv.>>..
.vv>.>...v>...>v>.vv>.....>.....v.>.>.>.>.vv...>v.>.v>.vv.v.>....v..v.>.v>.>v>v...v>.v..v.v....>.v.....vv..>vv.vv.>..>>...>.>..>.....>..v..
v..v..>.vvv>.v.>vv.....>v.v...v.>.v.v>v.vvv.....v.>.....vv>...>>...v>>.>>..vvv>..v>>..>.>v>.v>v..v.>...>>v>v>.v.v..v..>v..>>.>..>.....v...>
v.v.v..>>>....>.>>>v>>.v...>...v.>.vv>>..v.>..>>>...v..>v>..>>.>..v....>vvv...v>v>>>..>..>v>.>>>..vvvvvv.>vv.v...>.>v..v.>v....v.>..>.v....
>>>>..v>v.....>.....>.v..v...>>....>...v..v...v>v.v>>....v...v>.vv>..>vvv.v..>vv.v...>......>v>>v..>...>....>........vvv>>.vv..>>.v..>>v.v>
>v...>v>>>...v>.......v>v.vv...v.vv..>v.>.>vv>>vv...>vvv>...>.v>.>..>..>...vv.>>..v..>.v..v.v>v>>..>...v>v.>.>v....vvv...>v>...v.v..>..v.>v
>.v.v..>..v.>.>.v.>..v..v.vv........>>vvv>.>v.v..>v.>..v.>..v>>....v..vvv>v..v>>>v>>...>.>>v>vv>....>v...>.>.vvv..>..v.vv.>....>..v..>.>>v.
>...>v..v.......v..v..>v...vv.vv....v>vvv>...>>.....>>vv.v.v...>.>.vv>>>.>..>>>..>..>.>v.......>vvvv.>.>vv.v>..>v.>.v..>.v...v>v>.>.v>...>>
vvv.>>.>v>....v>.>.>>v.vv...v.>>>>.vv>v>.>vv..v.>...v>>.v>..v.>v>..vv.>>vv.....v.>v>.>....v>....>vv.v.>v....v.v>>.>.v..v..v>.>>..>.....vv.v
>>v.>>>...vv.vvv>>.>v>>v.>....v.>.>>v>..>.vvv..>v>.>.>>.vv..v.v>>v.>.v>v>>.v>.......>v>.>>>.....v...>...v>..>..v>vv..vv.>.v..>vv>..>vvv.v..
>v...>v..v.v>>.....>....v>v..v>v.>..>.....>>..v>.>v.>.>.v>.>.v....>v...>.v.v.>vv.v.v.v..v>..v>v>..vv.v>...vv.v.vvvv>.>...>v...........>....
.vv.>v.v.>>>>v..v.vvv>...v..>>.>v.>>v>>>.>v>.>.v.>...>..v>>>.....>v.v..v>.v..>.>.v>..v.v...v.>....v..vv.>>..>.vv>.v..v..>...>.>..>>vvv.v>>v
.v.v>v.v.v.vvvv..>...v.vv.>vv..v>vv>>>..v>.v.vvvv..v>.>....>...>vvv>>>.v.>v>v.vv..vvv.v.v>.v.......>...>vv>v..>...>>...>.>v>>v..v.>....vvv>
v>.v........vv>.v.....>.v...>.>..v>.........>.>.v>>....>>.>>..>..v.vv>>v...v..>v.v...v.v.vv.vv.....v>.v>>v.v>v>>>....>v>>>>v>v..v.>vv.vv.>.
>vvv....>...vv.>>..v>>>.>>v....>...>.>vv..v>v.v.>>.v>.vv.>v>>.>v>....v.vv.v...v>.v.v>..>...>.>v>...v.....>v.>.v>....>.>.>.v.v>v.......vvvv.
v..vvv...>>.v....vv.>.vv.v..v.vvv.>>>>..>>..>.....>v...vv.>.v.>vv...v>..>v...v....v>vv.>.>v..........>v...v>v..v>v..>.....v>.v>..>v......v>
vv.>.>vv>v..>v>.vv...>.vv..>.v.>>>.>....v>v>>>>..v>....>vv..vv.>.v>.v.>...>.v.v>v>v>v.>..>v......v.vv>..>.>..>..>.v>vvvv.>...vv.>.>vvvv>>>>
>..v...>v.vv.>>vv>>.>.>....v>...>v...>....>..v.....v.v.>>>>.>.>.>>.>.>..vv.>>vv..>...>>>.v....v.>>.vv..v>.>>>.>v..vv..>>>.>vv>>.....>vv.>..
>.>>..vv>.>v.>>v...>..v>...>..>.>v>>v.v.....>.>..>.>v.v>.....vv>v>v..>v......>v..vv...>>>>>..v...>....>....>v.v>..>v.>.>.>.v.vvv..>>.v>v.>.
>....v>>v>...>v.vv>>v..>>..v....>vv.v.v>.......>v.v.v.>>.v>vv>>..v..>...>.>......>>..>>.>....vv.>.v>>....v.>...vv.v>.>.vv.......vvvv......v
.>..vv.....v....>>...v>.v.>>.vv..>.v...v.>>v>>>>vvvv....v....v.vv..v.vvv>>..>...>v.....>....>....v>v...>..>>..>..v.v.v...>>>.v.vv.v...v....
..v.vv>.v>.v....>.v..>>>>v>.>vv>.....>v..>....v.>.v...>.v>>.>..v>v>...v>....>>.v..v...v.....>v.>...vv>>.>..v>.vv>v>v>...>>..vv.>..>.v.>.>..
..>vv>.vv.v>v>v>.vv..>>>>..>>..>v>v>vv>.>.v>v.>>vv.>..>.vv.....>..>>.v.>..>.v.>.....v.v.vv.vvv..vv....>....v>.v...v>.>>v..v...vv.>...>.>.>.
.>>>....>vvv......v>...>v.>vv.v.>>vv>.....v.v.....v.>.>.>..>>.>vvv..vv>.>>...v>..v>.>vv>>......>>.v>..vv..v..>v>v>.>.>.>>..v..v....vv.>.v.v
.>.v..>.....v>v>>.>.>.>>>v>v..>....v....>>vvv.>>...vv>>v.v..v.>.>.>v.>..>>>v...>vv>.v>.vvvv..>.>.vv>.v..>.v..>..vv..>>>..v>>.>..>.vv>v.>v..
..>v>>.v.>.v>>v>v..v.vvv.v..>>>v.vv.....v.v.>.vv>.>vv.v>.vvv..v.>.v.>v.vv..v>.>.v.vv>>...vv.>v.>.>.vv.>v.vvv....vv.....>...v>..v.>v.>v..vv.
>.vv>.v>...v.vvv...vv.v>.vv>.v>vv>>v>>>>....>..v..v...v>v.>..v..vvvv>>v..v>v.v..>.>v...>...>v>>v.v.v>.....>v.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..v....v.>vv>...>..v>>....>v..v.>v.>>.>.>.>.v.vv..v.>v
..>.......vv>v...>.>.>........v..>.>..v..v..v.>>.>>.v..v.>.>.>.v..>...>v.>v..>..>.v>>.v.v..>..vv.v>.>..v.>v>...>..vvv.v.v.vv.vv>>.v>>..>...
v..>v....v.v>.>.>v..>v...>>.>.v>>>>v.v>>vvvvvvv.v.>vv.v...>v>.>..vv..v..v....v......>>v..v..>v...>.vvv.>...>v....>.v.v..>..>...v.>...v.vv>v
>....v>.vv.....>>v.>>>>>.>.v..>.>v......>>>.>>...vvv......>.>>....v.>v.>..v>>>vv.>..>v>>....>.vv.>...v...v.v..>vv.>..v...v>.>v>.>>.>>.....>
>.vv.v>.....v..>v...>..v....>>...v>......>>v>vv>...v.v....v>v.vv.v.v>...v...>....v....vv..v.>...>.>.>>>......vv...>v>vv.v...>v.v>..>..v...>
vv>.v.....v>.vv>>..>..>.>....>>.>.>v...>>vvv...v..>>.v..v..>>v.v..v>>.>.v..vvvv.>vv>>.>....v.>..v>...v>v..>>v.vv>.>..vvv...>>.v...v..>..v..
>>v....>>.....vvv...v>v.....v...>>>>...v>...>>>>v...v.v.v.>...>vv.........v..v>>v.v>v>.>>>>>.>vv...>..v.vv.v>..>.>.v.....>>v..>v>v.>v.>v>.v
..>......v.....>vvv>....>>v>v....v>.>v.>v..>vv.vvv...vv..v.v.v.>...v.v>v.>>>....vv..>v...v.....vvv..v>.vv>v...v>.v.vvvv....>.>v.>v.>vv>vv..
>v...v.>....>.>.v...>>v>..>..>..vv..>.>>vv.v>.>>..>.v.....>>.>>v.v.>vv>v>.....vv.>>v..v>...v>v...>...>.v>..>>v>.>>vv>v>.>.v.vv.>>>.>v.v..>>
>.v>>.v.v>v>.>>..v>>.v>.v>v.v>....vv.vv..v..>...v.v>>..>vvvvv>.>.v..>>>..v..>>..v...v...>v.>.v.vv>.v>..>..>>.>.>.v.v..>v>.v.v>>v.vvv...>.v.
....>.>...>vv.vv..v...v.>>>...>vvv>>.>.v.....vv>vv.>v.........v>v..v..vv.>..v>v.>v....v.>..>.....v..v>>>.....>.>>>vvv...vv>.v..v..vv>.>..vv
v..vvv.>.>>....>v..v..v..v>>...v...v.>.v.>>.v..vv..>vvv..v....v...>.>>vvv>..>v.v.vv.vv.>.>.>vv..v>>>v.v.>......>.......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.>.vv..>>.>v....v.>..v..v...vv..>>v..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.v...v>...vv>>>..vvv>.v.>
...>...vvv>>..>>.>vvv.....vv..v.v>.v..>>.v>>>vv>>v>>..v.>..>v>>v.>v.>.v>>vv>vvvv>.vv.>>.v....>..vv>....>>.>v>..v.>..v>......vv.v>v>.v>..>..
.v>..v>>..v.vv.v..v>.>.v..v.v..vv.......>.>...>.>..>v.vvv...v..vvvvv.>>.v....v.>v.vvv>v>.>.>..v.vvv..>..>>v..>....>....>v.>...v...vv..>v>v.
vv.v>...v>>.....>v>v...vv>.>.>>.vv..v...v.>.>..>.v.v>>.>..>v...>.v..>.v>.v...>...>.>vv..>vv....>.>.>.>>.>.>>>>.v..>.vv...>>v..>vvv..>.>v>..
>..>v>.>v.>vv.>vv.v.v>.>.v..v..>v>>.>..>..>.v>.v.v.v>>..>....>>.>>>v.v....v.>>>...>v>v.>.>.v.vv.>>.vv>..>.v........>v>v.>..>.>.>>v.>..>.v>v
..v>>>>v.>vvv>...v..>.......>.v.>vv>v....>.>>>..vv.>..>>v>>v>.v>...v.>...v.v>v.....>v>.vv.>>>v>..vv.....vvv..v.>.>.v..>.>.v.>..v>......>.>.
>.v..>.>..v>vv.v..vv..vvv>>vvvv..>v>v>v>v...v.v>>>>v.>>v.>v..>vv..v...>v.>v..>vvv.vvv..v...vv...>.>>v.v.....v..v.>.vvvv>v..>v.>.v.......v..
v.v.v.v.v>.>.>v.>.v>>vv.v.v>.>.v>>..v>>>....vv.>...>...v.vv>.>...v..vvvvvv.v..v.>.v>v>v..vvv........>..>>...>..vv>v.......v>>v..v....v>.v.v
v..>>.>..>...>.v>vv...>......v>.>..>v....>v....vv..v.>>.>.>>.......>v..v.>>.v.v>..>.v..>v..>.>.vv>.vvvv>.v>.v>v.>>v.v>v>vvv...v....v>v>.>>.
.>>.>v.v>..>.>v........v>.v.v.v>.........>v>.>>v..>vvvv.>v.>>..v...>.vv>..>....>.vv.vvv.>>>..>>.v>v.v>.>.v>....vv...>v>>.....v.>..v.>.>>>v.
>v>>.v>.v>v...v..v..v>>...>.>>>..>..>...vv.>v>>>.v....>>.......v..v...>.v..v..v.>vvv.......>vv>v.....v..>>v..>.>vv>>..v>.v..>..>.v..v.vv>.>
v...v>v.v.>>.vv.>>...>...vv>....v.v>..>>..>>>...>>.>..v>v.>v..>..>.v....>.>..>.....>.vvv.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>.v.>v.>>...v>v.v.v>...v>v.vv.>v..>>>.>v>.>v.v.v...>.vv..>..>.vv.
v....>.v>..v>.v>.>..>..>.>vvv>>.v...v..>vv..>......vv.v..>>...>>.>>..>v...vv..>.v>.>v>v.>.>>...>.v.v.>..v>>>..>.vvvv>..v.>...v.>.>..v>.v...
>.vv>.v.>v....vv>.>>.v>>v....v.>v..v..>>>..vv..>.>>>.>>.>v.>>.v>>..>.>>...>.....>.>v..>.......v..vv..>>v.>>...vv>>.v.v>....v.v>>.>>..v>v.v.
>v...>>.....v.vv..v>.vv..>.....>....v.v>..>>...>..v..>>.v>>.v>v.v.vv.v>....v....>>.v>....>>vv......>>.v>..>.vv.>..v.v>.v>.vv.>...>>.....>vv
v>v...>.>.>....v.vvv.>vv>.>.>..>>v....>v.......v...>v.v.v...>v>.>.....>v....>.v..v.v.....>.vvvv.v.vv>.v>>...>...>..v>>>>...v>>.v..>v..v>...
..>>v>>vv..>.>>.>...v>>>vvv>v..vv.>...vv..vvvvvv.>>..>v..>.>>>.v.v.vv..v.v.>.......v>.vv...v>.v......vv>v.>v.v>.>>>v...>>vv>.>.>....v..>v>>
..>v.v..v>..v.>vv>vv..>.v.>v....>....v..v>>v>.>.vv....>v..v>..v..v>.v>.>>>>>.....>>.....>>>v.>>.v>..>>vv..>>>v.v.vv..>>..vv...>>.>>...>v...
..>v....v.>v.v.v>.>>v.v>...>>v.v>...v.v...>vv.>>..>>......v.>>vv...>.>....>v>.v...v....>.>.vvv.>>>v..>>vv.vv..>v.....>>....v>>v>.....>....>
v........>v..>.>vv....v.v>>.v>.>>v>.vv..>...>..>v.vvvv.v.>....>.v>>.>v>>>.v.>.>.....v.v>v.v>v.v.>v>..>v>>v..vv>>>..v..v>>.>v...v>...v..>>v.
.>..>>.v.>v......>.vv>v>.v.>.v.v..>>..vv...v..v.>>.v>.v>.....v.>..>.v.>v>.>..>v.v...vvv..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..v>vv.>>...v.v.v.vvv>>>>..>vv..v>....>...>>.>....v>.>>..>>....vv>.vvvv.v
.vvv..>.v>vv>>>.>.v>..>>.>..>.vv.>....>.v..v>vv...vvv..vvvv.>.v.v.>>vv>..>>........>>..v...>.vv...>v>.v.>v.v.>..>.v>>>>.....>.....v>.>..>.>
.vv.>>vv.v...v.v...>v>>>>v..v...>>......vv.vv...>v..vvv.vv.v...v.v>....>v.v.v.>....>...v..>v...>v>....v...>....>.>>.>..>>v>.v>v....>..vv.v.
v>.v.>v...vv.>.v.>.....>.v.vv.>>.>....>..v.v.v..v>v.v>vv.>>.>v>.>....v.>.>.>v..>.vv..vv....>.v.>..>vv.vv>>v>...>v>>>v>...>v.>v>.v>.v>.v>v..
..>>>.vv.v..>.>..>....>...>>>.>..>>>v..>..v...v>v>.>.vv....v.v......v.>.>>>.v.v..vv.v..>.>..>>.>>...>.>>..v.vv..v>.>vv..v>.>vv.>..>.>..>...
..>.>...vvv.v.v..>.v.>>v.>v>>....>..>.>.v>>vv>.>>.v...>...vv>>>vv.v...>.vv..v..vv>..>v..>.>.>.>.>v>>.>..vvv>.>v....>v....v>>>............v.
v.vv.>..>vv...v.......>......>>>v.v>.....>.v>>.v.>..........>>.v.>.>..v>.v.v...>..v>.>>>>v>..v>v.>.>...>.>....vvv.....vv.v..>.......v>v>.>>
.>.vvv.>.>vvv...>>.>v.v...vv.v.v>...v..v>>v.v..v.>>vvv...v>>>.v...>..>v..v>>v.>v.>.v.v..v>v.>...vvv..>v......vv>>>>.>>.....v.>>>v.vv.>..v.>
.vv...>>>..vv..vvv....v>v.v>v>v.vv.>>vv.>vvv>..>...vvv...v.>.>...>...>........v.v>.v>>...v>...>>.>v.>...>.vvv>...v>..v...v.>v>>..>>..v.>v>.
.....>>.v....v..v>vv.>..v...>vvv>..>....v>..>.>..>v.>v....v>v...v...v..>...>>v.>>.vv..v..>.v..>.v.v>v>vv.>.>vvvv...>.v.v.v....>>v..vv.>>.>.
....v>.v>v>.>.>.v>.>...v>...v>>>...>>.>v>.....>>.>..vv..v..>>..>.>v.........>v....v..v.v>...>....>v.>v>>....v..v..>>v.>....>....>v.>..>.vv>
.>>.v.>.v.v.v...>vvv>..v.v>v..>v..>v...>....vvvv.v>>v.>>v...>..v.vvv..>..>>v..v...>v>>vv.>>..vv..v..v>...v...v....v...v....>vv>>.vvvv>.v...
..vv..vvvv.vv...>.v>>.>v>>>>>.v.>..>.>.v.vv>>.>>....vvv>.>>.v.>.v.vv>v>v.>....>v.......>.>.>.vv..v.v>v.v...>..v.>..v>...v>v>>>......v>..>v.
>.>>.v.v.>v>v.v>.>vv..>>.vv.>>vv>....>.v.....v.>v..>>>.>.>..v>.>v...v...v.>..>.v>v>..vv>..v.....v.>.v>.>>....v...>.v.....v>vv.....>>>v.v>.v
.v>.....v...>.>...v>v.v..v.>v.v.>>v>.vvv>.>.v.vv.>v>v>v>v>>.vv..>>v.vv>.v>>.>vv..v>..vv.vvv.vvvv>.>.v.>.>.>vv>.>...v>.v>v...vv>v..v>v..>...
...>..v.......>v.v.v>v.....vvv...v..>>vvv>.>...>..>.v.v.>>.v.v.>.v..vvv..vv>v>v..>..v.>..>v.>.>...v>.vv.>>.>v.>..v>v>....>.>.vv..v>....vv..
.vvvv.v.>.v..>.v.>v.v>>..vv...>>v.>>.>.>.>v.v.v.v>v....v..>v....>>.>v>v.....>.>..vv....>.vv...vvvv.vv.vv...vvv.>.v>v.>.v>..v.v>vv.>..>.....
>..v.v..>.>>.v>..>...>.>>.>>.>..>.>....>v.v>.>.v.....v>.v>.vv.v>...vv.>.vvv>>v>.>.v..>.>.v>v>.>..v..>.>......>>.......vv.>..>.v>vvvv..>vv.>
v....v.vv...>.v.v..>>.>....v>>........vv.>.>>...>.>...v..>.v>..>..>>v>....v.v..>..>v.vv.>.>>.v.>>.>vv>>.>v>.v>>>.v....>....>...v>>..v..v.v.
v.v.v...>>v...>>>.v.vv.vv.vv>>>.v.>...>>v.......>v.>vvv.>>.vv.......vv...v>..v>.>>.v..v>...>.v..vv.v>..>v...v.vv>.>>.v..>.v.>.>..>>.vv>...>
v..>vv.>v>.>v.>.>>>vvv>..v.>>>v>.>v....v.>v>.vvv>..v>....v..>>..v..vv.>...v.>.v......v.>.>.....vvv..>vv>.>...>.vv>....>>..v>..v.v..>>v..>v.
.....v.>>vv.v>>.>vv>.>..>...v>>..v>....>.v.>.>...v>..vv>v>..>..>.>......vv>.>.vv>.....v>...vv..>..>v.v.>.>.vv>.vv.vv>.vv.v>>>..>....>.>.>v.
.>v..v.vv..v.v.>v..>.v>>v>v.vvv>>...vvv.....vv..>.v>...>>>.v....v>>.>v>.v.vv>....>>>>..v.>.>.v.....v>>v..v....>..v....v>...>>v.>v>v...v.v..
.>v.....v..>.v..>...v..v.>vv.vv.>.>v.>...>...v>...v.v.>..>v..>..>v.v..>.v.v>v.>.v..v......>...v.vvv.v>>v.>.v.vv..>>v..v>>.v.>>.v.v>>>....vv
...vv.>v.>..v>>..v.>.>vv.vv...>.....>v>.....v..v..v.v.>>..vv.>v.>..v........v.v..>>v.>v.v..>...>v.v..vv>v.v.v>..v>.....v.v.>.v....>>>v>>..v
...>v.v.>...vv>.v.v.....v..v....>>..v.>v>vv>>.......>v..v.vv..>.>>>vv>v>>>.v....vvvvv.v..v>.v.>v>v>>..v..vv..v.vv>>v..>.>..>....>..>.>>.v>.
>>..>>...>..v>vv.>>>...vvvv....vv.v>.vv.>.v.vv>>..vv..>..>>>..>>..vv>>.>vv>>.>.>..>vv.>.>v..>>.>.v>....vv>v>..vvv.vv.>v.>v>>....vv.vvv...v>
..>>v>..>>.v>vv>....>..>>.v>vvv.vv..>.v>v..v.>>.vvv>.>.>v...>v.vvv.>.v.>v>v.>..>.v>>.>.>v..v..>v>>v>.v.>.>.v.>...vv...v.......vv.....>.v.>.
>..vv>>v...v>v.>vv>.v....v.vvv.>......>v.v>.vv>..>>>v....>>>.>...v>>>....>...v..>..v>vv..v>v...>vv>.v..v..v>.>.>.>..vv>>v..v>....>>..vv..>.
.>.>v>vvv.v..v.>v.>...v>.>v..>vv.>..v.>v>.v...v>.>>vv..........v>.v.vvv.>>>..v>vv.>>>v>..v....v..>..v.>>..>.>.v>v.v>.v>.v...v.>>.v....vv...
....>>.v..>.......>.v.v>>>vv>>..>v>v...>.v..v>.vv.v>>vvv....>vv>v>..vvv.>>>.v..>>.v.>.....>vv>>....v>vv>v..>.>...>.>>v......>..>v..v....vv.
.vv..>.>..>..v>...>v.vv.>..>v.>..v>v..vv>>>..vv..>vvv.....>...vv>.........v..>..v..>>.>>v.v...>>v>v>..v>>.v>.v..>v.vv>vvv>>>..v>.vv..>>.v.>
.>vv.v.v..>.>...>..>v>..>...v.>...>vvv.>....v...>..vv...v>...>vv>v.v..>v..>v.>...v.v>v.>.v>v>>>v>..vv..v.>>v>.v>..v...>v>>..>.v.v.>>..>.v.v
...v>..v.v..v>vv.....>..>..>>......v.v.>v.....>v.v...vv.v.>v>>>.....vv.>>v>>......v..v>v..vv>>v....v..>..>v>>>.v..>.>...v...vv>vv>v...>.v>.
v.>>v.vvv.vv.vv.>.>.v.v>v.v>..v>v.>>>..>v>.v....>v....>>.>>..v.vv...v.v....>.>..>........vv.v.>..>>.v.v>...v>v...vv.v>>.>v>>.>>vv>.v..>v>vv
v.>v.>v>.vvv.>v..>..>>>...v.>.v...v.>>.>..>>.v.>v..>.vv.>....>>vv>....>..>>vv>>....>v>.v..>.v>.>...v..v..>v>>>..v...>...>.>v>.>v.>.>.>.>.vv
vvv.>>v>>v>.>..v>v>..v>v.>>v.v...v..v.>vv...vv.>.v>>>vv>.v.>v..v>>.>>vv..v....>.>v.>>v.>.>....>>.>.v.vv>.vvv..v...>..vv..v......>vv.>>>v>..
.>.>.vvv....>v>>.>.v.vv.v>>.>>...>v>..v.>v.>>>>v.v>v.>v...>>>>>...v....>..>v.>>>.......>...>v.>vv.>.v.vv..>>......v.>..>...>.>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>.v..v...v.v>vv>>vvvv>.>...>v.v.v..>>>.v>>.v.v
.>...v>v>>..v.>>.>v.vv>.vvv>.v....v>..v.>.vv..>.>>.>.>v>...v.>v>..vv>.vvvv>.>....>..vv>.v.v..>v..v>...>...vvv.v>>>>>>..>.>.>...>..vv.>.v..v
v...>..>.>vv..>.>v..v.>>.v>>>.v>>...>.....vvv.v.>v..>..v..v...vvv.vv>..v>.>.vv>v...vv>>>v...v.>v....v.v..>..>vv.>v>vv.vv>>>..>v.>vvv.>v.>..
>v...v...>>.v.>.>>.v>>.vvv>>v>vv..>>..v>>.>..>.>v>>>v...v..>.>v..>....vv..>>.>>......>v>>>..v..v..>>>.>....>......v..>>v>>.>>...vv.v.>vv>v.
>.....v.....>v>.>.....>v.v.>.v>vv..>.>>....vv>..>v..v>.v...>.v.>v>v.>vvv..v>>v..>..v>>.>...>.>>.>..>.vv>>.vv..>>v>>.>.v.v.v.>vvv>v>>v>vv.v>
v.>..>v.v>v.......>v......v...v>.vv..v>...>.>.....v.>..>.>....>...v.v>v.v.....>....vvv>..>v.v.>vvv.v.v.v>>>..>v>.>.v>..v.v>.>vv.>.>.v.vvv.v
v...>.vv>.v..>.v>.....>>vv>.v..>>>v.>>..>.....>v...>>..v.>.vv.>..>..>v.>>>>>vvv....vv.>v..v>..>.v>..v.>...>v..v.>..>v.>.vv.>vv....>>v.vvv>.
>..>>...>.>.vv>..>v>..v..v>.v.>.>vv.>v>.>>..vv.>..vv.v>vv>v>.vv..>>>..>v...>.>v>v>>>.........>>>...vv.>.....v.vv>.>.vv>.....v.v..>...v.vv..
v..>>..vv..v..>...>>.>>>..>..>.>v..>..>.>.vv.>>...>.>.>v>.>..>>.vv.>..>.vvv>>....>>>>....>v.>>>>.>>..v.v.>vv..>..v..>.vv>v....>vvvvv>v....>
v...v.>v>.v...>>v.>.v>>.v.v...v.>..>..>>>...v.......v>>>>>.>.v.v..>...v.>v>v.v....v....vv>vv.>.>v>vv...v..vv.v.>>v..>.v.v.v...vv..v.>v>.>v.
.>v>.vv.v.>.>.>>v.>>...v.vvv.v>...>>.>>.>.v...v....>..vvv.>....v.vv.>..v...>>..>...vv.>.>v>v..>>>.v.....>.....vv.v..>.>>>v.vv>vv.>......>.>

120
2021/25/src/main.rs Normal file
View file

@ -0,0 +1,120 @@
use std::fmt::{Formatter, Display};
#[derive(Debug, PartialEq, Clone)]
enum Place {
Empty,
East,
South
}
impl Display for Place {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
match self {
Place::Empty => write!(f, "."),
Place::East => write!(f, ">"),
Place::South => write!(f, "v")
}
}
}
impl Place {
fn from_char(c: char) -> Place {
match c {
'.' => Place::Empty,
'>' => Place::East,
'v' => Place::South,
_ => panic!("Unknown char: {}", c)
}
}
}
struct Board(Vec<Vec<Place>>);
impl Board {
fn push(&mut self, row: Vec<Place>) {
self.0.push(row);
}
fn tick(&mut self) -> bool {
let mut moved = false;
let mut new_board = self.0.clone();
for (y, row) in self.0.iter().enumerate() {
for (x, place) in row.iter().enumerate() {
match place {
Place::Empty => (),
Place::East => {
if x + 1 < row.len() && self.0[y][x + 1] == Place::Empty {
new_board[y][x + 1] = Place::East;
new_board[y][x] = Place::Empty;
moved = true;
} else if x + 1 == row.len() && self.0[y][0] == Place::Empty {
new_board[y][0] = Place::East;
new_board[y][x] = Place::Empty;
moved = true;
}
},
Place::South => ()
}
}
}
self.0 = new_board;
new_board = self.0.clone();
for (y, row) in self.0.iter().enumerate() {
for (x, place) in row.iter().enumerate() {
match place {
Place::Empty => (),
Place::East => (),
Place::South => {
if y + 1 < self.0.len() && self.0[y + 1][x] == Place::Empty {
new_board[y + 1][x] = Place::South;
new_board[y][x] = Place::Empty;
moved = true;
} else if y + 1 == self.0.len() && self.0[0][x] == Place::Empty {
new_board[0][x] = Place::South;
new_board[y][x] = Place::Empty;
moved = true;
}
}
}
}
}
self.0 = new_board;
moved
}
}
impl Display for Board {
fn fmt(&self, f: &mut Formatter) -> std::fmt::Result {
for row in &self.0 {
for place in row {
write!(f, "{}", place)?;
}
writeln!(f)?;
}
Ok(())
}
}
fn main() {
let input = std::fs::read_to_string("input").unwrap();
let mut places = Board(Vec::new());
let lines = input.lines();
for line in lines {
let mut row = Vec::new();
for c in line.chars() {
row.push(Place::from_char(c));
}
places.push(row);
}
println!("{}", places);
println!("");
let mut sum = 0;
while places.tick() {
println!("{}", places);
println!("");
sum += 1;
println!("{sum}\n");
}
println!("\n{}", sum + 1);
}

9
2021/25/testinput 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.>

1
2022/.gitignore vendored Normal file
View file

@ -0,0 +1 @@
*/rust/target

4
2022/.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,4 @@
{
"deno.enable": true,
"deno.unstable": true
}

36
2022/1/README.md Normal file
View file

@ -0,0 +1,36 @@
# Day 1: Calorie Counting
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?**

2243
2022/1/input Normal file

File diff suppressed because it is too large Load diff

24
2022/1/part1.ts Normal file
View file

@ -0,0 +1,24 @@
const text = await Deno.readTextFile("./input");
const lines = text.split("\n");
let acc = 0;
let max = 0;
for(const line of lines) {
if(line === "") {
if(acc > max) {
max = acc;
}
console.log(acc);
acc = 0;
continue;
}
acc += parseInt(line);
if(isNaN(acc)) {
console.log("'" + line + "'");
break;
}
}
console.log();
console.log("max", max);

22
2022/1/part2.ts Normal file
View file

@ -0,0 +1,22 @@
const text = await Deno.readTextFile("./input");
const lines = text.split("\n");
let values: number[] = [];
let acc = 0;
for(const line of lines) {
if(line === "") {
values.push(acc);
acc = 0;
continue;
}
acc += parseInt(line);
if(isNaN(acc)) {
console.log("'" + line + "'");
break;
}
}
values.sort((a, b) => b - a);
console.log(values.slice(0, 3));
console.log(values.slice(0, 3).reduce((a,b) => a+b,0));

2500
2022/2/input.txt Normal file

File diff suppressed because it is too large Load diff

39
2022/2/part1.ts Normal file
View file

@ -0,0 +1,39 @@
const input = await Deno.readTextFile('./input.txt');
const values = {
A: 1,
B: 2,
C: 3,
X: 1,
Y: 2,
Z: 3
};
const userMap = {
A: "R",
B: "P",
C: "S",
X: "R",
Y: "P",
Z: "S"
};
let score = 0;
for(const line of input.split("\n")) {
const opponent = line[0] as (keyof typeof values);
const player = line[2] as (keyof typeof values);
const ov = values[opponent];
const pv = values[player];
score += values[player];
// simple rock paper scissors
if(ov === pv) {
score += 3;
} else if(pv - 1 === ov) {
score += 6;
} else if(pv + 2 === ov) {
score += 6;
}
}
console.log(score);

75
2022/2/part2.ts Normal file
View file

@ -0,0 +1,75 @@
const input = await Deno.readTextFile('./input.txt');
const playerValues = {
A: 1,
B: 2,
C: 3,
};
const userMap = {
A: "R",
B: "P",
C: "S",
X: "Lose",
Y: "Draw",
Z: "Win"
};
const resultValues = {
X: 0,
Y: 3,
Z: 6
}
function mapFromValue(value: number) {
return userMap[Object.entries(playerValues).find(([_, val]) => val === value)![0] as keyof typeof playerValues];
}
function mapResultFromValue(value: number) {
return userMap[Object.entries(resultValues).find(([_, val]) => val === value)![0] as keyof typeof resultValues];
}
function log(...args: any[]) {
console.log(args.join("\t"));
}
function logResult(pv: number, ov: number, rv: number, score: number) {
log(mapResultFromValue(rv), pv + " " + mapFromValue(pv), ov + " " + mapFromValue(ov), rv, rv+pv, score);
}
log("state", "pv", "ov", "result", "score", "totalScore");
let score = 0;
for(const line of input.split("\n")) {
const opponent = line[0] as (keyof typeof playerValues);
const result = line[2] as (keyof typeof resultValues);
const ov = playerValues[opponent];
score += resultValues[result];
// simple rock paper scissors
if(result === "Y") {
// need to draw
score += playerValues[opponent];
logResult(ov, ov, resultValues[result], score);
} else if(result === "X") {
// need to win
if(ov === 1) {
score += 3;
logResult(ov, 3, resultValues[result], score);
} else {
score += ov - 1;
logResult(ov, ov - 1, resultValues[result], score);
}
} else {
// need to lose
if(ov === 3) {
score += 1;
logResult(ov, 1, resultValues[result], score);
} else {
score += ov + 1;
logResult(ov, ov + 1, resultValues[result], score);
}
}
}
console.log(score);

3
2022/2/testinput.txt Normal file
View file

@ -0,0 +1,3 @@
A Y
B X
C Z

300
2022/3/input Normal file
View file

@ -0,0 +1,300 @@
MVWpzTTrTFNNLtssjV
hRJncnJCnhPCnBSbCQRhhQRPFHmsbHLzbLNHsjNNFmGGGsGF
lSBQJBBBBcnccnQvBnPQznfrgwlrTZfDwTfWqrrpgMpw
sRPgrzSgrSbfTrgspBPsDWWTmdnvdZWZwTmwvdmd
tVGpCGqCGjlHcNGVNHZDmnZMWdWMWCdZDvnZ
HqpQptLlclLGtlpcjHNhQqfRhrSBrrbfbrSRrsPfBSgg
JpjLbQbFPBjDBBJLWltglfBfhhlcctht
vNFmsdFsnmzGtWvgzhzc
rqwRCCqmCTqHCnqRNTNFsJVMQSjLRbbVVbjQVLbLSV
mLNNCNDwBwDnmCwnJwLRvdlqZclRccsgvcZndc
QWMtVWbpVlgHHcgMHs
VsTVWhThsVQWzjtQPpVWjWbpwJNCJDCzSNNCCCSfmfBCSGLL
NbSfHnwDvwwfHwwQsHbWPgrsZsZjRPLRgLWhWP
lmMlTGFzVmzqjGLLZWWGhrCh
qFclMprqmrvbcnwDQtNQ
tWQZFvvtWQWbqQQggZZLvpLrpzDrmGDmmDHPzPzHrfnHTG
NMlhlTMccTCVBlRNHzJnzDDmnJmnGGBf
NMMSSSSSlNVMdjdNSNNhFwTbvbLqjbtLwWQwZqgg
jPwcJwRmmhJpbhNJVgDbrHzzzQzzBQHg
tdZqlCnnnlvZCqlnlCSqZdFCHGDBgzsDzssBtHGLQtrHsssL
TZZFSdrdlZMFZRMwMPmNcwNmwm
nsdhzmDBGQWQPvJPjbbW
gCgBqCNpMHTwgwqMPRJJTtWjbFRJFJvP
ZlCwBrwgmzhGzDrd
sTBHfcnBTnqHRvqPgFFbLtrQTPLjjm
GWzpwSJSpbwbNNGJPQrrtrrrrgzLtjzm
NNSlCCdplWwplCwSndnssdZfqVbHvfqc
rrfHgqnlllRrDgrCbQfszMPtmzPQzFsFMQ
JJLGVGjcwVcPQNNNtRPmLM
WThVJJWJBdGwBpBTqDrSRCCggShqbSCb
TbCqzqzmbCffzDbHRddLbdRFRS
ZmvZJPjPwwWNZJGtWSDRRDFWSLhhhMVVWL
ZwplGwmptNjZnjvnGGPjJlZppTrTsCczfggBgfgfggCsBrqr
gMBBbfBbBMfnMsvRvWJhDsQW
ZZqHLzczjjsLzlpjqTprNJvhQpRvtRJJQrtQtJ
llZlzZZzPZZqsTZscHczfnSwSPSwwgSBwwSnPwnf
chMtcPPgQtthqgvczhMTcCSBLBlGpsFnBnnsGvLplSFG
bhRmJWDRmHSmFGBnGBps
jdDZWbrDdDbbdbDrRRWwRjZRVqztCzqtcThcTQtgqVMMVzjq
flNmNHgcZwTzRLzMLRPlzz
nntqBJtFbbCbBVCnBtFjJjhVhLzLvRLvgRRvPvpMpvpp
CgJWjJQDjgBtnGNGfcssNfcwNW
MrMpMrGBznjPMGCmCrrjdwndfJLQNfdLQNdNggdL
sJVcZqvhZtVqhDFFsDJslcdwgwvwQwwQNbbTbwfLLTgL
RDDRcsSsstJstVDDqctszzmRmGjpjBRHPmmGHGrj
tdplZtlrBGwTlLQQ
sfsPPvNhWLQBhGQG
zPVfzVbbMcscvVfzzNgcJHnJZgtrrndJqjJqndrL
nglLjRCCHLLCnNCLHQnFNQmmVMbVmwMwlMwMMMWwBTsT
cqtfcqZpzhSvvBfWwbvrbT
PPqpDSqcSJPdPhtPtqZcpPtGjFRFFFNLJFGRgjFbGRNbHn
gjtRSLMqLdSgLMCltTSDQcQQqhDcfcfrWDhWrr
GwFZCwNzFJsPmFFmZmPPNhvDDfDWWmpvQWWfVDQppW
swNGZbPBGwnCgBBlBljl
BsrDsnQGwFFQQtfNTBNSffBgBt
VJlhWVLlRppLQZTCbtZTttgJ
ppLqqRhQdRPhqPVhdPjhljqHFnGnzFrjFFDznHFHrmwwnH
CJMmmJLmlshCCdmzjHjPWztgdnjttt
GwZvGwrgTcFpzHWjnT
GbqrvrRwbrbGbwwZBbgfhmJMmsDJhNRfLChhCh
CfgfjCLCgfgFgBhBsccswQwtsQHvBBtc
SbSMGbnmDMGJWmRmDmvzwtcscWtQzsrPsvHc
DbJdNpJSnMSJmpSSNVqgqgTTFVQTFqdZLq
MBMCmlllPSSlmmPPjCMpPgggJcnZgntJsDvHsDZt
hrNzhrRNbrhbGRbfpVLRGNqqngvnttngJctgDZJGcZvHvZnc
LTTzVqppSmwdTmQW
mmlBQmLbsbmRnFnwlqqprF
dZScZSZSdHcNMDcJwLqRfppzpzfTpHfF
JLWJLJJJdMmGtgCWjQjt
PPMzpVDblwGVMMzDLLjrcrjdzjdTzLjd
RRcCJRcNQRBqtCFBRJJsZWBWrjLWLHZZWndBLWjh
qQQtttNqsqqtJRgqQfcpcgDcbggplGbfMp
QmmSTQPmLSmjpczMJtwPzg
BHHHdwdvDpllvctjZv
HdrDHNfrrBDGGBhBNfHNsLFqmbRQSwqmGTLnTbSF
gcMmgRQPqqPPsgjFSvctCHvHllSSHcvd
JTWfZwhTwzbWwTFTrZnTrDDlDSVtVHLVShtvSHvlHL
bWbWBfzTfwrWJNbTrnzfTwJFpmMQgqsFRsQGqRMggPmPBG
GqCWpGGLpmpWjbSDGjGGmwCzZlvMBTrCvsrlwwswCl
FPFHFVdJgQHJZnslrgvsTrwMlNgw
hQVchcdcZZpZqcDG
JbBRgBsRffgPPFQttQvQQMvG
dmNZgmZVtGTNtNGC
ZqqndLZnccqRbsrgpggsBc
DDvMVmTjwFWPBBTzBF
cqnggcbNNCqbQQqbZbpfQpqgRWlFhLRBhRzRPLFJhlJBfPLh
dpscpcncbbqcpMVSvSrPDMsrjr
hGCGZmVRRcMVsGMtmZWssmFLzbFblnnzfmqbfnzNNb
wjrSPBJdSjjDrggpSJpdrSnlFNlzLTnqNLqqpbqqfMln
dMwPBHPPJHDdvrBBhshWCGcsQRcHRZGV
vdHwhqdtLdVnHBZbFBFzbBPS
TmNCLNDpWfCNmpCgTWNTDMMZlzSggBMzlZlMBlBbZZ
NQfWcscDNQrhqvGLrdhVjh
lZLqzzqvgrCRcQcCLD
HSVVwNTJzwVNTDQrRrrdrBwdhd
TpNTzsfSTVsSpHVppzFpgvvlqZWZPMvMjPPGGsgP
BCMLshLdLDDCgwFRwHHqqRqRWd
QnSqQlGSfpQzTQJNTPNwNPFRFcccHc
mfJJmztnQpGpvnSzGrsqgrhrBBhqjBrthL
BSlmzmlvdNnlQlQQJnJHRVFVFVVqMtqRMfSfCw
WBPsDPBBjfssFHMRRq
DLWpGhbPjbhZrhZDnBQgdNZmQNgmvdzg
WWvgBFgHWChBzgBFbjbtPtnPrsHlsRMrwRrMRR
SGfNpfdGfVpVSGGppSDdwRwclMlfPMwccsntPqPw
TVdpQDSpQZJpVpDQQFBbthvmWzmgvhbjzJ
VVCCbzqdbzhFHvbdhZFPmhCPSNRNGSrPJfTNRSGJfGwPST
LngtBnlcnDvLcTTRfTTwRtGNTG
DpnBjMpLlLDQWDgvpLvbqzmbjzVjVHqbFFqbFq
SbzMbNQQSDdmvqqzdSlWFpwZnvpFWWllpFww
CjLPTPjjLCPtBCLJjBLPLBTFsFFgfwwpZgplpgFnWWRl
nPncrBHGnmrbdmdmNN
FnlblGlTTbNVLVtRvQQvgqRQBCvgNr
DPMDMpMHmnzjPqDhQWvvQvhghq
zMMcddznsjFTldVGlFGT
cLSNGLhmRRVmlVCq
HvzbQBzBMQMpQDpCSlSVZRSCqV
QwWznWnTbQSMMJQHnvwbWjrhNhLFgsGNNrFLNnFNhd
dBrWNQWWcTNqqnNN
bPlmgRgRghlCVlbhwZccCZjZqvmqvmTTvGqmJTvqnGTGvLLJ
DCDZhjllcpDMrSQS
ddtNNTFTwRzGRGCwqnBMjlqMHMfqnB
hDpPsQLLSprhnHVhqhVfHM
QWLWDQZpgpWbQgfspGGRdcGcCcCcztTGZC
GGHFdGwFlswcFtnvTfjMjBFfNBjNBZ
JWmSJLPSRprWWPWVMMVQpZfBvvfQtj
RzPSPDbDDhbhPDLRhCgGHHccsqGCqqtHzG
dbSdptWddDMNtdFvttFclqMTZJlJTlMZqJTJTqjC
BzfwRzrwPzfzLNGmZZCZBTGBqqlH
hVNVQPNQQQVLPwhRrQwgWWvFdDsFWSbdWgdFSFDb
hhSnmhtZSFSqZBJSSqqmJJRHPPLgHtPcGGGcWGtvvHwgvG
fCMpfTQjTrzrzCQMsQdHGHvPGPwLppPRvWPLLc
MdTzCsCMzNzDCTjlmNhRmRnZBllRVh
RrFglccgBVVvFNvCvWlgmDbbDfQDtCdjjDbDwmZD
STnMqSLHJhHHnqLqtnBndbBdfQQZDtZD
GHJPTBsTSsMMSpSBHJFNlWzcvFlzsVzvzgsv
lplNdrVrVrWMMVcJfcDDzbqCCpDL
SSSgvBRSjggPgzvTTRHTvFnfJLbcLsCDLnCLDCcJBsJq
GmHjjRwvHSjHTRjrlZrNMzVMhVrmVW
gdtFtgStSbHCbHMPZrFLPLrVlrVZrP
hQnjMGfDqTvzvpBjVVjPRLRRjJ
QmsQmhvvMtssHtWw
RNjTGSCLJCGdRqMRFvMrfzMvzz
ZpcWcVDpWBmWQMZZpZDpwBcznrshtntvfvhfFtzmvnzvhf
WHHHcVWgQVCbCllbgMLN
ZjjdJHSdSzvcZFMhhhDqDHtthw
rNTlNqVWTmRPlshsDPDlph
WbTNGNmQBRQbRNQgNGmCLdvvjzcCSBqLcLnScL
bZwpSpBvSHCBqNzpdFffqQft
nWRnGRnVnljmlDnzdPfQfdcQPWWfNq
dmRDGMMlDmnVjgMlhBSwCbCgwHbBHhvv
NwqLgLBLgnwNNBGpgsQsddhhpQQg
JcztcZnzVtZvnVcJMTvTJtWtppsQHGdQhhHHQsPhWdPS
fJTJnMmvZvMvRDqFblNBNNjlBf
drZVzZzzNWWzwwTWTZrjWcLCqnRqNnLNLqCqnsPPRL
JhlBgvHBBLnwMBqDwC
GmGFSHmhJSGJwgFJmwJhJhgQVWVdbSWZQzZTrWtZzjzjTz
wPGRPpnzgwwGgLddFBFrnrnJdc
jCsVclQWmCTrJJddrdFs
lWjlCqfmlWccpGPPSgcf
hCThCzTdPcPhzqTzMfVfHrhMMmhVHgVM
lJSJNqwJsZBSsSBFsMprDmFmFDfDDHgHDf
JNGQsSSNGsbZZZSBwZLPtdLjttnqPCbtPbjC
vnlWNpbrNrpShhQDLRLB
MzCjPgffVTVgCJSRQhBdRdJS
VPHcfcBfTzVMTttMzMfgzMfHvrllWvlnvNvlmGwWNwwNmw
BwwsqPJqwBssLlFqLRCDzWwzDGRGGWfSRG
vTtmmthvpphpnNgNvvpvRrDCddDQrCQCzCDrCfnf
pppccNpTVVlqssHHVzBH
HWHphZWVWvMZNvpMtfJZgssffsjJgBlslJ
RLmrFFnGFrFFrrFCRwCrLNPwqfjSJjqJSJBbsqjbbsblfq
LnFLPPGLrGNRQPmndLzPmPmpcDcMHhcMhVHvczcpHHchcV
zwqqvNDVggwqVfNQRlszFBsCCJFtFlFPsz
MSrrGTZPGSSMSjPbTmtlHBBFrFHFsHlsJsct
MnmMPMSZZGSZWmSjnWgfqdgVQDvnqvRDggDV
SQCSBShsQnSsSJswsNpVppPPMVpGpnDVgg
WWjHvmtWZrwvtzzjTTRPrRRrMVNVVGgVGpGR
lTvWjWLfWwbJCQqBSlbB
cjPChhswrNVtMZJjVM
pfvTFvTzLBFndGTlJmVJZmNlCMGtCJ
nfvFTfpbBFdSFpTLswsWDbchwHCWHrbw
lNdNPLJJLHHHlpPJcvtVcsBBrrBvBqrVrC
wDTbwTQRZTMWsVWtmWhhTr
nzRMbSZtMQDnpzzJHLHNflHP
HrwwmwcRbmwcbrrTbwwcrTJWLlPshllhLccqLhnnlljhZhjZ
GMFMSNSpCBSFSdGpNFpBznLlzzhzshlGhhqPhGGL
nFFSCCSSfttBdddDQNDBQpSSrbrmWJwrHfJHWJrbVwWHrgVr
SdddNNCmpNNDhMswhsmbhvHM
frtzqqqFjgrWfgfqtthsnvRHZRRvFlhnvRZb
rtrgqzzrbWtqLGLLtBWzfGcTNCCVGpSNDppTJJVddNpPSG
WWJvJvBgpHSHScQRQSVQLzqL
ddZTlZGZVfQhZRLLMqsR
rPfwrGGrFjjNTGNCCVBggDJHmNDvbmmpmNJJ
bbGrJPRVPtfsVfFlMjBV
WQzhQQQNZQCWNnQDhzWdNjFZggmlHjjmMmMFjFHpMs
CzQCSWDTWhNhzWhTGJwtRRqTblwcclvP
HLDvZgZldDTnLLsswMpVLn
FNVQzQSPznCMmpBwCF
SqfJPfttqffjJPVlhvhZZtvdVDRZ
jVsLvHvvdrSjpJFsGzmnmltnml
nTNTRCTBTmmmFPMJ
CQnCggWQDgBrrSqHjDDfSS
ZpNlrZNcmctZbcZlmcmZhhpPvPHvwBMHJPMTMHBTFJvJ
zmdCnGzGRnLDjQnzPvMFVHMVMLTVwMJv
GGjqssqgzCnCzQsshcffmrbNrrNZtW
DNpTwhpLlWMDWNMhbJjGttJFHgDcjtjG
wqQrdCdqbFtCtJtJ
vffdrwfPrsmqVBBWRVlRRlTSTWSTlR
ZqTCTQQTFvsDSsBDvWBd
hfBLzRLtHHLDDWRRWWDNbd
pHhhnPzLfJcJhzHLzZjcmwCTqTQgwBqqwg
WJHgqgFqrVrqgqCHwsJHHVFZzppZFGGfTtpcfbdpzzpd
RvNMQlMBhwMdMfcpbM
LLRQNBDSSNSwmDDBQRBRBCHsgrgHLVnJVqLsJsnCPJ
BFhGsDsDsBtsPGtQDrrMdbdrffrffbJbRt
cVVqScVSWWvVWgVZjnrHJgLfdrLrnrLLLQ
WmvqNZzzzZSvVzqvcccSzSmqFGCDTGBPQGDhwCDhNDCwPBQp
RqTlHHTTrQqHlTqsrVDqHbrZFZwhpBhphZBFhZpDpLLLfB
nSzGCGdvzdGNPBQQBfhLZfFwFN
WPPPCJMtJSQMJQCCWMJslRrrRgrMRbRqVqqTRR
BMtfLsLZfTPmCtGWZrZqJNJqvpZdWr
bRwgHhhRhbbSRbjSglcgwHHJWPcJdPrnNWrnqnWVVqpdnq
bgjlSgDljHhjgwMPCLPFDMFPGGBC
zJWjczcWjSWghZgzgSSSZflTqwlfqTTbnQwhdTnMdl
NrGVCmNpHFPsrJFbFQMJbJdQTn
JvrtpHHmrCGJCJmNvNpVCsHVgzWgWDDcjjgjDRStWWDLSgzz
HzdFsBBVsfnTfsPmPtDcZqtMhDDz
wrjjRQLlwwwrJQLQbCrbwlJDSlcSDtPZmPSDclWDtcDqWh
RwgprLbNLrLbCCpRCrJLRLFfsGTNNZHBZnnBvvfffnvd
MlqqlWZclnPtZtDSSvwQQjgQpNQSRM
rLJTsBrsJBhshTNNwSQBWNvNgNSg
JbbbChCHsJzHzbWdGHThlFnnPqlPlGPPGncPtFlD
WcMVvwNNvjRcwTQwVcpNRcspPCFtbPztbCTFmtPtCJtbCzmz
grrgDhrnDLnLrdfdLZlLZhmCqzlCbtJlSSStFmttqsJJ
GHHDdgnLDDhrrrgZrZgLNVVVVcRNvcwjWvpWGcRs
qhGhPSJtGhGtJtvNjnJjnvmNQQmj
sRBFlbZsrdBRRGbVGBDwDMDQwQwMNDjjjVNV
CzCflffbBszdBCbdbrtLcfhhgHLGgPccLSPh
zShhHFzgJWFVFFHFHhRPNjwqPLPtLbtrbwVjjr
ssnvTmvCDfpCZTnsfCqwNLNPwbJqNJPwrjZw
vDvpmcnmnBDnsnJTJmQWMHMWzScFggRFRFSW
nnVHHPLrnpssLnrpLRnHtHrjJcCdzCjcDzMzdqwRdjdDcJ
WWTGQQzSGWlTmBbDJJjwMJjcvvlDjw
TGTWBTWmTbgzghZhgzBgpVNrZPPfntfNrVLNNnZP
TqhQnqqLnnqddttNqQWdtqQmppSSFFClRmzmFZFLSmSlFF
BcHjGclVPPBrVrcjrGGDrMgcmmRJbRCFzpZmSDRpRZJJmRzz
ccGjMgvPvsHMgvBHWlhQdqwtllwNdThs
WjddwRGgHRRdMbrwHRwWjHDtDZplslnJnZrsDvCprJPJ
QSLLFqQBffCFststlFnn
CSSmSqzmVVjWMdMjVWgT
lTfQRhVpRzjThpRQTTTlvHrvBvHnPMHgHqHJvn
cGDctCwCdDCGSFcJsFJsFBvgnMBrHvvrqngHgmgssg
SCbSDSFScNpfbRVVJf
RrwmdwMVjMjMTghDWNTJDpWfWG
SbPvNbvbSsPbSvZsPJtJWhHpGGGgJWgJ
lSFvsLNcqzqLrwnFQMnVdmnn
FgCJFTWntWTFtPLmJmmQJmCMMpljWZBwlGMljjjlwvwBvZ
SDSbVbdScSDzbLZMBrjlZpVrZp
ccsSDhSDffzbLNscfcfDcgqhPgTntqmnQmCgtgQCTJ
VnCnrHnPPrCwHmVWtqfMQQqzCqffCZ
DDbDcJJJbpJDGppFpqGZRWfGfddzMWtfWM
tTTglDcgFjwNPHPPwHlH
bMGbqqgPqqVVMGnbVqSMmRfPcJmCTPDDLJDTCmDm
FFjjZvFRsFCctmtvtJWD
wwFhHjQjwQhZrFjQbngglGbRMnSzgbRH
GPTTJSgTPrPPmcTPpdJsGGGjqbRvqlztqlRqMzGjRv
LwnfWLNwwHHQwHnjbbMMjWttqtMmMj
mhwfBDhnQTpJBcBJps
HQQHwMfwlltzMlVljQhVjjHPPPFGPFcCGprPTPPfDrDcGf
pRLdvRvJgqLRBSJCcvFnCDTPTcTGnT
LBLSJbRSLSqbSdBdgJRRqRbwjHHblQttlwtwhzpjMlwhpw
NWLNSNSDtgSgghgdcwccmwGntwclnT
FRCQzJRsvfVVjvzFJfQnffwCcmdwmHmmHmTwmCmdGBcq
sjfJvjfzPRPzvPPVFMssvSLhSSWrMZnSDNrDDhSLZZ
FvLpSLtCfPCWhRSZZMZJSW
jbbjwbHjQmHjHsQrQFMnwTnJznwRzhJRnNTM
gVrjqGqjgrgsFGLDtDBLLfLB
cgTvRWWLVScRWflNJJDfVJmVlG
nPPnnmqjmZHCHBHFdfwNsDhzzfJznhsfhw
bddmQqQjpdFCQWtLQMMSvMMQRS
wjnmPwCgjPnRlwnmvmvvPnTwbSSLLvsLDWdbbWzvsLzWbzbz
NqrGqFHqJlfhhJGbszdWQzzLNtQDzz
FfHFpphrJqJrpGBffcTnBjCnVTMjMRCnVljT
SrfSJGJpSgMprMHdhBGhsdsshdGsmm
nRTRPvQllQlblwvCjTwLTnvBqdhmHDPVsmDmdqshDVhNsP
lbRFHvRwlnlLbnbjLbLjLCzggSpWfMFzSZpzZFJJWpJr
vNLlFldlvPtHFPHQRt
jcpRsScDgshzjqzfVStntBTPMTnmWttntMpp
fSssgVjDsbqSVbCJClLRJLCZRZZb
wnHmCJccDDcrNnrNMRDtTzpTlMpTzpBp
PjSPPGjWjLzTjjMtzzMj
hWvLLFWvHvczVcVn
jgtngnnhMthcnLjMgCZvChDsmdNCvNNZDN
bWqFPbFbLzRFfZBNDNNPZsNd
RbJzGpzVLLLWHHQgTMwcTptQ
sJBhsMWQnhhrFBsFhlQQMfrDCDpLlVCddjTdDDpqDLTLdj
tZHHSRmNHcgmNzpDPJtttqjLqdpL
HbNbZmcHQJbsFWvs
VgPNWGbgSjGjfhRRFfzThtmtzF
qLCQJBqqcPPmLHhHFz
CcJvplQswNgZlNPSbS

17
2022/3/part1.ts Normal file
View file

@ -0,0 +1,17 @@
const input = Deno.readTextFileSync("input");
const priority = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
let sum = 0;
for(const line of input.split("\n")) {
const firstHalf = line.slice(0, line.length / 2);
const secondHalf = line.slice(line.length / 2);
console.log(firstHalf, secondHalf, firstHalf.length, secondHalf.length);
const sharedLetter = firstHalf.split("").find((letter) => secondHalf.includes(letter));
sum += priority.indexOf(sharedLetter!) + 1;
console.log(sharedLetter, priority.indexOf(sharedLetter!) + 1);
}
console.log(sum)

17
2022/3/part2.ts Normal file
View file

@ -0,0 +1,17 @@
const input = Deno.readTextFileSync("input");
const priority = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".split("");
let sum = 0;
const lines = input.split("\n");
for(let i = 0; i < lines.length; i += 3) {
const first = lines[i];
const second = lines[i + 1];
const third = lines[i + 2];
const sharedLetter = first.split("").find((letter) => second.includes(letter) && third.includes(letter));
sum += priority.indexOf(sharedLetter!) + 1;
}
console.log(sum)

6
2022/3/testinput Normal file
View file

@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

1000
2022/4/input Normal file

File diff suppressed because it is too large Load diff

18
2022/4/part1.ts Normal file
View file

@ -0,0 +1,18 @@
const input = Deno.readTextFileSync("input");
let sum = 0;
for(const line of input.split("\n")) {
const [first1, first2, second1, second2] = line.split(/[^\d]/).map(t => parseInt(t));
console.log(".".repeat(first1) + "X".repeat(first2 - first1 + 1) + ".".repeat(100-first2) + " " + first1 + "-" + first2);
console.log(".".repeat(second1) + "X".repeat(second2 - second1 + 1) + ".".repeat(100-second2) + " " + second1 + "-" + second2);
if(first1 <= second1 && first2 >= second2 || first1 >= second1 && first2 <= second2) {
sum++;
console.log(`${first1}-${first2},${second1}-${second2} yes`);
} else {
console.log(`${first1}-${first2},${second1}-${second2} no`);
}
console.log();
}
console.log(sum);

18
2022/4/part2.ts Normal file
View file

@ -0,0 +1,18 @@
const input = Deno.readTextFileSync("input");
let sum = 0;
for(const line of input.split("\n")) {
const [first1, first2, second1, second2] = line.split(/[^\d]/).map(t => parseInt(t));
console.log(".".repeat(first1) + "X".repeat(first2 - first1 + 1) + ".".repeat(100-first2) + " " + first1 + "-" + first2);
console.log(".".repeat(second1) + "X".repeat(second2 - second1 + 1) + ".".repeat(100-second2) + " " + second1 + "-" + second2);
if(first1 >= second1 && first1 <= second2 || first2 >= second1 && first2 <= second2 || second1 >= first1 && second1 <= first2 || second2 >= first1 && second2 <= first2) {
sum++;
console.log(`${first1}-${first2},${second1}-${second2} yes`);
} else {
console.log(`${first1}-${first2},${second1}-${second2} no`);
}
console.log();
}
console.log(sum);

6
2022/4/testinput Normal file
View file

@ -0,0 +1,6 @@
2-4,6-8
2-3,4-5
5-7,7-9
2-8,3-7
6-6,4-6
2-6,4-8

512
2022/5/input Normal file
View file

@ -0,0 +1,512 @@
[F] [Q] [Q]
[B] [Q] [V] [D] [S]
[S] [P] [T] [R] [M] [D]
[J] [V] [W] [M] [F] [J] [J]
[Z] [G] [S] [W] [N] [D] [R] [T]
[V] [M] [B] [G] [S] [C] [T] [V] [S]
[D] [S] [L] [J] [L] [G] [G] [F] [R]
[G] [Z] [C] [H] [C] [R] [H] [P] [D]
1 2 3 4 5 6 7 8 9
move 3 from 5 to 2
move 3 from 8 to 4
move 7 from 7 to 3
move 14 from 3 to 9
move 8 from 4 to 1
move 1 from 7 to 5
move 2 from 6 to 4
move 4 from 5 to 7
move 1 from 3 to 6
move 3 from 4 to 3
move 1 from 4 to 1
move 5 from 1 to 9
move 1 from 4 to 6
move 4 from 7 to 4
move 15 from 9 to 2
move 7 from 1 to 6
move 3 from 3 to 5
move 1 from 4 to 9
move 2 from 5 to 3
move 2 from 4 to 9
move 4 from 1 to 6
move 1 from 3 to 1
move 1 from 3 to 2
move 4 from 6 to 3
move 24 from 2 to 8
move 4 from 9 to 8
move 1 from 1 to 3
move 2 from 5 to 4
move 1 from 2 to 4
move 19 from 8 to 1
move 5 from 3 to 9
move 8 from 1 to 3
move 3 from 4 to 1
move 6 from 9 to 5
move 2 from 3 to 4
move 1 from 8 to 5
move 2 from 4 to 6
move 11 from 6 to 1
move 8 from 8 to 7
move 1 from 6 to 5
move 13 from 1 to 3
move 1 from 1 to 7
move 2 from 7 to 8
move 5 from 7 to 1
move 2 from 8 to 4
move 3 from 5 to 3
move 11 from 3 to 1
move 2 from 5 to 3
move 2 from 5 to 3
move 2 from 7 to 1
move 7 from 3 to 1
move 1 from 4 to 5
move 1 from 6 to 4
move 3 from 4 to 7
move 3 from 7 to 1
move 6 from 3 to 5
move 1 from 5 to 9
move 4 from 5 to 4
move 2 from 3 to 4
move 8 from 9 to 2
move 5 from 4 to 6
move 1 from 6 to 5
move 1 from 4 to 9
move 39 from 1 to 7
move 7 from 2 to 6
move 1 from 9 to 3
move 1 from 2 to 7
move 1 from 3 to 1
move 5 from 7 to 3
move 4 from 5 to 1
move 19 from 7 to 9
move 1 from 9 to 8
move 1 from 9 to 7
move 5 from 9 to 3
move 6 from 6 to 7
move 1 from 8 to 3
move 4 from 1 to 4
move 23 from 7 to 6
move 1 from 1 to 6
move 21 from 6 to 2
move 3 from 4 to 8
move 7 from 6 to 1
move 1 from 4 to 9
move 1 from 6 to 7
move 6 from 1 to 2
move 1 from 7 to 4
move 15 from 2 to 8
move 5 from 3 to 8
move 22 from 8 to 7
move 1 from 8 to 1
move 5 from 3 to 4
move 1 from 3 to 2
move 1 from 1 to 2
move 3 from 4 to 8
move 3 from 8 to 9
move 11 from 2 to 1
move 2 from 1 to 4
move 15 from 9 to 5
move 22 from 7 to 3
move 2 from 4 to 9
move 3 from 4 to 2
move 8 from 1 to 8
move 6 from 8 to 6
move 1 from 6 to 2
move 3 from 6 to 9
move 3 from 2 to 7
move 4 from 2 to 9
move 2 from 7 to 5
move 1 from 1 to 7
move 2 from 8 to 2
move 2 from 7 to 5
move 9 from 5 to 3
move 8 from 5 to 2
move 1 from 6 to 4
move 1 from 6 to 9
move 1 from 2 to 9
move 2 from 5 to 1
move 7 from 2 to 3
move 1 from 4 to 3
move 1 from 2 to 4
move 5 from 3 to 4
move 6 from 9 to 3
move 1 from 2 to 6
move 6 from 9 to 6
move 2 from 1 to 8
move 3 from 6 to 3
move 2 from 8 to 6
move 6 from 4 to 1
move 14 from 3 to 9
move 1 from 6 to 4
move 3 from 3 to 9
move 1 from 4 to 5
move 10 from 9 to 6
move 6 from 6 to 7
move 2 from 1 to 8
move 1 from 8 to 6
move 16 from 3 to 2
move 1 from 8 to 1
move 1 from 7 to 1
move 7 from 3 to 4
move 1 from 6 to 5
move 4 from 2 to 3
move 5 from 4 to 9
move 2 from 4 to 5
move 4 from 7 to 4
move 5 from 9 to 6
move 2 from 5 to 4
move 11 from 6 to 7
move 1 from 6 to 8
move 5 from 1 to 5
move 2 from 6 to 4
move 7 from 7 to 3
move 1 from 8 to 6
move 2 from 7 to 3
move 1 from 1 to 3
move 3 from 2 to 8
move 9 from 2 to 5
move 1 from 6 to 1
move 1 from 4 to 8
move 7 from 4 to 7
move 8 from 5 to 6
move 1 from 7 to 2
move 1 from 7 to 4
move 3 from 7 to 8
move 1 from 2 to 3
move 1 from 1 to 2
move 1 from 1 to 7
move 3 from 7 to 6
move 11 from 6 to 2
move 4 from 8 to 7
move 2 from 8 to 7
move 15 from 3 to 2
move 7 from 9 to 4
move 3 from 3 to 2
move 4 from 4 to 7
move 5 from 7 to 3
move 3 from 4 to 6
move 3 from 6 to 9
move 1 from 4 to 2
move 1 from 8 to 1
move 2 from 3 to 7
move 2 from 3 to 7
move 23 from 2 to 5
move 1 from 9 to 1
move 1 from 7 to 9
move 1 from 1 to 8
move 8 from 7 to 1
move 1 from 8 to 4
move 1 from 4 to 2
move 3 from 9 to 8
move 1 from 7 to 9
move 22 from 5 to 9
move 1 from 8 to 5
move 1 from 7 to 4
move 1 from 4 to 5
move 1 from 8 to 3
move 2 from 9 to 3
move 5 from 5 to 2
move 5 from 5 to 4
move 3 from 2 to 7
move 1 from 7 to 3
move 6 from 1 to 7
move 4 from 3 to 1
move 6 from 2 to 8
move 1 from 5 to 6
move 2 from 8 to 1
move 12 from 9 to 4
move 8 from 9 to 4
move 1 from 2 to 9
move 2 from 9 to 8
move 3 from 2 to 8
move 5 from 8 to 6
move 7 from 7 to 1
move 4 from 8 to 9
move 1 from 6 to 1
move 17 from 4 to 7
move 1 from 2 to 4
move 2 from 4 to 1
move 6 from 4 to 6
move 1 from 1 to 4
move 7 from 1 to 5
move 9 from 7 to 9
move 8 from 9 to 8
move 5 from 8 to 3
move 1 from 5 to 6
move 2 from 3 to 6
move 1 from 9 to 1
move 1 from 6 to 1
move 10 from 6 to 1
move 1 from 5 to 1
move 2 from 9 to 1
move 1 from 9 to 7
move 2 from 6 to 8
move 2 from 8 to 2
move 1 from 6 to 8
move 22 from 1 to 9
move 9 from 7 to 5
move 1 from 8 to 1
move 2 from 8 to 3
move 4 from 5 to 9
move 1 from 8 to 3
move 5 from 1 to 9
move 2 from 7 to 3
move 2 from 4 to 7
move 1 from 8 to 5
move 2 from 2 to 4
move 1 from 5 to 8
move 9 from 5 to 8
move 2 from 7 to 5
move 2 from 4 to 5
move 3 from 8 to 4
move 3 from 4 to 3
move 2 from 8 to 6
move 1 from 6 to 4
move 3 from 5 to 9
move 1 from 6 to 3
move 12 from 3 to 5
move 1 from 3 to 1
move 7 from 5 to 4
move 1 from 1 to 3
move 1 from 8 to 1
move 7 from 5 to 1
move 6 from 9 to 6
move 29 from 9 to 5
move 2 from 4 to 6
move 26 from 5 to 2
move 24 from 2 to 7
move 1 from 3 to 2
move 8 from 1 to 7
move 7 from 6 to 9
move 2 from 5 to 3
move 1 from 6 to 4
move 3 from 8 to 5
move 2 from 3 to 8
move 2 from 2 to 8
move 5 from 9 to 2
move 27 from 7 to 2
move 2 from 8 to 3
move 2 from 9 to 5
move 3 from 8 to 5
move 2 from 7 to 4
move 3 from 4 to 7
move 2 from 3 to 2
move 4 from 5 to 1
move 5 from 7 to 2
move 29 from 2 to 8
move 9 from 8 to 3
move 2 from 4 to 8
move 7 from 3 to 2
move 3 from 5 to 4
move 1 from 7 to 5
move 3 from 5 to 6
move 2 from 1 to 8
move 2 from 6 to 8
move 3 from 4 to 2
move 4 from 4 to 2
move 1 from 6 to 8
move 8 from 2 to 4
move 2 from 3 to 5
move 1 from 4 to 1
move 3 from 1 to 2
move 4 from 8 to 2
move 3 from 4 to 9
move 3 from 4 to 1
move 2 from 9 to 5
move 1 from 4 to 6
move 4 from 5 to 1
move 1 from 6 to 8
move 1 from 9 to 3
move 4 from 2 to 3
move 15 from 8 to 2
move 9 from 8 to 1
move 1 from 3 to 9
move 5 from 1 to 9
move 3 from 9 to 7
move 2 from 7 to 6
move 3 from 3 to 2
move 1 from 7 to 8
move 1 from 9 to 6
move 1 from 9 to 8
move 2 from 8 to 2
move 1 from 1 to 2
move 1 from 3 to 7
move 4 from 1 to 7
move 19 from 2 to 5
move 1 from 1 to 4
move 1 from 7 to 4
move 1 from 1 to 5
move 3 from 1 to 4
move 1 from 1 to 8
move 6 from 2 to 4
move 7 from 2 to 1
move 2 from 7 to 9
move 8 from 2 to 8
move 2 from 7 to 3
move 1 from 6 to 4
move 10 from 4 to 6
move 5 from 6 to 7
move 2 from 9 to 8
move 6 from 8 to 9
move 1 from 2 to 3
move 2 from 8 to 3
move 5 from 1 to 8
move 8 from 5 to 2
move 8 from 8 to 7
move 7 from 2 to 8
move 1 from 1 to 2
move 1 from 9 to 7
move 1 from 4 to 2
move 2 from 2 to 6
move 5 from 9 to 3
move 2 from 8 to 6
move 2 from 3 to 9
move 4 from 8 to 6
move 7 from 6 to 1
move 8 from 1 to 5
move 1 from 8 to 7
move 1 from 9 to 6
move 12 from 5 to 3
move 1 from 4 to 8
move 2 from 9 to 5
move 1 from 2 to 3
move 3 from 5 to 1
move 1 from 1 to 5
move 21 from 3 to 8
move 2 from 1 to 5
move 6 from 5 to 7
move 2 from 5 to 6
move 10 from 6 to 9
move 1 from 6 to 8
move 13 from 8 to 2
move 2 from 5 to 4
move 2 from 4 to 3
move 4 from 9 to 1
move 5 from 7 to 8
move 12 from 8 to 1
move 5 from 9 to 6
move 1 from 3 to 7
move 2 from 6 to 5
move 11 from 2 to 1
move 1 from 8 to 4
move 16 from 1 to 9
move 1 from 2 to 6
move 1 from 8 to 5
move 12 from 9 to 3
move 14 from 7 to 2
move 1 from 7 to 9
move 1 from 4 to 2
move 1 from 7 to 5
move 3 from 9 to 5
move 4 from 6 to 9
move 3 from 9 to 4
move 1 from 8 to 4
move 2 from 4 to 5
move 1 from 7 to 1
move 5 from 3 to 5
move 2 from 4 to 2
move 8 from 2 to 7
move 7 from 2 to 4
move 1 from 3 to 7
move 3 from 9 to 7
move 2 from 2 to 9
move 3 from 4 to 5
move 6 from 1 to 8
move 6 from 1 to 5
move 3 from 9 to 2
move 22 from 5 to 9
move 1 from 5 to 6
move 2 from 2 to 3
move 5 from 7 to 6
move 5 from 8 to 9
move 2 from 7 to 2
move 20 from 9 to 4
move 1 from 8 to 3
move 2 from 2 to 5
move 1 from 2 to 5
move 15 from 4 to 8
move 1 from 5 to 7
move 6 from 9 to 1
move 5 from 4 to 8
move 2 from 4 to 8
move 1 from 2 to 1
move 5 from 6 to 5
move 5 from 5 to 7
move 1 from 9 to 8
move 5 from 7 to 2
move 2 from 5 to 1
move 4 from 7 to 5
move 1 from 5 to 9
move 1 from 6 to 8
move 1 from 7 to 2
move 6 from 3 to 4
move 3 from 5 to 7
move 1 from 9 to 2
move 6 from 2 to 3
move 1 from 3 to 4
move 13 from 8 to 9
move 7 from 1 to 5
move 6 from 9 to 2
move 1 from 1 to 4
move 6 from 2 to 3
move 1 from 1 to 4
move 5 from 9 to 7
move 11 from 8 to 4
move 7 from 7 to 3
move 2 from 7 to 8
move 1 from 8 to 2
move 8 from 4 to 1
move 2 from 1 to 6
move 2 from 5 to 8
move 3 from 1 to 9
move 1 from 8 to 2
move 11 from 3 to 2
move 2 from 8 to 9
move 9 from 4 to 7
move 11 from 3 to 8
move 7 from 9 to 6
move 5 from 4 to 6
move 3 from 7 to 3
move 1 from 7 to 1
move 5 from 7 to 6
move 2 from 3 to 5
move 1 from 3 to 4
move 5 from 2 to 5
move 1 from 1 to 7
move 1 from 4 to 8
move 1 from 7 to 6
move 7 from 5 to 7
move 2 from 5 to 7
move 3 from 1 to 7
move 1 from 2 to 3
move 1 from 6 to 4
move 1 from 3 to 4
move 1 from 5 to 3
move 18 from 6 to 4
move 9 from 7 to 1
move 14 from 4 to 6
move 3 from 6 to 4
move 12 from 6 to 7
move 2 from 5 to 3
move 3 from 7 to 4
move 6 from 4 to 7
move 5 from 1 to 7
move 5 from 4 to 5
move 5 from 2 to 1
move 9 from 8 to 4
move 9 from 1 to 3
move 2 from 8 to 2
move 4 from 2 to 4
move 1 from 7 to 6
move 1 from 2 to 3
move 1 from 8 to 9
move 1 from 6 to 9
move 2 from 9 to 3
move 3 from 4 to 1
move 13 from 3 to 5
move 12 from 5 to 1
move 7 from 1 to 8
move 1 from 3 to 6
move 4 from 5 to 4
move 1 from 5 to 2
move 8 from 4 to 9

39
2022/5/part1.ts Normal file
View file

@ -0,0 +1,39 @@
const file = Deno.readTextFileSync("./input");
const [arrangement, moves] = file.split("\n\n");
const list: string[][] = [];
function visualize() {
console.log(
list.map((t,i) => (i+1) + " " + t.slice().reverse().join(" ")).join("\n")
)
}
for(const line of arrangement.split("\n")) {
if(line[1] == "1") break;
for(let i = 0; i < line.length; i+=4) {
const letter = line[i + 1];
if(letter == " ") continue;
const num = i/4;
if(!list[num]) list[num] = [];
list[num].push(letter);
}
}
visualize();
for(const move of moves.split("\n")) {
if(!move.startsWith("move")) break;
const [, num, , src, , dest ] = move.split(" ").map(t => parseInt(t));
console.log();
console.log(`Move ${num} from ${src} to ${dest}`);
let moved = list[src - 1].splice(0, num).reverse();
list[dest - 1].unshift(...moved);
console.log(moved);
visualize();
}
console.log(list)
visualize();

39
2022/5/part2.ts Normal file
View file

@ -0,0 +1,39 @@
const file = Deno.readTextFileSync("./input");
const [arrangement, moves] = file.split("\n\n");
const list: string[][] = [];
function visualize() {
console.log(
list.map((t,i) => (i+1) + " " + t.slice().reverse().join(" ")).join("\n")
)
}
for(const line of arrangement.split("\n")) {
if(line[1] == "1") break;
for(let i = 0; i < line.length; i+=4) {
const letter = line[i + 1];
if(letter == " ") continue;
const num = i/4;
if(!list[num]) list[num] = [];
list[num].push(letter);
}
}
visualize();
for(const move of moves.split("\n")) {
if(!move.startsWith("move")) break;
const [, num, , src, , dest ] = move.split(" ").map(t => parseInt(t));
console.log();
console.log(`Move ${num} from ${src} to ${dest}`);
let moved = list[src - 1].splice(0, num);
list[dest - 1].unshift(...moved);
console.log(moved);
visualize();
}
console.log(list)
visualize();

9
2022/5/testinput Normal file
View file

@ -0,0 +1,9 @@
[D]
[N] [C]
[Z] [M] [P]
1 2 3
move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

1
2022/6/input Normal file
View file

@ -0,0 +1 @@
vftfrfcrfrpptffhnnnsznzgngqgsssczcjcdcssmgmtmnmqnmmfttbdttqtggmgpmmqrqzrzttptpdtpddqfdffgjgzjzczjcjjvttvmmrwmrwwjtwjttnccgbcbjbgjjcvvsqshszhzvhvsstjjljcczmzjmzzdtzzhfhvvvflljtllfqqdmmmhmfhffzhhtgtssqppgcppfjjrnngwwrvrvqvpppcspsrrsqqqlmmpcmcjmmjhmhzzpnnggmjjrprptpccdggcrrwfwggsfggbbqlqflqqcsqqccqzqbbnbmmlzllnhnwwsjsgstgttfdtffzfvzvbzzrlzlppcsctcncrncnjnfnqnvngnzzscslsppdqdbbthhqvqfvqqvccvdcddsllnwnqwwsccjmcjmmfmppnzpzffslffjrfjftftrffwcwppfsftssdwdzzffnwndnvnggbbfbgfbbfmbbjzzdqdtqtfqqpzzqpzpllvrrbqqbcqqzvznzmmwcwtwftwfwtftvtddhldldblbzlbzlllcjjwllvcllqplqplpzlzqzsqzsznnqwnqqrcqqnrrhmmqbqqlbqqrhrrdgrrsqssnwsnswsgsfsbbdhbdbqqtsqsbsmmbtmmghhcththrrnvvnlvvdvwwjwmwbmmvtvztzmtmrmprpvvmbmrbrsbbpsbbtccwgccbctbccjrjcjtccrrdnnwwqrwwjpjtptcpcfpfvfjjtqtnqqvzqqfhfrftrrgqgbqqtwwthwhqwqjqmmlglnlrnlrnnshsmspmmfnnqwqgwqqprpbbjbhjbbfqftfwwjhhcpcgcpcvppgfgcfgffbzbfzbzqzccmppndppspbssnbbpdpjpgpngpnggtztjzjdjhjmmwrmmqhhcvvvltvllvmvpvlplwplpmllgpllczlzpzczwzswwqgqbqppcjjhjddgccfmmctcjcscczzzjzwzjjsccdmdppdrdccmttjpttqvqdqtdqtqhqchhhtbbddmhhwdhdwdjdccnhcnndpdldvldlvddbjdbjbppjbpbssqnqnmmmclcggrmmdnnwmwddvjvdvrvzzglzlnnllhqqrbbcvvdtttdvvnfnqqstszsjsrscspszppfjjfttgqttdpdbbbvnndbdcdqdrdhhdhhdjjjzzhqqrcrvccrvrtvtnvnpppccpdpccjgjmjzzbsbgsbstsbbtdttrqtrrsrdrdcdjcddbcbjcbjbwbbslbbbbnmmtsmmrwrnwwqtqzqpprhrzhrhhldddrpdrpdpwdpwdpwwlmmzssbwswppldlmddphhnfhhczhhqrrdgdjjdttztftzffdvddqnqvvlbbncnffssbnbfnnzbnznhzhdzzrqzzptzppsnsnzntzzfwfzzvrzrbzrbzrbzrrqqltqlqppbwppmvpmvpmmbnnbhbmbdmbbhmmngmgmhgmghhvttzzfvfggrrchrrbffzjzlzsllbqqhqrrmqrrlzzsqzqqmhhmnmtntstnsnhsnnwwpdphhgjhjccbcqcjcbjbttmssqffjzjmzmqqrbbfnffcbfcfzfrzztftntbntttlddvwdvdcdhcdhdbbjfjzjwpbcvlqvcwjrcjssdfmgwrhrjvhpgqsbtzqqdwjrqsjplqjdzdcrtvqlcrfpcgwpjnbpcmbwnwbzhcvjvzzpvqnzdqdgpfrvdpfdmpprmzmghdfjjzfqjqcbplwntzmsrpqclgrqzhlsgwffqqntswnjsmrcpjlsvdrmcwdgqzsbsbvhbszqgwqffcgbqmjrfjdvbpwbrzwbjgvvjchwfscrhrtzbghjlcnsqqhdgqtdcqrrpsbzqvjwptblszrtffhwcvbngnsdjgpscfzwrncwlpfqgwdzffsqmjcbrlffftpvhjchmgmgqvjnpfsjnfzddqjsfqcpjgfrfgrtlmtfqphjfmdcvmghrdqvbbbhlstgpcgmqnwpdjwbrdbntbpncnztmnmzmsjzrwjmccqslngrvbjcjjgcvnvhsslfhwpwtjjcwgzqpdvqrlbttnnwdphztmwcdlvlqggrdprmzdfpbfhmsgqznzjhdqpmhfphqcvbfqmhnfpcvstrhdbtmljnnhqtfnpdwnszfrflsbbqjsvbvggzfhlcljwlrlfnlwlzzllzbqftlwzqsvwlldslnfnnbhlwmhqhrjlqzpdsjlhjncpwtnpnqvjtzzjnmdntmbjbcwphplbcwdfcqbhhnjnjsfplgwbrqpqmghnzvdprtlmgvwhdgpdwfvdtqtnqdvbntmsrhftwvrgwcbvhnwmhfggdzfgbdfqsbngmvjgssclqlhqggwndzzhcrzrmnzggnvbbbpzfdjtnlvlnprjtlljhtdqjlddmjdswjrwhwdbbbrmpwsgpfgnplbtzfzlvgnfrvvnbjtsglbzmtmcjbbjclmjgtdrrbpbbqzqnvrgqssfrwhrtpsbgsvnnfbmqgbvhshmpqtqljlpwptqzprdbgnzmlgtrvgnmmfhtccsvbmsfnlnzwhrmcnwmmhgwclghgmspwjvbgqrbbhhrglstdntwnvcgdcmwgbwrwhsqzsdnqsvmcbzrvtztspshrfmqbtrdtnsqdllqzdcbmvbdswzrrzchqgpgmhvjgwgnpqfwcmchsnqssnnslzwtwvbqjfbhlbdjzjrqjvsshcvcbwhsvvwtmjwjfgszmvfzclbqjhnczqcznprwzjnlgmdgbfjnrqfgvstcldnttbjmhsqgqlmzqtsqngvmdvrwcjtfljzdmnndnrbqnlqtmsqngflwsghzzsfcdnttpblqqhmtgnqmcdfmclsvgnsfpnnfssqzjtdsjbjnnmqhfctlddtwrqlpczlzvhddrtjfwgqhfcvchzqgfhdbfpbvtqcjvchqmwhvwjrbtcjgbfqjdsbfpgjrzvlgqwphshnqrvqsppgsnfswvrzpwmdfmmwntnsddzppffjvbnshhqgwclvtpjzvlbdzblhhmhrmjrpmltglsdffnstsdqwjhnjccqhbdrgnwmpwczflfvsbznpphgpbfzffbcdnbrqbwddlhvgqsdmdhmlzbdztrrswsbvdgptvhhcdtwzqqhzqpswwvftppwvwhrspfqwppjbdlhcchlftjhrpwhtvqhmwwtcbfhgbqzvzdlwlzwcsqgvmmsnhrfmwwpcrjlsgzmgdqstlwbzrzbqfnpqffmjqbqqzcnsqrfstnwjflwlpfgcjwjdvtjslrcpgwsvrbvjtzqvnjlqrvvwjhzbzqqjhcrbdtwqjbtmwfrmcgnbdcrhrvlcgrgtglpfmvpgwbzccddlrbsjzwbgwthhdmjjtpchtsbnnpgqfcpmsrgvqwhcdqzmtzlzbfdgmvtqzzdcrnhtlcwnmhdjtwdsrfnlmwpnfwdrptclvwrnwrnntwwqvfmjgswbtqcvmbfbgstvsntndzhjjnjfblqdqrgchchtgdwtvlqzrlpsqgbltjzjngdscdczwzhnlszpdnvnbrmfmjpdzvjfgvtwtpwdjjfgspbvtdjrwzncdpbsthgcwvvdbbvpvqdqpzjmlzhtjmjwmzsmrcstrsvbccqhppwrtmslggqbgglgrgffrbwzmbghfqclwwgssgghqjgfjgvwjhhwnntnrnhmfslqpmwzlggsbmrjjgfzfpjlvmshfsdjtshdlfzvjtlqwjbbgmnjhrhtpbgvcsjvwzlqvfchhpfwsbhcztmdgfzgsmszwfbvvgmgpqsrbzvtpmpqdvhgrjmmspnswjrjnjqfgjwsfbzhwhtlfwjfdhgsvcwqlbznqlnhsmzwltfwclcwgjdbhqvjbbchmcpptmpdqzwpfwrbmchpbqndtmdrwtcvlmrrnvhnpzwqcwwgmcblzvnzbzsspwchtqvjmphqtzgwdzqlbvgdjbssdjwljhlsjwzrdvqtrzcdwszqgfdwgnqdrmssqqhtblqzdhtqtqmlbbfhzvlbrphcjhzpvvshjffnsjcbgvngnsjmfdbgfzphjc

9
2022/6/part1.ts Normal file
View file

@ -0,0 +1,9 @@
const input: string = Deno.readTextFileSync("input");
for(let i = 4; i < input.length; i++) {
let last = input.slice(i - 4, i);
if(last.split("").find((c, i, a) => a.indexOf(c) !== i)) continue;
console.log(last, i);
break;
}

9
2022/6/part2.ts Normal file
View file

@ -0,0 +1,9 @@
const input: string = Deno.readTextFileSync("input");
for(let i = 14; i < input.length; i++) {
let last = input.slice(i - 14, i);
if(last.split("").find((c, i, a) => a.indexOf(c) !== i)) continue;
console.log(last, i);
break;
}

1
2022/6/testinput Normal file
View file

@ -0,0 +1 @@
bvwbjplbgvbhsrlpgdmjqwftvncz

1045
2022/7/input Normal file

File diff suppressed because it is too large Load diff

69
2022/7/part1.ts Normal file
View file

@ -0,0 +1,69 @@
const input = Deno.readTextFileSync("./input");
class File {
constructor(public name: string, public size: number) {}
}
class Directory {
constructor(public name: string, public parent: Directory | null, public files: File[], public folders: Directory[]) {}
getSize(): number {
return this.files.reduce((acc, file) => acc + file.size, 0) + this.folders.reduce((acc, folder) => acc + folder.getSize(), 0);
}
print(level = 0) {
console.log(" ".repeat(level * 2) + this.name + " (" + this.getSize() + ")");
for(const file of this.files) {
console.log(" ".repeat((level + 1) * 2) + file.name + " (" + file.size + ")");
}
for(const folder of this.folders) {
folder.print(level + 1);
}
}
}
let root: Directory = new Directory("", null, [], []);
let current = root;
for(const line of input.split("\n")) {
if(line[0] === "$") {
if(line[2] === "c") {
let name = line.slice(5);
if(name === "/") current = root;
else if(name === "..") current = current.parent!;
else {
let folder = current.folders.find(folder => folder.name === name);
if(!folder) {
folder = new Directory(name, current, [], []);
current.folders.push(folder);
}
current = folder;
}
}
} else {
let [size, name] = line.split(" ");
if(size === "dir") {
const folder = new Directory(name, current, [], []);
current.folders.push(folder);
} else {
current.files.push(new File(name, parseInt(size)));
}
}
}
root.print();
var acc = 0;
function traverse(directory: Directory) {
let size = directory.getSize();
if(size < 100000) {
acc += size;
}
for(const folder of directory.folders) {
traverse(folder);
}
}
traverse(root);

74
2022/7/part2.ts Normal file
View file

@ -0,0 +1,74 @@
const input = Deno.readTextFileSync("./input");
class File {
constructor(public name: string, public size: number) {}
}
class Directory {
constructor(public name: string, public parent: Directory | null, public files: File[], public folders: Directory[]) {}
getSize(): number {
return this.files.reduce((acc, file) => acc + file.size, 0) + this.folders.reduce((acc, folder) => acc + folder.getSize(), 0);
}
print(level = 0) {
console.log(" ".repeat(level * 2) + this.name + " (" + this.getSize() + ")");
for(const file of this.files) {
console.log(" ".repeat((level + 1) * 2) + file.name + " (" + file.size + ")");
}
for(const folder of this.folders) {
folder.print(level + 1);
}
}
}
let root: Directory = new Directory("", null, [], []);
let current = root;
for(const line of input.split("\n")) {
if(line[0] === "$") {
if(line[2] === "c") {
let name = line.slice(5);
if(name === "/") current = root;
else if(name === "..") current = current.parent!;
else {
let folder = current.folders.find(folder => folder.name === name);
if(!folder) {
folder = new Directory(name, current, [], []);
current.folders.push(folder);
}
current = folder;
}
}
} else {
let [size, name] = line.split(" ");
if(size === "dir") {
const folder = new Directory(name, current, [], []);
current.folders.push(folder);
} else {
current.files.push(new File(name, parseInt(size)));
}
}
}
root.print();
const MAX = 70000000;
const unused = MAX - root.getSize();
const minimum = 30000000 - unused;
let smallest: number | null = null;
function traverse(directory: Directory) {
let size = directory.getSize();
if(size > minimum && (smallest === null || size < smallest)) {
smallest = size;
}
for(const folder of directory.folders) {
traverse(folder);
}
}
traverse(root);
console.log(smallest);

8
2022/7/rust/.idea/.gitignore vendored Normal file
View file

@ -0,0 +1,8 @@
# Default ignored files
/shelf/
/workspace.xml
# Editor-based HTTP Client requests
/httpRequests/
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MarkdownSettingsMigration">
<option name="stateVersion" value="1" />
</component>
</project>

View file

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/.idea/rust.iml" filepath="$PROJECT_DIR$/.idea/rust.iml" />
</modules>
</component>
</project>

View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="CPP_MODULE" version="4">
<component name="NewModuleRootManager">
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src" isTestSource="false" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

View file

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="$PROJECT_DIR$/../../../.." vcs="Git" />
</component>
</project>

7
2022/7/rust/Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "rust"
version = "0.1.0"

8
2022/7/rust/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "rust"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

1045
2022/7/rust/input Normal file

File diff suppressed because it is too large Load diff

107
2022/7/rust/src/main.rs Normal file
View file

@ -0,0 +1,107 @@
use std::borrow::Borrow;
use std::cell::RefCell;
use std::fs::File;
use std::io::{BufRead, BufReader};
use std::rc::Rc;
#[derive(Debug)]
enum VNode {
File(Rc<VFile>),
Directory(Rc<VDirectory>)
}
#[derive(Debug)]
struct VFile {
name: String,
size: usize
}
#[derive(Debug)]
struct VDirectory {
items: RefCell<Vec<VNode>>,
name: String
}
impl VNode {
fn get_size(&self) -> usize {
match self {
VNode::Directory(dir)=> {
dir.items.borrow().iter().map(|item| item.get_size()).sum()
},
VNode::File(file) => file.size
}
}
}
fn main() {
// read testinput line by line
let input_file = File::open("input").unwrap();
let mut root = Rc::new(VDirectory {
items: RefCell::new(Vec::new()),
name: String::from("")
});
let mut path = vec![root.clone()];
for line in BufReader::new(input_file).lines() {
let line = line.unwrap();
if line.starts_with("$") {
if line.starts_with("$ cd") {
let name = line[5..].to_string();
if name == "/" {
path = vec![root.clone()];
continue;
}
if name == ".." {
path.pop();
continue;
}
let directory = VDirectory {
items: RefCell::new(Vec::new()),
name
};
let node = VNode::Directory(Rc::from(directory));
path.last_mut().unwrap().items.borrow_mut().push(node);
let directory = match path.last_mut().unwrap().items.borrow_mut().last_mut().unwrap() {
VNode::File(_) => panic!("This should never happen"),
VNode::Directory(dir) => dir.clone()
};
path.push(directory);
}
} else {
let size_string = line[0..line.find(" ").unwrap()].to_string();
if size_string == "dir" {
continue;
}
let size = size_string.parse::<usize>().unwrap();
let name = line[line.find(" ").unwrap() + 1..].to_string();
let file = VFile {
name,
size
};
let node = VNode::File(Rc::from(file));
path.last_mut().unwrap().items.borrow_mut().push(node);
}
}
dbg!(&root);
let root_node = VNode::Directory(root);
dbg!(root_node.get_size());
dbg!(get_size_if_smaller(&root_node));
}
fn get_size_if_smaller(node: &VNode) -> usize {
let node_size = node.get_size();
match node {
VNode::Directory(dir) => {
let others = dir.items.borrow().iter().map(|item| get_size_if_smaller(item)).sum();
println!("{} {} {} ", dir.name, node_size, others);
if node_size < 100000 {
node_size + others
} else {
others
}
},
VNode::File(file) => 0
}
}

23
2022/7/rust/testinput Normal file
View file

@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

23
2022/7/testinput Normal file
View file

@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

99
2022/8/input Normal file
View file

@ -0,0 +1,99 @@
201020000020303322022230330032044230113031313453252125532013420102412124020323433212213002201211011
221122211131113232104233242130410414321444153244521454234151454403433303343014014211200020130201021
102112213233022132323042313331110325141414514433444245122521543551413102221240240323013132010021012
212122031103022003403234000212443324321434314422155233242453534233211343234422013224013220221331221
120021002213013004322300004342351223253453131112554355354434514543424530141014330412112220012030100
110030220312301221303240114023511313251235452554153313533532225523321252124201204244311022232032121
121312201031322130110230412421442225245334123131515145212234133433233415522311231022134311321000221
020100230031324430434024341335115412553414512562656363444145352221421522445422002030434102031122130
220000230104403311312243233214515515435446342656324242626366645135422532125214432110131210310103230
003003023131341211210331221223524241336226535362556324264636464225534143523153343232320341113023131
112223200042240014101242254443335526426222663425434645266646256425232421555443522443343343040222212
231012311120242400241444133551534245553543635524435534563436246556633523214513454134202402412222032
220330240202202404535344311352665323254453226554432365224562355554363363151333234523041303220413221
121002021430011334451344213364255233644624234666262534356622453454246624421544511143144103011020033
202020322113024543532552542653345533456452562654645534656235562433434436334415143435524332020024003
310110320114244152352314562242344252626553665353436643466362666566456525655324341215522140012022100
110221133144051254241134634243634566337575354377753676574754763556336655255552215423315301120131010
023103330131235322233516355555532625334656646336557633446767674554556336223544425443251340040433200
132432123105353411452624322225325575374337563365746736564554336544355525366432631211232245344411413
033132343444521244516544436535523466654537667544744476663746573636745636442363332524245254113330422
240212240325552121365552256263733535565735746335463466567544543567734476366523225543133253533443332
014040044113115313255646226444543555553356676643554577634743436547456666263336536224543412443204140
400012201233335543436555243267766533635344636448755547767763564464353465424466233534541535134330223
310321424323512214423252666345734663434464454477755755574766576757375645452364256455231125523143113
120341315235134355553326253673657737467854647875554685867768888363564466744522656643243411411202421
211424435534222552464542277754654673778574565664685656668785788674337456733762422665562115243331420
041224121545426324343433735556775558747778655475548446546444644855836447336533256244246131551211221
323022135312246564666246753547457576485774746455864785476454854456677544744755446355253333324224223
422404312454164254356374377556777545446888854765488865674655784555588374336774323453664635521512403
320111121333525633233467447363474754757666544975878856568786557468785844346456746244362554214155023
432133454253265442345345367564745678767664779676785676798694645576758675675747735332642463312112442
303044543315533422426665357566548776856698687968965877966777576476455648334774674336234564143523313
141124135323365336635663746548446444577695886575586577666799555466665865475376647553423643512423530
214355155153534342435373445867856445699798866765787679777879657677674465463366466546466355423513541
003314452422264644754655647484847787556699986866665997688995697585544577454635535652562622625554232
315232221245242552336775778457657668657989955685775566796966866855746586478664734656234355514532113
114523555126323526455355657567578457756678568766677866966877997875946568856775756354534423351113425
323154212432364243635574378486488795588786589898766869768775675985574687587653464466455563533245312
315513155645632255373634478746559855698786877669779868866968696889595665758655537764544622435452211
155455415243234246537643657878448578656566766676798978896899986985897445746483446365556345462215431
132413352225424265436564845767665787788796666978899699878767689797576774668475563457633455426325145
035342443624642673756568758755467769877698897769966699866679798958679645876645565566733542646215143
252343432363525635777736884647665956669776899668776967669967686779669885785475437576333252562122345
411311213323642436666665454786686569677689978787778968768667697778676656447454536774434556532524442
325115355463345543664455455688586966988886788699779997996789877987877886457686473773546434644314535
433555536433446454546485748745986879998796687879987888976878898856799789848876646575536265334111424
545552165343435735755454777565959567986989967798977988887789877895885889675565554633442654643654425
534223446223323736633585867855878669869696967889999787899679788795669667766454554437732624542231312
115411526646527737747346785446589788969689987798978778889786868668995757566484657566775233634435121
344525324534526535464368486565899669977988997898987977887886966767756889676855867574773434232411251
212512245524437756563668454567599955986988888977789987788876798885976658848846474664543353623513415
551242242534355353554587765457785895879698687978789997977777789686767995845757837367743655563315111
333112226262653563744368577646597976867687789887788779798677766986556597758484573466337344546512342
121453322644444354654584784688689598898878667899999977787999989686675767768757754646344363534211134
415125366435452537577667458578656866778878878989887897798696876865789875444444476657445326253554534
531113124455566744773445888477797596776969696979979799976899787979559588468555864477433426232435435
444525352562435775533756588888599876778978668889988889987788876698578696586586766446442222434453551
011423454424543744555648557788899588786976898979897878676876899758695857847865556577643446232444355
113421412445663737435776446764868968996886799867787678867889686575587867867668433433575266324212535
145313224636652244437535645477787898657898779786667978667976987965688977844457744773662435264235354
322444552534333347547755588474678658788868996769867787869968657869969757854476677475346522364245435
155451413634255633367675574887588657599988966986786889869999699857556674786566436355453655255335313
011115224526426436457765544677789855685775669668769679776898685585875448877747355533463542265253313
421513353634556643545746565788448798995557797867679997976966568778684755844657453474324363644422132
424124123234232356335437365774776476777675995766896668885965685798754488687775575546465336614141113
224525232426666356376347735456687547888958866599959977868595685699855768855537645475325566411521441
010452514236325625664763535865858674855756888557776597995795768884668555854353653373442452223555110
233452123533246442646765653487474644476798588579559689875968697974478784843437774765534656111433334
334334531432222443267675376487857555675967869879855979697965677677654566636735646454225662144133140
001225254155444434645666766357784466776477977878858787696555844667676744356533335232323623531345103
302135311134435335527576674573867586767686688596997797787797478864775445673573367224525231252152212
021404135525242534545665443545765777746456888579777989695865687784648643756566573366254213344555213
044343323333323665255564365457338554886888546875566766477546647686484333337574565545432645234453401
231000311153344624642634556547376875677587555667576684856587746845654457543436343466453314145250040
200012424534143465246433675577347368864864757878448674875474676547545557443443256425556112543112221
224122332451313652563435455457334565685444887787864765466648855483744576536663554253355253222220142
043224025444321226454346556743664643465465845468785848846464877773545666355223262524421325243212321
011040433124534116256654345354363635553646677845786467868647636353444766632635336654314321515320323
331402111232145443263353466367765354433665344655866647668766566467474454662654334463114315541101210
141103243533333225463465245644376767537677653735747535776456356376475676223566524434314115221424420
122341124454254443564665254462753646774546734435734653654337646565366653525255342315353143231112131
330241244331352334326263342332334543656756577774736743347437637454636626622453322353151335342031410
101011141113311355121535244662346675667453474664477373444434537764332345353422642151445213331300321
202434003224355125334313254642523662545676534675755643446547547664446622455236424145114330232141343
223234300341032154514515266265623564465444376553447554737466375246532435533642331333435534213043030
311120432040113211154333223444563336266242444543434767633353325334535623424341534254112432413322201
201001024310404525411124234435523356244264563453345644646332455353525233353423222122553440131133000
230101031024214425345433251153455563362556546652446245554534555434622455613435314215221041142342212
002221213412420132124132321151523626344332445632454654365454525366352463343212512523014244333223200
100132021423121332553234241241144454442525436534326442642454344636254511213144453134023432124110122
010031101411142421225123351233451143554553325465225435565244533246241145141153143241213213041000302
023323303001214031042243121311443352365626544526226433435636553353223153445124413242211232310121003
010332220132301212403032412131445344225445255636665232224563245351225444153421101444022242211023131
200231322211423420140141514424354541422215543125636226333224413143525251333221024210333121131120023
110121032233102443112231002123151545531214331415224411123531145123422253222101330122000430133010030
011001132223211344301013433412413154113522251445542421555254214443451322303310300203231022121333310
021200232231012000201011020121322235235233535533352543221242332553452143101022000414323230132102112
002101113203023310140322141401244212541455241424152514451444325212444422133103022314330130021132222
100002203323321203402423434324400223225443334554221555514312335522000320202144212403130203231300110

40
2022/8/part1.ts Normal file
View file

@ -0,0 +1,40 @@
const input = Deno.readTextFileSync("./input");
const lines = input.split("\n").map(t => t.split("").map(t => parseInt(t)));
let hiddenCount = 0;
let visibleCount = 0;
let edge = 0;
let interior = 0;
for(let x = 0; x < lines.length; x++) {
for(let y = 0; y < lines[x].length; y++) {
const num = lines[x][y];
// get all numbers in row;
const rowBefore = lines[x].slice(0, y);
const rowAfter = lines[x].slice(y + 1);
const columnBefore = lines.map(t => t[y]).slice(0, x);
const columnAfter = lines.map(t => t[y]).slice(x + 1);
const isEdge = rowBefore.length == 0 || rowAfter.length == 0 || columnBefore.length == 0 || columnAfter.length == 0
if(isEdge || (rowBefore.every(t => t < num) || rowAfter.every(t => t < num) || columnAfter.every(t => t < num) || columnBefore.every(t => t < num))) {
visibleCount++;
if(isEdge) {
edge++;
} else {
console.log(num, rowBefore, rowAfter, columnBefore, columnAfter);
console.log("visible interior");
interior++;
}
} else {
console.log(num, rowBefore, rowAfter, columnBefore, columnAfter);
hiddenCount++;
console.log("hidden");
}
}
console.log("ROW", x);
}
console.log({ visibleCount, hiddenCount, edge, interior });

43
2022/8/part2.ts Normal file
View file

@ -0,0 +1,43 @@
const input = Deno.readTextFileSync("./input");
const lines = input.split("\n").map(t => t.split("").map(t => parseInt(t)));
let highestCount = 0;
function countLength(row: number[], num: number) {
let count = 0;
for(let i = 0; i < row.length; i++) {
count++;
if(row[i] >= num) {
break;
}
}
return count;
}
for(let x = 0; x < lines.length; x++) {
for(let y = 0; y < lines[x].length; y++) {
const num = lines[x][y];
// get all numbers in row;
const rowBefore = lines[x].slice(0, y).reverse();
const rowAfter = lines[x].slice(y + 1);
const columnBefore = lines.map(t => t[y]).slice(0, x).reverse();
const columnAfter = lines.map(t => t[y]).slice(x + 1);
const isEdge = rowBefore.length == 0 || rowAfter.length == 0 || columnBefore.length == 0 || columnAfter.length == 0;
if(isEdge) continue;
const rowBeforeCount = countLength(rowBefore, num);
const rowAfterCount = countLength(rowAfter, num);
const columnBeforeCount = countLength(columnBefore, num);
const columnAfterCount = countLength(columnAfter, num);
const count = rowBeforeCount * rowAfterCount * columnBeforeCount * columnAfterCount;
console.log(`[${x} ${y}]`, num.toString(), count, rowBeforeCount, rowAfterCount, columnBeforeCount, columnAfterCount);
if(count > highestCount) {
highestCount = count;
}
}
}
console.log(highestCount);

5
2022/8/testinput Normal file
View file

@ -0,0 +1,5 @@
30373
25512
65332
33549
35390

7
2022/README.md Normal file
View file

@ -0,0 +1,7 @@
# Advent of code
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!

7
2023/1/Cargo.lock generated Normal file
View file

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "first"
version = "0.1.0"

8
2023/1/Cargo.toml Normal file
View file

@ -0,0 +1,8 @@
[package]
name = "first"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

26
2023/1/README.md Normal file
View file

@ -0,0 +1,26 @@
# Day 1: Trebuchet?!
Something is wrong with global snow production, and you've been selected to take a look. The Elves have even given you a map; on it, they've used stars to mark the top fifty locations that are likely to be having problems.
You've been doing this long enough to know that to restore snow operations, you need to check all fifty stars by December 25th.
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!
You try to ask why they can't just use a weather machine ("not powerful enough") and where they're even sending you ("the sky") and why your map looks mostly blank ("you sure ask a lot of questions") and hang on did you just say the sky ("of course, where do you think snow comes from") when you realize that the Elves are already loading you into a trebuchet ("please hold still, we need to strap you in").
As they're making the final adjustments, they discover that their calibration document (your puzzle input) has been amended by a very young Elf who was apparently just excited to show off her art skills. Consequently, the Elves are having trouble reading the values on the document.
The newly-improved calibration document consists of lines of text; each line originally contained a specific calibration value that the Elves now need to recover. On each line, the calibration value can be found by combining the first digit and the last digit (in that order) to form a single two-digit number.
For example:
```txt
1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet
```
In this example, the calibration values of these four lines are 12, 38, 15, and 77. Adding these together produces 142.
Consider your entire calibration document. What is the sum of all of the calibration values?

4
2023/1/input1 Normal file
View file

@ -0,0 +1,4 @@
1abc2
pqr3stu8vwx
a1b2c3d4e5f
treb7uchet

1000
2023/1/input2 Normal file

File diff suppressed because it is too large Load diff

7
2023/1/input3 Normal file
View file

@ -0,0 +1,7 @@
two1nine
eightwothree
abcone2threexyz
xtwone3four
4nineeightseven2
zoneight234
7pqrstsixteen

4
2023/1/part1.py Normal file
View file

@ -0,0 +1,4 @@
import re
numbers = [(int(re.match(r".*?(\d)", x)[1]) * 10 + int(re.match(r"(?:.*)(\d)", x)[1])) for x in open("input3", "r") if re.match(r".*?\d+", x) is not None]
print(sum(numbers))
print(numbers)

6
2023/1/part2.py Normal file
View file

@ -0,0 +1,6 @@
import re
wordNumbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"]
parse = lambda x: int(x) if x.isdigit() else wordNumbers.index(x)
numbers = [(parse(re.match(r".*?(\d|one|two|three|four|five|six|seven|eight|nine)", x)[1]) * 10 + parse(re.match(r"(?:.*)(\d|one|two|three|four|five|six|seven|eight|nine)", x)[1])) for x in open("input2", "r") if re.match(r".*?(\d|one|two|three|four|five|six|seven|eight|nine)", x) is not None]
print(numbers)
print(sum(numbers))

73
2023/1/src/main.rs Normal file
View file

@ -0,0 +1,73 @@
use std::{io::{BufReader, BufRead}, fs::File, ops::Index};
fn part1(file: &str) -> i32 {
let file = BufReader::new(File::open(file).unwrap());
let solution = file.lines()
.map(|l| l.unwrap())
.map(|l| (l.match_indices(char::is_numeric).next().unwrap().0, l.match_indices(char::is_numeric).last().unwrap().0, l))
.map(|(start,end,l)| (l[start..start+1].to_string() + &l[end..end+1]))
.map(|l| l.parse::<i32>().unwrap())
.fold(0, |acc, x| acc + x);
solution
}
fn part2(file: &str) -> i32 {
let file = BufReader::new(File::open(file).unwrap());
let inumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
let numbers = ["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"];
let find_number = |s: &str| {
if let Some(num) = inumbers.iter().position(|n| s.starts_with(n)) { Some(num) }
else if let Some(num) = numbers.iter().position(|n| s.starts_with(n)) { Some(num) }
else { None }
};
let solution = file.lines()
.map(|l| l.unwrap() + " ")
.map(|l| {
(l
.chars()
.collect::<Vec<char>>()
.windows(5)
.map(|w| w.iter().collect::<String>())
.map(|w| find_number(&w))
.filter(|w| w.is_some())
.map(|w| w.unwrap())
.collect::<Vec<usize>>(), l)
})
.map(|(nums, _)| nums.first().unwrap() * 10 + nums.last().unwrap())
.fold(0, |acc, x| acc + x) as i32;
solution
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn part1_input1() {
assert_eq!(part1("input1"), 142)
}
#[test]
fn part1_input2() {
assert_eq!(part1("input2"), 54597)
}
#[test]
fn part2_input1() {
assert_eq!(part2("input1"), 142)
}
#[test]
fn part2_input2() {
assert_eq!(part2("input2"), 54504)
}
#[test]
fn part2_input3() {
assert_eq!(part2("input3"), 281)
}
}
fn main() {
todo!();
}

View file

@ -0,0 +1 @@
{"rustc_fingerprint":18191212223194315998,"outputs":{"7808843031524471736":{"success":true,"status":"","code":0,"stdout":"___\nlib___.rlib\nlib___.so\nlib___.so\nlib___.a\nlib___.so\n/home/dan/.rustup/toolchains/stable-x86_64-unknown-linux-gnu\noff\npacked\nunpacked\n___\ndebug_assertions\npanic=\"unwind\"\nproc_macro\ntarget_arch=\"x86_64\"\ntarget_endian=\"little\"\ntarget_env=\"gnu\"\ntarget_family=\"unix\"\ntarget_feature=\"fxsr\"\ntarget_feature=\"sse\"\ntarget_feature=\"sse2\"\ntarget_has_atomic=\"16\"\ntarget_has_atomic=\"32\"\ntarget_has_atomic=\"64\"\ntarget_has_atomic=\"8\"\ntarget_has_atomic=\"ptr\"\ntarget_os=\"linux\"\ntarget_pointer_width=\"64\"\ntarget_vendor=\"unknown\"\nunix\n","stderr":""},"4614504638168534921":{"success":true,"status":"","code":0,"stdout":"rustc 1.73.0 (cc66ad468 2023-10-03)\nbinary: rustc\ncommit-hash: cc66ad468955717ab92600c770da8c1601a4ff33\ncommit-date: 2023-10-03\nhost: x86_64-unknown-linux-gnu\nrelease: 1.73.0\nLLVM version: 17.0.2\n","stderr":""}},"successes":{}}

View file

@ -0,0 +1,3 @@
Signature: 8a477f597d28d172789f06886806bc55
# This file is a cache directory tag created by cargo.
# For information about cache directory tags see https://bford.info/cachedir/

View file

View file

@ -0,0 +1 @@
14edcefe747430a1

View file

@ -0,0 +1 @@
{"rustc":16895609601713598366,"features":"[]","target":7422450677920272884,"profile":11039742474438789458,"path":1684066648322511884,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/first-1b5225e4dcac8745/dep-bin-first"}}],"rustflags":["-C","link-arg=-fuse-ld=/usr/bin/mold"],"metadata":7797948686568424061,"config":16520146531172537597,"compile_kind":0}

View file

@ -0,0 +1 @@
This file has an mtime of when this was started.

View file

@ -0,0 +1,2 @@
{"message":"unused import: `ops::Index`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":46,"byte_end":56,"line_start":1,"line_end":1,"column_start":47,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":47,"highlight_end":57}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/main.rs","byte_start":44,"byte_end":56,"line_start":1,"line_end":1,"column_start":45,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":45,"highlight_end":57}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `ops::Index`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:1:47\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m1\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::{io::{BufReader, BufRead}, fs::File, ops::Index};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
{"message":"1 warning emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 1 warning emitted\u001b[0m\n\n"}

View file

@ -0,0 +1 @@
This file has an mtime of when this was started.

View file

@ -0,0 +1,2 @@
{"message":"unused import: `ops::Index`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":46,"byte_end":56,"line_start":1,"line_end":1,"column_start":47,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":47,"highlight_end":57}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/main.rs","byte_start":44,"byte_end":56,"line_start":1,"line_end":1,"column_start":45,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":45,"highlight_end":57}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `ops::Index`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:1:47\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m1\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::{io::{BufReader, BufRead}, fs::File, ops::Index};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
{"message":"1 warning emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 1 warning emitted\u001b[0m\n\n"}

View file

@ -0,0 +1 @@
9a46df3128b66bb9

View file

@ -0,0 +1 @@
{"rustc":16895609601713598366,"features":"[]","target":7422450677920272884,"profile":18326522262828315194,"path":1684066648322511884,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/first-5644decaa7aef8c9/dep-test-bin-first"}}],"rustflags":["-C","link-arg=-fuse-ld=/usr/bin/mold"],"metadata":7797948686568424061,"config":16520146531172537597,"compile_kind":0}

View file

@ -0,0 +1 @@
a58f118c46650732

View file

@ -0,0 +1 @@
{"rustc":16895609601713598366,"features":"[]","target":7422450677920272884,"profile":13126374248311259211,"path":1684066648322511884,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/first-c1729aca58c1b71a/dep-bin-first"}}],"rustflags":["-C","link-arg=-fuse-ld=/usr/bin/mold"],"metadata":7797948686568424061,"config":16520146531172537597,"compile_kind":0}

View file

@ -0,0 +1 @@
This file has an mtime of when this was started.

View file

@ -0,0 +1,4 @@
{"message":"unused import: `ops::Index`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":46,"byte_end":56,"line_start":1,"line_end":1,"column_start":47,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":47,"highlight_end":57}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/main.rs","byte_start":44,"byte_end":56,"line_start":1,"line_end":1,"column_start":45,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":45,"highlight_end":57}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `ops::Index`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:1:47\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m1\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::{io::{BufReader, BufRead}, fs::File, ops::Index};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
{"message":"function `part1` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":63,"byte_end":68,"line_start":3,"line_end":3,"column_start":4,"column_end":9,"is_primary":true,"text":[{"text":"fn part1(file: &str) -> i32 {","highlight_start":4,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(dead_code)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: function `part1` is never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:3:4\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m3\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mfn part1(file: &str) -> i32 {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(dead_code)]` on by default\u001b[0m\n\n"}
{"message":"function `part2` is never used","code":{"code":"dead_code","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":515,"byte_end":520,"line_start":14,"line_end":14,"column_start":4,"column_end":9,"is_primary":true,"text":[{"text":"fn part2(file: &str) -> i32 {","highlight_start":4,"highlight_end":9}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: function `part2` is never used\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:14:4\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m14\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0mfn part2(file: &str) -> i32 {\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^\u001b[0m\n\n"}
{"message":"3 warnings emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 3 warnings emitted\u001b[0m\n\n"}

View file

@ -0,0 +1 @@
This file has an mtime of when this was started.

View file

@ -0,0 +1,2 @@
{"message":"unused import: `ops::Index`","code":{"code":"unused_imports","explanation":null},"level":"warning","spans":[{"file_name":"src/main.rs","byte_start":46,"byte_end":56,"line_start":1,"line_end":1,"column_start":47,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":47,"highlight_end":57}],"label":null,"suggested_replacement":null,"suggestion_applicability":null,"expansion":null}],"children":[{"message":"`#[warn(unused_imports)]` on by default","code":null,"level":"note","spans":[],"children":[],"rendered":null},{"message":"remove the unused import","code":null,"level":"help","spans":[{"file_name":"src/main.rs","byte_start":44,"byte_end":56,"line_start":1,"line_end":1,"column_start":45,"column_end":57,"is_primary":true,"text":[{"text":"use std::{io::{BufReader, BufRead}, fs::File, ops::Index};","highlight_start":45,"highlight_end":57}],"label":null,"suggested_replacement":"","suggestion_applicability":"MachineApplicable","expansion":null}],"children":[],"rendered":null}],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: unused import: `ops::Index`\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m--> \u001b[0m\u001b[0msrc/main.rs:1:47\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m\u001b[1m\u001b[38;5;12m1\u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\u001b[0m \u001b[0m\u001b[0muse std::{io::{BufReader, BufRead}, fs::File, ops::Index};\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m| \u001b[0m\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[33m^^^^^^^^^^\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m|\u001b[0m\n\u001b[0m \u001b[0m\u001b[0m\u001b[1m\u001b[38;5;12m= \u001b[0m\u001b[0m\u001b[1mnote\u001b[0m\u001b[0m: `#[warn(unused_imports)]` on by default\u001b[0m\n\n"}
{"message":"1 warning emitted","code":null,"level":"warning","spans":[],"children":[],"rendered":"\u001b[0m\u001b[1m\u001b[33mwarning\u001b[0m\u001b[0m\u001b[1m: 1 warning emitted\u001b[0m\n\n"}

View file

@ -0,0 +1 @@
43fe113ee1ab0dd3

View file

@ -0,0 +1 @@
{"rustc":16895609601713598366,"features":"[]","target":7422450677920272884,"profile":16741232958890476625,"path":1684066648322511884,"deps":[],"local":[{"CheckDepInfo":{"dep_info":"debug/.fingerprint/first-e53bd6844cb209ab/dep-test-bin-first"}}],"rustflags":["-C","link-arg=-fuse-ld=/usr/bin/mold"],"metadata":7797948686568424061,"config":16520146531172537597,"compile_kind":0}

Binary file not shown.

View file

@ -0,0 +1,5 @@
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-1b5225e4dcac8745: src/main.rs
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-1b5225e4dcac8745.d: src/main.rs
src/main.rs:

View file

@ -0,0 +1,5 @@
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-5644decaa7aef8c9.rmeta: src/main.rs
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-5644decaa7aef8c9.d: src/main.rs
src/main.rs:

View file

@ -0,0 +1 @@
Map<Map<Map<std::io::Lines<BufReader<File>>, [closure@src/main.rs:25:14: 25:17]>, [closure@src/main.rs:26:14: 26:17]>, [closure@src/main.rs:37:14: 37:25]>

View file

@ -0,0 +1,5 @@
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-c1729aca58c1b71a.rmeta: src/main.rs
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-c1729aca58c1b71a.d: src/main.rs
src/main.rs:

View file

@ -0,0 +1 @@
Map<Map<Map<std::io::Lines<BufReader<File>>, [closure@src/main.rs:25:14: 25:17]>, [closure@src/main.rs:26:14: 26:17]>, [closure@src/main.rs:37:14: 37:25]>

Binary file not shown.

View file

@ -0,0 +1,5 @@
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-e53bd6844cb209ab: src/main.rs
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/deps/first-e53bd6844cb209ab.d: src/main.rs
src/main.rs:

BIN
2023/1/target/debug/first Executable file

Binary file not shown.

View file

@ -0,0 +1 @@
/home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/target/debug/first: /home/dan/projects/node/cybersec/challenges/adventOfCode2023/1/src/main.rs

Some files were not shown because too many files have changed in this diff Show more