refactor for yearly
This commit is contained in:
parent
da00eb3606
commit
dddda24957
57 changed files with 3 additions and 0 deletions
2
2023/.gitignore
vendored
Normal file
2
2023/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
/target
|
||||
.env.local
|
4
2023/.mise.toml
Executable file
4
2023/.mise.toml
Executable file
|
@ -0,0 +1,4 @@
|
|||
env_file = ".env.local"
|
||||
|
||||
[env]
|
||||
# AOC_SESSION = "set in .env.local"
|
4
2023/.rtx.toml
Normal file
4
2023/.rtx.toml
Normal file
|
@ -0,0 +1,4 @@
|
|||
env_file = ".env.local"
|
||||
|
||||
[env]
|
||||
# AOC_SESSION = "set in .env.local"
|
2600
2023/Cargo.lock
generated
Normal file
2600
2023/Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
39
2023/Cargo.toml
Normal file
39
2023/Cargo.toml
Normal file
|
@ -0,0 +1,39 @@
|
|||
[package]
|
||||
name = "aoc23"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||
|
||||
[dependencies]
|
||||
async-recursion = "1.0.5"
|
||||
expanduser = "1.2.2"
|
||||
futures = "0.3"
|
||||
regex = "1.9"
|
||||
reqwest = { version = "0.11", features = [
|
||||
"json",
|
||||
"gzip",
|
||||
"brotli",
|
||||
"deflate",
|
||||
"stream",
|
||||
"cookies",
|
||||
] }
|
||||
reqwest-middleware = "0.2"
|
||||
reqwest-retry = "0.3"
|
||||
serde = { version = "1", features = ["derive"] }
|
||||
serde_json = "1"
|
||||
tiktoken-rs = "0.5"
|
||||
tokio = { version = "1", features = ["full"] }
|
||||
itertools = "0.12"
|
||||
derive_builder = "0.12.0"
|
||||
rayon = "1.8.0"
|
||||
static_init = "1.0.3"
|
||||
grid = { version = "0.12.0", features = ["std", "serde"] }
|
||||
indicatif = "0.17.7"
|
||||
pathfinding = "4.6.0"
|
||||
geo = { version = "0.27.0", features = ["serde"] }
|
||||
|
||||
[features]
|
||||
part1 = []
|
||||
part2 = []
|
||||
default = ["part1"]
|
1000
2023/aoc_puzzle_cache/day_01
Normal file
1000
2023/aoc_puzzle_cache/day_01
Normal file
File diff suppressed because it is too large
Load diff
100
2023/aoc_puzzle_cache/day_02
Normal file
100
2023/aoc_puzzle_cache/day_02
Normal file
|
@ -0,0 +1,100 @@
|
|||
Game 1: 7 green, 4 blue, 3 red; 4 blue, 10 red, 1 green; 1 blue, 9 red
|
||||
Game 2: 2 red, 4 blue, 3 green; 5 green, 3 red, 1 blue; 3 green, 5 blue, 3 red
|
||||
Game 3: 12 red, 1 blue; 6 red, 2 green, 3 blue; 2 blue, 5 red, 3 green
|
||||
Game 4: 3 green, 1 red, 3 blue; 1 red; 2 green, 1 red, 1 blue; 3 green, 1 blue; 2 blue; 2 green, 4 blue
|
||||
Game 5: 3 blue, 3 red, 8 green; 5 blue, 1 red; 1 green, 19 blue, 3 red; 1 red, 5 green, 3 blue; 4 green, 20 blue, 4 red; 20 blue, 4 green
|
||||
Game 6: 7 green, 6 blue, 1 red; 3 blue, 5 green, 3 red; 9 blue, 3 red, 6 green; 8 blue, 11 green, 3 red; 2 blue, 1 red; 7 green, 4 blue, 1 red
|
||||
Game 7: 5 green, 1 blue; 2 green, 2 blue; 1 blue, 1 red; 5 blue, 2 green; 3 green
|
||||
Game 8: 5 blue, 5 red, 10 green; 6 green, 1 blue, 1 red; 5 red, 2 blue, 16 green; 2 blue, 14 green, 9 red; 9 red, 3 green, 7 blue; 8 red, 4 blue, 10 green
|
||||
Game 9: 1 red, 1 blue, 7 green; 4 red, 6 green, 2 blue; 6 green, 14 blue, 3 red
|
||||
Game 10: 1 red, 16 green, 3 blue; 1 red, 3 blue; 6 green; 4 green, 2 blue, 1 red
|
||||
Game 11: 5 red, 2 blue; 14 blue, 8 red, 10 green; 8 green, 1 red, 15 blue; 2 green, 5 red, 11 blue; 8 red, 11 blue, 4 green
|
||||
Game 12: 5 green, 8 blue, 4 red; 15 green, 8 blue, 8 red; 13 red, 1 blue; 6 blue, 7 green, 14 red; 9 red
|
||||
Game 13: 7 blue, 5 red; 3 green, 10 blue; 5 blue, 2 green, 5 red; 3 blue, 1 green, 5 red; 6 blue, 4 red, 6 green; 5 red, 2 green, 6 blue
|
||||
Game 14: 5 red, 1 blue, 5 green; 6 blue, 13 green, 4 red; 7 blue, 4 red, 1 green; 6 blue, 5 red; 2 red, 7 blue, 2 green
|
||||
Game 15: 8 red, 16 green; 10 green, 1 blue; 16 green, 7 blue, 3 red; 13 red, 7 blue, 8 green; 4 red, 2 green, 8 blue
|
||||
Game 16: 1 red, 1 blue, 5 green; 5 green, 2 red; 2 green, 1 red; 3 red, 4 green
|
||||
Game 17: 3 green, 7 blue, 5 red; 2 red, 1 blue; 8 blue, 1 red
|
||||
Game 18: 9 green, 6 blue, 3 red; 3 red, 15 green, 5 blue; 7 green, 3 red, 3 blue
|
||||
Game 19: 4 green, 3 red, 7 blue; 4 blue, 6 red, 4 green; 6 red, 5 green, 1 blue; 6 blue, 4 green, 3 red; 5 green, 5 red, 2 blue
|
||||
Game 20: 3 green, 5 blue, 1 red; 1 red, 1 blue; 1 red, 6 blue; 1 green, 4 blue
|
||||
Game 21: 2 green, 1 blue, 3 red; 16 green, 1 blue, 4 red; 11 green, 2 red, 1 blue; 6 green, 1 blue; 10 green, 1 red, 1 blue
|
||||
Game 22: 1 blue, 2 green, 4 red; 3 red, 4 green; 1 blue, 3 red, 10 green; 7 green, 1 blue
|
||||
Game 23: 2 red, 14 blue; 2 red, 14 blue; 1 red, 14 blue, 1 green; 1 red, 6 blue; 13 blue, 1 green
|
||||
Game 24: 3 green, 7 blue, 3 red; 4 green, 2 blue; 12 blue, 8 red, 4 green; 10 blue, 9 red, 1 green; 13 blue, 4 red; 12 blue, 9 red, 2 green
|
||||
Game 25: 9 green, 11 red; 14 green, 3 red, 1 blue; 8 red, 7 green; 10 red, 8 green, 1 blue; 6 red, 11 green, 1 blue
|
||||
Game 26: 10 blue, 6 red, 11 green; 9 red, 2 green, 10 blue; 5 red; 9 red, 8 blue, 7 green; 13 green, 10 red, 1 blue
|
||||
Game 27: 3 blue, 1 green; 10 green, 1 blue; 8 red, 6 green, 6 blue
|
||||
Game 28: 10 blue, 2 red, 13 green; 2 blue, 2 red, 6 green; 10 blue; 4 red, 4 blue, 11 green; 3 green, 2 red, 6 blue; 14 green, 2 red, 2 blue
|
||||
Game 29: 8 blue, 5 red, 6 green; 1 green, 4 blue, 15 red; 8 blue, 14 red, 3 green; 9 blue, 4 red, 5 green; 3 red, 3 green, 4 blue
|
||||
Game 30: 19 green, 14 blue, 2 red; 2 red, 8 green, 7 blue; 4 blue, 1 red, 13 green; 10 blue, 3 green; 8 blue, 2 red
|
||||
Game 31: 12 green, 5 blue, 3 red; 15 blue, 11 green, 6 red; 6 green, 6 red; 4 green, 6 blue, 10 red
|
||||
Game 32: 7 red, 2 green, 3 blue; 9 red, 1 green; 2 green, 5 red, 1 blue; 12 red; 14 red, 4 blue
|
||||
Game 33: 9 red, 4 green, 6 blue; 4 red, 10 green; 16 red, 4 green, 4 blue; 15 blue, 12 red
|
||||
Game 34: 5 green, 1 blue; 18 red, 1 green, 1 blue; 1 blue, 9 green, 3 red; 6 green, 11 red
|
||||
Game 35: 2 blue, 19 green, 6 red; 16 green, 1 red, 1 blue; 1 green, 2 blue, 5 red; 8 green, 3 blue, 13 red; 11 red, 10 green, 4 blue
|
||||
Game 36: 17 green, 6 blue; 10 blue, 2 red, 8 green; 16 green, 4 blue, 1 red
|
||||
Game 37: 9 green, 7 red, 8 blue; 1 blue, 10 red; 10 red, 4 blue, 11 green; 8 green, 11 red, 5 blue
|
||||
Game 38: 8 green, 11 blue; 13 green, 2 blue; 7 blue, 2 red, 8 green
|
||||
Game 39: 14 red, 2 green; 2 red, 3 green, 1 blue; 4 red, 5 green, 4 blue; 2 blue, 3 red, 1 green; 17 red, 2 blue; 5 green, 3 red
|
||||
Game 40: 10 blue; 2 red, 9 blue; 5 red, 1 green, 2 blue; 8 blue, 2 red; 6 blue, 2 red; 4 red, 2 blue, 1 green
|
||||
Game 41: 2 blue, 3 red, 2 green; 4 green, 2 red, 11 blue; 11 blue, 3 red, 1 green; 1 red, 6 green, 1 blue; 5 red, 7 green
|
||||
Game 42: 1 blue, 14 green, 1 red; 2 blue, 2 green; 5 green, 2 blue, 8 red
|
||||
Game 43: 15 red, 5 blue, 5 green; 15 green, 15 red, 1 blue; 4 blue, 13 green, 13 red; 3 red, 16 green; 2 red, 3 green, 2 blue
|
||||
Game 44: 8 green, 8 blue; 9 blue, 9 green; 9 green, 3 blue; 8 green, 3 blue; 8 blue, 2 green; 9 blue, 1 red, 8 green
|
||||
Game 45: 4 red, 4 blue, 4 green; 5 red, 2 green, 9 blue; 8 blue, 5 red, 3 green; 4 red, 3 blue; 5 red, 5 green, 1 blue
|
||||
Game 46: 1 blue, 9 green, 2 red; 2 blue, 9 green, 1 red; 8 green, 3 red
|
||||
Game 47: 2 green, 4 blue, 10 red; 4 green, 5 blue, 1 red; 10 green, 13 red, 6 blue; 4 green, 4 blue, 12 red; 15 red, 1 blue, 4 green
|
||||
Game 48: 1 red, 7 green; 2 blue, 4 green, 5 red; 5 red, 3 green, 1 blue; 8 green
|
||||
Game 49: 3 blue, 4 green, 3 red; 6 red, 5 green, 5 blue; 1 blue, 4 green, 3 red; 6 red, 1 blue, 5 green; 4 red, 3 green, 5 blue; 2 green, 3 blue, 1 red
|
||||
Game 50: 1 green, 5 red, 6 blue; 3 red, 2 green; 1 red, 1 green, 6 blue; 1 green, 7 red, 3 blue
|
||||
Game 51: 7 green, 8 blue; 6 blue, 6 red, 4 green; 6 green, 1 blue; 8 blue, 5 red, 4 green
|
||||
Game 52: 7 red, 3 blue, 6 green; 7 green, 5 red, 4 blue; 6 red, 4 blue
|
||||
Game 53: 12 blue, 1 red, 5 green; 4 green, 2 blue, 5 red; 5 red, 4 green; 1 green, 3 blue, 5 red; 5 blue, 2 red, 5 green
|
||||
Game 54: 15 green, 12 red; 11 red, 3 green, 2 blue; 3 blue, 6 green; 3 red, 1 blue, 5 green; 17 red, 7 green
|
||||
Game 55: 7 green, 10 red, 7 blue; 8 red, 4 blue, 11 green; 9 green, 11 red
|
||||
Game 56: 7 green, 3 blue, 5 red; 6 green, 1 red, 4 blue; 4 green, 2 red; 5 blue, 6 red, 8 green
|
||||
Game 57: 1 green, 3 red, 3 blue; 5 blue, 2 red, 2 green; 1 green, 5 blue
|
||||
Game 58: 4 red, 2 green; 13 green, 4 red, 1 blue; 12 green, 4 blue
|
||||
Game 59: 4 red, 4 green; 5 blue, 1 green, 20 red; 11 red, 3 green, 15 blue; 5 blue, 7 red, 3 green; 18 blue, 4 green, 19 red
|
||||
Game 60: 5 blue, 8 red, 4 green; 4 blue, 12 green, 19 red; 3 blue, 1 green, 17 red; 1 green, 3 blue; 2 green, 6 blue, 3 red
|
||||
Game 61: 3 red, 7 blue, 12 green; 7 red, 1 green, 6 blue; 6 red, 2 green, 18 blue; 14 blue, 5 red, 1 green
|
||||
Game 62: 1 red, 2 blue; 1 green, 3 red; 1 green, 9 blue, 4 red
|
||||
Game 63: 6 green, 4 blue, 17 red; 2 green, 2 blue, 12 red; 10 green, 9 blue, 13 red; 15 red, 8 green, 5 blue
|
||||
Game 64: 4 green, 7 blue, 10 red; 3 green, 4 blue, 12 red; 6 green, 6 red, 8 blue; 4 green, 9 red, 1 blue; 2 blue, 15 red, 15 green
|
||||
Game 65: 5 green, 4 blue, 7 red; 6 green, 7 blue, 8 red; 1 green, 7 red; 1 blue, 10 red, 8 green
|
||||
Game 66: 5 green, 5 blue, 2 red; 3 red; 1 red, 1 blue, 16 green; 2 blue, 1 green; 8 green, 1 blue, 3 red; 14 green, 4 red
|
||||
Game 67: 12 blue, 7 green; 7 blue, 7 green, 1 red; 12 blue, 1 green, 6 red
|
||||
Game 68: 2 blue, 8 red, 1 green; 9 blue, 3 green, 12 red; 14 blue, 15 red, 6 green
|
||||
Game 69: 7 red, 1 blue; 11 green, 2 blue, 13 red; 3 blue, 13 green, 3 red; 1 blue, 10 red, 8 green; 15 red, 2 blue, 19 green
|
||||
Game 70: 10 green, 10 red, 12 blue; 7 red, 15 blue, 2 green; 8 blue, 9 green
|
||||
Game 71: 1 blue, 2 green, 13 red; 7 red; 1 green, 5 red
|
||||
Game 72: 2 red, 1 blue, 11 green; 1 red, 2 blue, 18 green; 5 red, 3 blue, 3 green
|
||||
Game 73: 13 red, 3 blue, 4 green; 3 green, 17 red, 1 blue; 6 blue, 4 green, 4 red; 13 red, 7 blue
|
||||
Game 74: 1 blue, 3 red; 13 blue, 5 red, 2 green; 1 red, 8 green, 11 blue; 4 blue, 1 green, 5 red; 11 blue, 8 red, 6 green; 8 red, 3 green, 4 blue
|
||||
Game 75: 7 blue, 4 green, 1 red; 3 green, 4 blue; 5 green, 2 red, 3 blue; 6 blue, 3 red, 5 green
|
||||
Game 76: 9 green, 1 blue, 4 red; 6 red, 9 green, 3 blue; 2 red, 6 green, 2 blue; 5 green; 6 green, 2 red, 3 blue; 6 blue, 5 red, 5 green
|
||||
Game 77: 2 green, 2 red; 1 blue, 6 red, 2 green; 4 green, 3 red, 2 blue; 2 blue, 1 green, 1 red
|
||||
Game 78: 2 green, 10 red, 2 blue; 6 green, 2 red, 2 blue; 2 blue, 9 red, 6 green; 11 red, 6 green; 3 red, 8 green; 1 blue, 6 green, 1 red
|
||||
Game 79: 3 blue, 8 green, 13 red; 3 blue, 2 red, 3 green; 10 red, 6 green, 4 blue; 11 red, 1 blue, 3 green
|
||||
Game 80: 3 green, 5 red, 9 blue; 3 red, 5 blue, 2 green; 5 green, 6 red, 2 blue
|
||||
Game 81: 2 green, 7 blue, 3 red; 9 blue, 3 red; 1 green, 17 blue, 2 red
|
||||
Game 82: 4 green, 8 blue, 7 red; 10 blue, 1 green, 10 red; 7 blue, 4 green, 5 red
|
||||
Game 83: 7 green, 4 blue, 3 red; 15 blue, 3 red, 14 green; 9 blue, 4 red, 7 green
|
||||
Game 84: 5 red, 5 green; 16 blue, 1 red, 7 green; 17 blue, 11 red
|
||||
Game 85: 7 red, 1 green, 11 blue; 13 blue, 5 green, 6 red; 11 blue, 2 green, 8 red; 5 blue, 17 red, 4 green; 12 blue, 2 green, 8 red
|
||||
Game 86: 3 red, 8 blue, 2 green; 15 green, 15 blue, 2 red; 18 blue, 2 red, 11 green
|
||||
Game 87: 1 blue; 6 red, 6 green; 1 blue, 9 red, 3 green
|
||||
Game 88: 10 green, 2 blue, 1 red; 7 blue, 1 green, 1 red; 9 green, 4 blue; 8 green, 1 red, 7 blue
|
||||
Game 89: 6 green, 2 red, 2 blue; 5 red, 3 blue, 3 green; 3 blue, 4 red, 1 green; 5 red, 4 green, 5 blue; 4 blue, 6 green, 3 red; 3 red, 1 green
|
||||
Game 90: 1 green, 6 blue; 1 blue, 1 red; 2 blue, 3 green; 7 green, 6 blue; 1 red, 7 green, 6 blue
|
||||
Game 91: 8 blue, 14 green, 5 red; 8 red, 6 green; 4 red, 7 blue, 14 green; 4 blue, 7 green; 9 blue, 7 red; 14 green, 7 blue, 4 red
|
||||
Game 92: 11 blue, 8 green, 6 red; 11 blue, 1 red, 11 green; 10 blue, 19 green, 5 red
|
||||
Game 93: 5 green, 1 red, 7 blue; 8 green, 14 blue, 2 red; 5 red, 14 blue, 7 green
|
||||
Game 94: 2 blue, 6 red, 3 green; 4 red, 2 green, 2 blue; 4 red, 1 blue, 1 green
|
||||
Game 95: 9 red, 15 green, 1 blue; 2 blue, 10 red, 18 green; 3 red, 10 green; 10 red, 17 green, 2 blue; 3 blue, 13 green, 1 red; 2 red, 2 blue, 6 green
|
||||
Game 96: 8 green, 1 blue; 1 blue, 1 red, 11 green; 2 green, 15 blue; 1 red, 2 green, 1 blue
|
||||
Game 97: 3 green, 3 blue; 5 green, 3 blue, 1 red; 5 green, 1 red, 3 blue; 1 green, 1 red, 2 blue; 2 green, 2 blue, 3 red
|
||||
Game 98: 6 red, 6 green, 5 blue; 19 red, 7 green; 6 green, 8 blue, 4 red; 10 green, 4 red
|
||||
Game 99: 9 red, 8 blue, 10 green; 3 blue, 7 green, 8 red; 6 red, 12 blue; 8 blue, 8 green, 2 red; 16 green, 14 blue, 5 red
|
||||
Game 100: 8 red, 13 green; 5 red, 4 green; 7 blue, 3 red, 8 green; 13 blue, 6 green; 1 blue, 8 green, 7 red; 2 red, 1 green, 16 blue
|
140
2023/aoc_puzzle_cache/day_03
Normal file
140
2023/aoc_puzzle_cache/day_03
Normal file
|
@ -0,0 +1,140 @@
|
|||
..975..95..................717..........................................747................................................622..............
|
||||
................/47...........@....701...610.........252.660*.............*..236.....323..........108........653............................
|
||||
.......69............313..............$...$...*....@.........640........81.....*................................*332..92....................
|
||||
........................*...210.............767...912...367.......505.......817..................*.........478.........=....223.....568.....
|
||||
..76...968............108...@.....556.....................=..........*...............412..313...575......../...........................*107.
|
||||
............773/..891............*....................744.....805...14................../..../................320&.567..#...................
|
||||
.962..708............&........399....146.....385.................*..........825.......................................-..655....485...-.....
|
||||
...*.........+..........................*76...+..................242....997..*......185..........207.390..870...883............*.......337..
|
||||
....929...299....................*.................249........-...........*.373.....*.............*.....*.*....*.............549............
|
||||
................196.745.996...364..............409...-.926.....273.....580.........31...........545..547...862......810.....................
|
||||
................*.......*..............900+....*..........*........586.........936...................................*.........673..........
|
||||
.../..........864.683.215....*......%.........702..166..46..........&....341..........694..496.......528.%...........839...105..*...887.....
|
||||
....506...617.....*........51.807....942..424...............................*..........@..+............@.84...................*......=......
|
||||
...........@....594.........................*..........*675...........345..52...$..................-..............899.........804.$.........
|
||||
.362*366.................487+.48&.......600..180....845........................535...18...........397.#908....432*........229......346......
|
||||
.................*................835....................578......*502...............*..416.............................................391.
|
||||
....610&...514...501......./........*....*71.........../.......674......925...............*.869.....966........393................/.687.*...
|
||||
............*...............786...248.104........92.633.....%..............*104...&466..138..@.........*.525...+......974......339..=...260.
|
||||
....372/.889..............................55.406........134..250.=228..609...........................69...............*.....................
|
||||
...........................................*........976...*...........=.......357...........................191.....150.....................
|
||||
...-...........595.634.........*396......592..594......*......411.856...760....../..................201.....#...709................168......
|
||||
.936..236.........*....@....436.....100....../......35...../.....*........*....................917%............*.....................*..#63.
|
||||
.......*..............542..........................*........689.........26....667.&...................738....831..$.............513.53......
|
||||
........10.....529........*250..........162.......390...........................*..70.............................701..........*............
|
||||
..355.........&........394......301@..........542..............................142..........%..............%..........*.....507.............
|
||||
.....*.........................................*.....%..283.....*.........997&.......@670....402..........808......308.459.......712...152..
|
||||
..291......246.@....+986.....336/.......976...468.264...*....739.187.............................................................*.....*....
|
||||
........../....46...................186.$..............674............................227......-............975...............436.......492.
|
||||
.491........................810.......*........................772*.........742........%....198.....*702.......*.596=....64.......=.........
|
||||
...................706......=......415..................=.199......235......*...47........................72.607...................443......
|
||||
.214..............*.....771.............302...........230..+..............810.....*219.606........912.....................=.................
|
||||
......277......320.............937.....*.....+....632...........&374..............................*....................898.....642%.........
|
||||
.........#....................*.......716....229./.........................$................934...233...............98............../.......
|
||||
.....*........-659..457.........964...................659....786....619.666........277...@.....*......930*460..618...........910..265.......
|
||||
..845.877.343......................*537.../120.......*.......*.....*.................&...175..631.............=.................#...........
|
||||
............*....................+................@...35.949..34.381......273...880......................451........326.....................
|
||||
............876..880......827..733.......645.......38......*.........402.....+..........902....459.775........837.....*.185.......813.......
|
||||
........578................/............*...............622..18.........*234..............+....%..........448.......935....#.............350
|
||||
..........*...468.....546................588....146=.........*..142.795..............*424................../.....................=..........
|
||||
........245............@...746.......362..................970......*..............593...............487.......+.............709..593........
|
||||
...990......&415..............*381......*.....................435.......214..908..................*....*.....351.....876.25....*............
|
||||
......*............293*.....%...........271.............135......*......=........540............177....604...........&.....-.46..........166
|
||||
...609.....................910.................@........$.......321..........141....+.45.....................750......................98....
|
||||
.......#....779........944.....653...........797...........788.................*......+....164.724....475&...+.............-.471......&.....
|
||||
..794...487....&..81...........*...................@............666@.....*981.937.............*.....%..........888....+...81................
|
||||
.....*...........+......694.............748...104..859..............................675.434.......290.............*..352........353=..$.....
|
||||
...619.977.........859..#....235....230*......*..............429........335....-.......*......631.......=.......27...................192....
|
||||
.......*............=...........&.........121..680.195.959......*417.....*..938.............../..........739..#..............194.750........
|
||||
....309...439.............14...............*..........*...............723.........163..748...........853.....885.........175*........487....
|
||||
.............*707..-626..........464.....382................356...........868#....*...*.....13......*............450............#.....*.....
|
||||
........216......................*...619......$..270........*.....892............25.494.841*.....971.............*............157.+...119...
|
||||
...#40...../............343..559.425.......536........718....739...#.......284...............726.....985..136...597.621.173.......203.......
|
||||
................383............/......................*...................@....348............*.....*.......*........./...*...811.......*158
|
||||
...=..............$......@....................776.829.85...&........541.......*....*...&....700......341.995.....73......114....*....267....
|
||||
.700.203....591.*.....924..........$217.......@.....*.......590....*.........812.579....517.......................*.............730.........
|
||||
......#......*...586.........312..................806............435...259...........................573........453.282*132.243.............
|
||||
..........224.................#.......468@............-...%.............*..............453...................$.....................-........
|
||||
....................................................227.673....881......828..&.....632*...................589.....................284..-....
|
||||
.....680.........871....17+................117.................*.............506..................#...410...................616.........519.
|
||||
........*..386................78*762.........@........28..557.655.......359........-............124..#......&..........843./................
|
||||
......724...*..584.....552............................*...&.................209..857...633-..............602...932......*........132&.......
|
||||
..........41../.........*..........................#..427.............=370....*................................*...353...902...........529..
|
||||
.....................150.......868.......370....549.........779...................284...........431.....3.....889.............189..103.=....
|
||||
.......530..355..........442...*............*63............+.......852.....935.....*..............%.....*..................@....*.-.........
|
||||
..........*...*...976.....*...500....@...........572...........940....*990..*....627.790.................460..904..601-..821..930....699....
|
||||
..........643.824.......248........358...4.........&..301.........&........538.........*.%436....565..........*......................../....
|
||||
.768..$.....................186..........*...178........*.......................*.&520..............%........782..........497.-......*......
|
||||
......762..828*...972......*..............3.*.......................@....../..836...............278..............666......*...927.413.185...
|
||||
....&..........40.......86.122..........&....450....................1....202............42...51....*..............*.....215.................
|
||||
.353.................94*.................995.....655.....520...828....*...........612..........&.119...........486...............713........
|
||||
.........................255........................*.......+.....-..463..........*........235........836....................668............
|
||||
...................................................286........338........=.393....398........*....199./............631..........*631........
|
||||
................64%....704...928.........470...125............*....708.15...*.............193.......*........641....*......687..............
|
||||
........$..............*...................&.....*..........582......*....652.@358..643..........125.....458........168....$.......$194.....
|
||||
........293.........305......417...............117....................612............*......262.............*903............................
|
||||
.....$...................615*..........581.........335...139..505.419.............656.........+.......506................710.....956........
|
||||
776..110.....+............................-........#..........*....*...447......*......................*...*.....938.366*.......#....376....
|
||||
..........366............844....305..761......780......560........236........725.272.....450.............67.126.....................*.......
|
||||
.................669$.......$.......=............*220./.....+665........495................*.@103....992....................&........600....
|
||||
.......*......................812/.........................................$............940...........+...................146...975.........
|
||||
....410.650.282.....*...............696.833....957...............996...*......772.287...................921..935................%.....$.....
|
||||
............*....413.921...713....................%.....769.........@.390.216..#.....@..........................=...........*.......46......
|
||||
.....798.136..............%....150.....236..............*......31...........*..........@.64..17......616..........901......344..............
|
||||
..............................-........*.....402......873.......*......692...592....390...*.............*277................................
|
||||
......539.....799.../.....272....%.@....694.#.............667...318.......=...............762.......71%.......-153......................531.
|
||||
..........556*......573.......465...916...................*..........602.........................=.......145...........................*....
|
||||
........................451.............../....%.....625.401.........*........428-.....493......479.427....$.........60......951......281...
|
||||
..947+....36....270....*............517....521..258.*............108..812.............*................*........................*372........
|
||||
...........*....*....957.823...290.....*.............415..........*...............908..730..........589......+..............................
|
||||
857.........843............*........794......................677..27........................121...........670.........548.837*....&.....664.
|
||||
......175..........-.....=........................422.......*..................226-..344.......*...................2....%..........474......
|
||||
...................283..190..@...........458........*.162@.666.517....202...............*..@...545.%.........705.............*..............
|
||||
...............*............296.466.....#.........................*..*.....852..208...999.475......256..........=....642..188.386...........
|
||||
............504.888..................52....416......394...349.....53.953...*......*...........@521.........213........*.....................
|
||||
......225...............272*32........*.....*..........*...%..............728.........827.513..........287*.........924..388%.........&.....
|
||||
..453...*..................................71.....*..437.......501...869.......928....%...#....................%225.............734@..157...
|
||||
....*..400...........810=.300@...13.15.537.....997........./......*.....*.........+.........407.758...674............604....500.............
|
||||
..970..........409...............*...*...*................159...788....338..............636*...../....#.......#895....*......./.............
|
||||
..................................52.....872........+...........................-........................524.........297............314.....
|
||||
...........=...469.....408.............&.........641......364%.780...526.........540.865....742............*..............549..505...*......
|
||||
........404.......*...-....58..%....577...............655......*.............613......*.............343..779./854............*....*...567...
|
||||
...103............284......./...999....................=.....640.....284..............566.982..........$...........476...478.793..556.......
|
||||
......*.....436........916.................941.............@.........&...........284.........*183.........857.953...........................
|
||||
...............*.404=.....*910..703@...20......266......815.....201.....54.332...........................@......*...........95..............
|
||||
.............898........................*........*..........13.....*806...*.......280.........................905........63*................
|
||||
........&.........642..271.627..920.+....534...96..780......@....=...........246../......99........................................../......
|
||||
....$....518.......@......*......*..323..............-............477....*4...*...........*....979......810.................366....697......
|
||||
.....439........................364.........161..594.....647..................802.........234..............*17......125..82....*............
|
||||
................187....667....................*..#.......*.......*................604..................946.............*....414.............
|
||||
....585...218.....*...*.............-....536.396........950...200......296*935...*..........#...382..........883......182.......326....*....
|
||||
.....+......-...557.349...........217............................./105..........527..387....394...*...........#..430*.....501.......393.190.
|
||||
.......*474.............16....................675.....999..............362..............*..........576...................*..................
|
||||
....449.....+.296*468.....................607....*...........-..#.................619....177...............31...........194..198..187.......
|
||||
.........156......................330.......+..332...631...936...477................*...........658..........%..845..........*..............
|
||||
....*262.........$......362......*.....429=..............................*324....296...........+.......161.....*....57.....309..............
|
||||
.403............492..97.@.....695..696......$.840..&.................21.....................@.........*.......178...+....$.............364..
|
||||
......178..692*.....%.....82..........=...176.......456.....517........+...238.704.......682......266.................&..222..........*.....
|
||||
......*........993........*....931*...........445..............*.................=...........@...*.......448.......251................222...
|
||||
.......824............467..232.......664..299*.......322*512..850..............@..........585....259........$..................&............
|
||||
...458.....572.................379....*........123.....................-........298..................-................336...908....*........
|
||||
....&......*....&..732...701/....*....440.....$...........739..636.....65..../.......%151.............823.455............&..........119.....
|
||||
........550....391..%.............259....................#....*............834............232.179............*.........4...795.784..........
|
||||
.............%...............729...............568.............936...............952........*..*..............726..........*.........-......
|
||||
...627.....87....@...........-...........6.....%...106.......................458*.....281..811..282..500..............=....833....214..780..
|
||||
..............320................665..............*........584.........................*............................343...............*.....
|
||||
..................997....84.590.....*795.90*487.842..%431....*.......233..692....259....391.113*........*338............./..391.............
|
||||
.....62.....#689.*.........*.................................444.......*...*......*.............445..861...........498/.857..*.....505*.....
|
||||
......*...........436.869.....634@..663...599..901*678.100..........666....301..493.986....174.............838*492..........454........313..
|
||||
.....362.....983....../................+..*.............=.............................*....*.......259.............+....464.........27......
|
||||
...%........................580....68.....45.........................................21..768...267....*.+....661..879..@....&......$........
|
||||
.643....545......./435.....*.........+.............................823....919.......................20..102.*..............267.690.....55...
|
||||
.........*...............557....247.......653....584.5*....430....*........../...529+...........856..........305.254..212.............*.....
|
||||
........945...528................/...775..+............204...-.537....$..528................276*...................%....*....863......612...
|
||||
....572.......*.........614.........+................................810...............842........438.....26...&.....%.........*............
|
||||
.......*....201.@......*....671..$........................../.............................*...832*.......*....214.899..........795.421+.....
|
||||
994..797.........684.390....*....452../..................989..728............685....23+.856...........498.............443...................
|
||||
.....................................424.......%...............@.......228.....+..............+.......................$.....................
|
||||
.....2...812.517.........602*967.........262....953...*.....*....67...*...........+......1.431.....721.....402%..&.......*.....504..........
|
||||
.............*....%..................963*...........96...287.255.*...548.........534....*.............*..........896..531.789.=.......855...
|
||||
...........579....595...........8................................781...............................547......................................
|
202
2023/aoc_puzzle_cache/day_04
Normal file
202
2023/aoc_puzzle_cache/day_04
Normal file
|
@ -0,0 +1,202 @@
|
|||
Card 1: 34 50 18 44 19 35 47 62 65 26 | 63 6 27 15 60 9 98 3 61 89 31 43 80 37 54 49 92 55 8 7 10 16 52 33 45
|
||||
Card 2: 90 12 98 56 22 99 73 46 1 28 | 52 77 32 8 81 41 53 22 28 46 48 27 98 1 94 12 99 72 84 90 92 73 24 63 56
|
||||
Card 3: 48 10 39 87 23 78 49 40 55 8 | 48 80 78 87 39 24 27 19 41 73 30 52 10 2 67 40 88 53 59 84 55 49 5 33 82
|
||||
Card 4: 21 45 91 26 64 51 42 84 11 94 | 55 56 36 65 84 2 68 44 52 58 86 6 33 7 97 40 30 14 39 80 82 57 79 1 10
|
||||
Card 5: 33 6 67 89 64 31 85 11 2 15 | 6 70 29 89 12 11 64 80 7 82 46 16 33 68 48 72 31 2 99 15 67 57 4 49 85
|
||||
Card 6: 51 20 11 66 38 39 69 48 25 74 | 39 74 3 86 19 25 21 55 2 38 46 60 66 82 51 11 98 88 8 48 49 94 20 69 72
|
||||
Card 7: 4 50 82 51 52 77 12 11 57 42 | 56 11 73 69 42 82 32 77 52 98 12 51 36 94 46 4 50 39 85 90 93 70 18 71 57
|
||||
Card 8: 96 31 27 93 7 8 6 23 15 72 | 55 79 86 4 6 35 12 27 95 29 73 81 87 43 7 13 62 15 72 71 58 48 63 94 89
|
||||
Card 9: 16 90 79 29 93 31 40 24 82 88 | 86 16 73 20 22 93 83 39 36 90 79 72 40 29 35 97 88 12 8 24 31 82 21 59 95
|
||||
Card 10: 17 36 50 39 96 43 41 38 55 8 | 39 93 38 96 56 27 4 72 17 87 99 78 75 11 55 41 43 68 64 28 50 40 8 36 97
|
||||
Card 11: 76 96 78 64 80 28 11 24 93 97 | 66 34 64 35 97 47 54 13 79 11 67 24 36 28 17 30 82 93 21 49 4 86 76 12 8
|
||||
Card 12: 16 73 39 24 54 90 89 55 11 25 | 17 92 1 61 86 2 25 7 50 55 88 74 64 83 24 48 39 84 54 32 58 34 89 28 99
|
||||
Card 13: 66 99 94 51 17 67 73 32 76 86 | 97 61 50 64 57 41 39 89 60 13 43 72 44 83 84 18 87 20 92 48 75 8 82 36 53
|
||||
Card 14: 3 56 26 47 68 66 22 20 27 77 | 75 22 63 26 55 66 3 73 47 90 44 64 76 4 92 19 91 62 51 77 58 17 2 40 52
|
||||
Card 15: 91 1 44 6 51 43 61 5 12 31 | 49 97 10 78 87 95 36 56 96 46 4 14 43 54 94 81 41 67 91 11 83 38 93 22 86
|
||||
Card 16: 61 46 35 13 79 38 80 3 95 87 | 80 98 46 74 28 26 84 73 75 57 52 91 40 44 2 51 95 77 3 96 35 67 41 55 79
|
||||
Card 17: 50 89 17 18 60 81 37 29 3 52 | 13 19 83 98 77 25 97 52 10 35 94 99 50 6 27 84 41 11 33 34 20 4 54 89 56
|
||||
Card 18: 57 1 68 3 86 40 15 2 38 41 | 88 96 18 25 16 15 12 47 37 27 39 48 32 43 33 82 60 13 57 53 40 61 26 99 5
|
||||
Card 19: 30 48 3 82 23 91 41 63 99 16 | 78 6 46 54 22 85 7 49 59 53 68 12 70 97 77 92 56 41 83 5 75 37 58 61 28
|
||||
Card 20: 28 5 15 55 66 24 25 93 6 22 | 94 68 4 2 98 37 76 71 78 21 47 67 97 51 99 3 57 89 95 30 26 60 12 9 11
|
||||
Card 21: 90 98 42 76 23 83 8 29 5 50 | 93 13 90 19 25 61 97 39 99 73 40 38 6 72 65 43 91 20 33 86 55 62 47 1 84
|
||||
Card 22: 14 49 50 4 1 13 65 30 10 51 | 26 40 32 73 16 93 94 22 59 76 89 27 33 44 87 42 74 3 71 47 67 6 12 43 57
|
||||
Card 23: 29 57 10 79 78 30 86 69 32 72 | 26 8 96 78 51 90 86 19 3 10 57 29 22 72 35 28 97 34 69 38 79 33 93 32 30
|
||||
Card 24: 99 66 67 60 23 90 73 1 29 77 | 79 80 74 63 27 68 12 81 19 91 28 56 71 38 24 35 18 4 87 13 62 3 34 44 14
|
||||
Card 25: 87 8 39 28 6 89 34 17 51 25 | 50 37 16 36 90 60 28 17 84 70 32 22 64 61 6 34 24 56 99 89 40 77 47 68 87
|
||||
Card 26: 42 82 14 23 59 8 62 53 37 2 | 62 8 14 85 76 53 21 60 79 1 90 19 78 82 42 17 11 49 87 13 59 37 81 2 23
|
||||
Card 27: 75 95 56 30 17 58 61 11 39 93 | 68 73 94 9 11 86 80 22 61 50 75 62 36 98 17 39 89 93 34 56 30 78 95 58 96
|
||||
Card 28: 10 54 26 76 5 35 81 67 34 28 | 28 88 89 93 76 35 81 94 26 98 10 84 67 5 65 50 57 34 54 82 4 45 62 24 53
|
||||
Card 29: 6 40 97 56 4 43 98 55 79 72 | 79 15 43 54 97 4 95 42 40 57 82 91 87 86 68 63 19 1 22 72 7 67 10 84 55
|
||||
Card 30: 22 85 5 42 74 28 1 63 29 53 | 63 86 80 48 13 2 74 85 25 97 5 43 21 53 88 7 38 29 82 3 30 77 51 11 44
|
||||
Card 31: 11 69 64 47 44 13 50 33 83 53 | 59 9 57 81 98 69 32 40 11 33 53 20 52 12 37 93 79 64 74 80 71 35 44 7 13
|
||||
Card 32: 94 44 62 75 35 86 34 20 1 74 | 17 29 50 65 60 57 33 59 31 92 70 11 54 85 99 22 46 53 98 93 97 51 67 64 12
|
||||
Card 33: 90 55 21 9 10 41 24 51 88 70 | 30 77 78 20 32 1 57 92 15 75 21 37 31 43 60 39 72 54 46 99 53 61 50 33 94
|
||||
Card 34: 8 77 92 34 84 28 90 40 97 75 | 61 40 99 77 17 28 80 50 37 47 22 70 81 79 97 85 93 15 49 48 69 14 2 12 94
|
||||
Card 35: 44 61 20 43 35 24 45 53 52 47 | 46 54 93 78 87 31 30 80 23 51 13 99 60 57 38 9 1 19 90 71 70 26 40 97 62
|
||||
Card 36: 64 40 1 89 19 70 16 71 31 94 | 10 89 43 1 63 77 3 74 62 17 38 54 72 41 50 14 35 59 99 34 52 55 22 44 96
|
||||
Card 37: 74 56 86 52 37 58 30 55 79 9 | 49 28 37 12 97 61 19 36 90 45 48 21 86 58 96 82 9 87 66 44 35 77 81 70 22
|
||||
Card 38: 34 46 73 59 45 65 85 27 16 42 | 17 93 58 98 88 64 26 35 2 84 86 80 89 4 48 83 28 50 32 21 74 69 95 40 57
|
||||
Card 39: 51 82 59 67 24 8 32 23 96 40 | 76 40 59 83 65 24 4 29 88 21 82 68 95 64 10 1 62 37 81 32 74 47 56 63 48
|
||||
Card 40: 80 57 26 4 27 39 34 24 49 78 | 65 64 86 59 25 16 92 66 13 54 46 91 29 47 32 21 81 14 30 7 62 37 55 41 36
|
||||
Card 41: 12 70 15 72 82 43 53 21 58 51 | 7 56 3 30 36 45 28 94 67 89 39 2 48 47 24 29 16 20 22 18 41 37 49 93 77
|
||||
Card 42: 60 85 83 5 82 63 48 36 4 40 | 89 43 57 86 31 45 88 37 90 3 46 94 29 12 25 40 38 50 72 5 9 15 49 16 87
|
||||
Card 43: 33 94 66 90 14 72 73 59 55 15 | 87 34 37 35 4 77 25 80 54 10 86 6 12 48 60 61 36 55 43 64 97 30 41 5 95
|
||||
Card 44: 31 17 65 48 36 63 33 46 25 87 | 9 70 4 42 53 97 57 32 80 14 95 23 3 12 15 52 6 34 71 74 39 27 66 22 20
|
||||
Card 45: 88 52 86 36 5 15 65 61 18 17 | 36 96 32 56 1 80 48 89 95 97 60 91 85 21 82 10 3 75 66 93 51 37 28 23 83
|
||||
Card 46: 23 86 32 98 41 65 17 89 69 39 | 69 4 80 41 89 43 86 44 16 40 99 8 77 32 39 51 19 36 73 56 90 83 5 17 76
|
||||
Card 47: 80 15 87 14 9 27 40 44 60 8 | 33 27 15 67 34 8 14 58 37 80 40 73 38 87 84 55 94 60 9 35 42 46 4 79 44
|
||||
Card 48: 94 32 34 99 60 33 11 3 30 96 | 72 27 32 33 56 11 97 61 94 96 26 93 30 41 83 17 3 60 34 2 47 99 40 24 90
|
||||
Card 49: 53 60 74 44 36 88 64 45 8 34 | 89 84 68 79 30 67 75 76 21 53 26 72 51 85 18 44 7 25 60 74 64 17 37 88 86
|
||||
Card 50: 90 69 91 1 43 26 77 19 61 65 | 65 34 92 13 48 46 69 19 44 77 99 11 63 91 76 61 73 53 1 81 23 12 40 26 43
|
||||
Card 51: 22 94 42 24 28 37 61 88 86 12 | 5 31 3 34 56 82 70 68 39 91 53 22 16 81 71 54 99 41 44 90 24 37 12 27 61
|
||||
Card 52: 93 57 50 9 14 42 66 23 21 1 | 21 33 48 18 71 1 27 54 11 77 74 22 92 41 34 14 98 36 61 70 89 80 82 10 55
|
||||
Card 53: 21 12 1 93 98 69 91 8 4 89 | 80 7 1 68 92 32 83 21 76 20 63 33 28 73 43 12 56 5 15 40 89 52 16 22 9
|
||||
Card 54: 22 52 94 9 63 10 16 1 82 4 | 43 47 48 81 24 35 9 16 94 44 85 18 13 64 49 82 52 77 10 21 41 12 74 79 39
|
||||
Card 55: 71 92 42 84 19 43 13 54 1 88 | 73 23 32 18 52 38 35 81 45 96 92 15 57 19 55 43 51 12 7 88 62 69 71 5 53
|
||||
Card 56: 13 52 23 69 26 92 37 47 99 54 | 38 64 66 22 26 99 93 23 86 9 29 98 57 48 51 79 50 42 90 60 87 13 25 5 4
|
||||
Card 57: 62 8 38 58 6 99 10 14 72 94 | 29 56 27 53 61 77 95 39 24 46 19 40 30 31 9 93 78 91 79 25 20 4 12 67 87
|
||||
Card 58: 34 57 49 6 78 13 53 81 75 98 | 41 58 21 56 64 7 97 11 80 4 83 12 44 51 62 26 5 22 46 45 27 95 10 16 43
|
||||
Card 59: 86 27 78 51 67 90 10 44 85 87 | 13 66 32 54 65 92 91 55 53 47 5 11 64 49 18 10 8 16 23 9 12 29 50 70 61
|
||||
Card 60: 26 62 95 72 31 98 50 9 25 44 | 56 94 2 53 11 51 22 66 12 45 36 17 37 14 78 48 4 29 64 76 39 65 1 15 24
|
||||
Card 61: 47 54 93 76 68 98 64 15 53 22 | 70 19 86 7 44 45 5 39 30 38 6 83 33 15 3 51 49 29 98 37 56 21 78 60 90
|
||||
Card 62: 46 53 15 99 29 7 10 34 79 12 | 46 56 94 40 66 26 33 99 39 28 12 67 53 74 11 22 92 34 29 79 7 32 98 15 10
|
||||
Card 63: 44 3 92 7 24 33 23 31 10 12 | 23 1 96 92 72 33 86 4 80 68 25 12 40 45 17 29 94 36 81 44 61 83 10 24 19
|
||||
Card 64: 21 95 89 20 7 16 23 73 58 86 | 84 47 11 18 96 90 73 2 38 51 29 30 58 99 76 86 21 1 37 68 16 32 39 22 35
|
||||
Card 65: 15 42 28 50 91 52 73 79 70 45 | 98 70 45 19 4 46 86 11 68 96 41 58 39 7 64 15 50 89 28 72 47 17 40 27 79
|
||||
Card 66: 91 48 16 1 24 3 75 60 41 86 | 98 52 55 23 66 14 92 50 74 75 3 1 58 91 13 97 90 73 78 62 48 79 65 77 87
|
||||
Card 67: 74 29 43 82 93 73 58 98 3 8 | 32 63 13 60 49 73 18 74 65 78 97 92 29 23 43 5 72 35 48 99 3 15 93 52 64
|
||||
Card 68: 35 33 72 82 59 8 27 67 19 31 | 35 36 80 7 63 62 33 44 55 31 8 75 1 64 95 27 47 79 40 14 72 19 42 69 91
|
||||
Card 69: 96 20 45 65 51 91 49 30 79 78 | 58 73 89 36 32 69 81 37 20 60 42 76 29 25 75 65 30 86 19 26 66 34 31 99 8
|
||||
Card 70: 13 59 90 5 63 29 14 32 77 53 | 56 66 32 77 16 85 47 73 55 86 1 90 69 97 4 78 76 59 49 8 48 37 63 50 72
|
||||
Card 71: 9 31 29 5 50 37 71 94 78 53 | 28 80 53 55 39 58 42 86 57 81 83 64 95 43 69 51 65 20 75 13 30 70 50 63 5
|
||||
Card 72: 86 87 49 67 68 46 45 60 23 12 | 35 93 94 6 55 49 40 28 38 62 63 32 52 36 69 17 81 73 16 7 56 89 21 20 86
|
||||
Card 73: 80 81 75 68 33 79 94 53 8 25 | 9 47 95 99 85 48 62 17 44 77 31 12 1 70 86 34 75 83 68 87 88 96 78 4 18
|
||||
Card 74: 62 64 51 12 54 2 85 81 22 28 | 98 14 10 71 2 61 29 82 39 55 17 76 31 18 86 97 60 87 93 26 69 33 21 13 6
|
||||
Card 75: 96 50 88 5 16 85 7 27 51 58 | 94 80 41 53 93 20 83 45 61 40 72 95 97 39 26 32 91 70 99 3 48 62 64 79 86
|
||||
Card 76: 1 73 41 87 54 57 20 7 98 85 | 21 16 15 66 23 75 86 46 11 90 36 96 34 78 58 33 88 56 93 74 8 64 30 28 5
|
||||
Card 77: 91 50 88 4 58 31 20 6 24 44 | 10 61 50 55 62 47 75 78 80 88 93 4 41 59 95 91 58 31 24 70 22 20 6 12 44
|
||||
Card 78: 22 28 36 88 75 82 4 99 90 55 | 14 33 24 75 43 4 41 88 16 15 77 36 99 22 52 82 61 55 28 27 89 97 51 32 90
|
||||
Card 79: 96 3 13 91 24 65 77 1 44 43 | 13 43 24 56 6 3 77 65 61 5 41 73 44 60 21 96 74 72 19 16 1 52 37 91 46
|
||||
Card 80: 71 29 61 75 72 55 16 26 6 62 | 15 65 38 71 16 10 75 50 6 92 4 26 79 29 94 46 62 63 45 61 51 86 74 55 72
|
||||
Card 81: 34 57 14 90 99 97 44 31 73 64 | 38 47 54 86 50 4 46 48 14 43 16 15 82 27 51 8 33 59 17 55 84 57 44 19 12
|
||||
Card 82: 77 46 25 67 61 5 37 49 50 24 | 77 89 5 4 61 43 50 76 55 78 46 6 42 66 25 52 49 7 85 95 37 24 48 23 67
|
||||
Card 83: 66 30 35 68 10 67 18 14 52 59 | 6 37 16 61 95 66 91 54 79 50 97 21 2 33 74 29 80 77 1 59 41 31 10 13 9
|
||||
Card 84: 29 39 48 7 2 90 47 93 88 46 | 57 90 50 84 74 52 7 27 93 96 54 78 48 39 29 46 40 88 47 13 2 89 70 25 86
|
||||
Card 85: 91 93 84 76 7 1 96 60 98 67 | 98 88 10 21 91 27 93 44 1 67 79 7 58 87 47 30 76 96 20 60 2 84 41 73 54
|
||||
Card 86: 73 1 14 37 79 63 97 75 2 60 | 80 3 56 45 43 23 1 95 72 13 49 27 9 78 55 15 74 40 75 94 86 63 76 32 52
|
||||
Card 87: 76 35 41 4 25 97 62 99 77 98 | 93 35 81 77 37 76 88 98 53 38 4 48 25 23 84 97 2 49 46 99 42 1 41 95 62
|
||||
Card 88: 3 15 12 58 57 4 43 44 10 55 | 78 55 51 54 4 44 42 35 69 3 79 25 57 10 77 34 30 38 12 58 43 93 14 86 15
|
||||
Card 89: 4 99 45 58 49 30 59 21 25 13 | 73 43 99 85 74 13 30 58 45 31 21 52 25 49 29 4 6 62 19 92 39 16 18 89 59
|
||||
Card 90: 81 84 6 57 1 69 3 68 13 49 | 20 25 40 92 84 38 83 53 94 66 49 52 17 72 56 8 33 43 22 81 64 47 28 36 5
|
||||
Card 91: 68 97 58 96 34 66 61 81 56 90 | 25 28 51 34 59 40 64 96 97 48 30 90 63 37 89 74 16 87 81 5 1 54 66 57 62
|
||||
Card 92: 10 53 16 70 72 21 34 4 65 54 | 98 21 63 53 55 75 72 93 7 24 15 25 92 61 67 86 70 10 12 34 65 54 3 5 36
|
||||
Card 93: 77 45 87 88 72 16 51 26 99 23 | 42 36 65 78 52 92 2 44 9 83 58 37 20 99 57 94 3 66 22 93 86 43 1 17 75
|
||||
Card 94: 86 29 2 71 17 60 43 8 11 81 | 92 35 45 12 38 47 22 9 13 11 48 58 63 68 20 96 46 94 85 42 66 25 83 26 57
|
||||
Card 95: 41 71 40 45 4 50 15 94 69 75 | 99 37 47 74 95 19 5 54 20 36 63 23 4 38 28 44 3 83 80 67 93 49 84 6 40
|
||||
Card 96: 16 14 18 42 90 63 96 37 41 76 | 52 22 37 10 25 99 76 73 93 89 1 79 23 85 6 64 16 97 39 55 96 18 77 69 92
|
||||
Card 97: 32 69 95 78 91 75 76 45 43 79 | 8 89 34 49 55 71 3 23 83 2 61 68 31 35 46 87 42 13 45 18 25 47 28 39 86
|
||||
Card 98: 24 37 74 59 60 94 39 40 63 45 | 23 52 8 85 53 70 18 11 46 30 6 83 90 26 24 34 55 71 82 97 37 31 38 68 5
|
||||
Card 99: 98 5 72 42 44 82 65 57 81 54 | 61 95 32 6 37 43 33 35 49 85 10 17 52 71 68 20 83 58 77 36 69 50 96 38 23
|
||||
Card 100: 27 84 51 44 31 19 34 98 77 18 | 44 43 39 5 30 48 74 88 23 22 6 35 59 2 20 92 79 89 72 58 80 11 52 10 57
|
||||
Card 101: 82 38 31 7 27 6 19 20 3 94 | 75 77 95 65 69 15 52 16 34 32 66 9 28 12 22 73 44 61 70 30 88 72 71 45 18
|
||||
Card 102: 16 59 11 8 88 9 48 1 68 90 | 44 12 18 99 73 27 91 82 29 20 63 1 84 57 87 86 3 54 42 85 78 98 51 60 36
|
||||
Card 103: 84 77 29 61 67 60 23 89 19 87 | 48 1 84 7 87 15 32 81 25 67 38 29 23 45 9 89 61 88 55 19 50 58 3 56 64
|
||||
Card 104: 51 4 13 59 15 92 17 65 26 84 | 3 29 85 4 58 66 51 31 2 55 65 54 13 16 24 92 38 26 59 90 67 99 71 33 70
|
||||
Card 105: 55 58 37 46 12 74 62 16 47 26 | 16 64 46 68 47 56 72 73 4 66 80 58 35 12 55 37 74 62 26 60 69 75 13 63 33
|
||||
Card 106: 39 80 37 10 26 47 66 79 12 64 | 34 82 72 10 12 20 40 7 39 25 89 9 26 93 5 1 47 64 79 96 66 18 80 37 13
|
||||
Card 107: 95 28 45 60 91 73 11 23 26 94 | 16 26 8 58 83 90 31 44 80 50 30 11 97 70 89 37 60 38 41 69 55 99 28 65 45
|
||||
Card 108: 39 54 74 12 56 63 13 34 32 40 | 88 70 89 74 87 96 44 58 2 79 34 37 63 16 30 61 41 23 54 95 33 72 73 40 82
|
||||
Card 109: 98 96 81 13 69 5 73 50 76 47 | 20 49 30 80 76 50 31 81 66 74 3 86 12 73 5 64 47 34 15 9 25 13 24 96 79
|
||||
Card 110: 47 43 1 83 76 38 30 45 50 12 | 56 99 38 43 74 68 27 83 55 49 48 78 91 41 51 72 33 76 15 12 22 50 53 26 13
|
||||
Card 111: 51 68 7 71 30 79 14 26 59 66 | 11 16 79 30 26 7 27 18 53 45 68 76 15 87 77 92 57 62 71 14 10 59 66 78 91
|
||||
Card 112: 84 37 54 21 19 30 38 20 94 88 | 40 19 38 21 68 62 48 26 44 12 91 74 20 30 42 89 98 51 7 54 37 58 1 88 64
|
||||
Card 113: 91 41 56 30 18 47 74 45 17 9 | 87 77 68 93 88 56 2 1 69 41 36 9 47 33 13 44 18 25 70 86 45 8 32 91 46
|
||||
Card 114: 83 62 7 35 48 11 37 69 93 84 | 90 24 81 74 17 54 49 65 67 19 55 47 43 14 64 99 33 28 29 98 36 63 57 52 58
|
||||
Card 115: 44 84 39 20 33 59 31 34 8 95 | 31 81 39 7 16 92 35 53 11 97 59 78 10 80 91 62 54 29 65 3 75 47 26 24 63
|
||||
Card 116: 65 74 70 33 44 56 13 10 85 63 | 11 20 54 17 73 41 24 79 18 92 43 76 88 39 95 80 7 75 36 52 94 35 78 31 4
|
||||
Card 117: 34 82 96 60 48 66 6 37 14 98 | 89 64 6 95 11 54 66 17 45 10 83 98 63 15 1 55 52 68 60 94 79 22 85 57 39
|
||||
Card 118: 20 80 46 41 97 57 99 56 64 91 | 48 61 98 11 95 50 62 81 10 79 22 32 37 71 43 19 36 58 29 9 16 64 65 17 96
|
||||
Card 119: 96 42 71 23 45 73 84 94 51 77 | 68 35 22 56 81 54 47 3 77 50 73 51 90 29 82 4 52 8 66 76 15 92 65 24 14
|
||||
Card 120: 56 34 70 85 68 77 79 94 84 73 | 1 82 60 23 78 10 58 29 26 70 93 2 88 87 4 33 44 69 47 12 48 6 54 41 96
|
||||
Card 121: 60 85 78 83 68 26 62 65 91 69 | 97 63 12 4 9 46 5 10 52 99 24 74 40 95 35 79 23 39 45 17 38 85 59 69 89
|
||||
Card 122: 48 51 12 57 61 41 98 22 11 37 | 27 24 95 81 20 73 92 31 32 68 6 63 38 40 83 56 96 62 99 7 30 11 85 75 46
|
||||
Card 123: 47 62 78 39 69 77 2 43 83 36 | 28 89 49 13 40 70 22 16 23 19 57 61 14 51 44 53 91 50 64 66 33 18 8 15 79
|
||||
Card 124: 22 28 12 21 40 57 84 5 87 46 | 67 46 31 64 58 22 76 75 37 82 70 21 87 69 13 3 12 5 84 28 14 57 95 61 40
|
||||
Card 125: 54 74 63 95 39 93 11 81 24 69 | 39 67 71 19 81 84 53 66 51 74 40 63 17 49 95 3 44 11 9 72 91 24 54 56 86
|
||||
Card 126: 49 98 17 94 19 37 69 1 40 20 | 19 90 77 21 94 96 98 34 49 15 28 76 71 22 83 37 1 69 53 12 31 40 17 42 20
|
||||
Card 127: 97 45 16 74 87 96 76 60 29 3 | 87 2 45 66 29 17 72 22 15 74 54 38 3 37 60 76 97 62 49 96 61 51 5 16 25
|
||||
Card 128: 19 79 62 95 67 59 77 5 70 98 | 56 70 21 85 18 68 88 98 79 95 5 83 16 77 91 63 90 19 84 76 37 59 62 67 44
|
||||
Card 129: 94 73 69 51 30 98 1 65 11 45 | 71 5 44 7 52 79 61 99 11 25 10 8 78 33 57 51 75 20 77 9 6 91 4 46 12
|
||||
Card 130: 26 98 8 44 84 7 29 47 70 24 | 13 54 48 6 45 78 83 28 10 2 29 71 16 44 62 89 24 53 46 67 20 43 84 91 88
|
||||
Card 131: 41 27 22 4 39 82 84 68 29 85 | 22 85 16 24 44 25 41 46 23 39 88 9 82 51 90 64 13 80 74 15 4 78 91 94 93
|
||||
Card 132: 32 46 49 99 77 63 37 18 54 80 | 59 65 42 55 47 18 6 32 9 37 85 52 30 94 72 13 77 97 22 46 26 99 90 92 17
|
||||
Card 133: 70 72 53 32 24 71 17 27 39 67 | 9 87 57 49 90 81 40 28 37 8 67 51 18 65 99 16 3 31 73 12 91 44 55 70 60
|
||||
Card 134: 10 65 66 5 88 67 83 75 52 33 | 90 37 65 2 52 69 34 4 45 72 15 1 44 96 94 36 35 76 5 56 63 79 20 12 75
|
||||
Card 135: 71 54 43 41 34 29 16 88 77 44 | 9 33 48 82 52 74 28 10 22 42 15 47 27 5 7 23 56 55 94 49 63 72 61 78 46
|
||||
Card 136: 10 97 3 82 73 87 95 80 35 63 | 20 63 50 79 52 77 2 38 84 83 59 74 51 26 5 46 9 49 19 8 13 36 15 7 23
|
||||
Card 137: 97 53 91 22 90 12 93 23 3 86 | 96 82 24 21 30 51 65 44 50 31 71 34 54 38 36 88 94 48 32 83 99 84 74 27 33
|
||||
Card 138: 8 97 59 46 75 32 65 82 40 44 | 5 81 19 36 54 2 14 39 20 76 3 68 46 50 47 15 96 89 95 41 37 22 99 40 58
|
||||
Card 139: 66 97 45 10 72 63 29 43 84 9 | 61 3 74 56 58 4 15 6 68 55 20 23 80 47 83 44 91 19 31 50 54 73 93 45 53
|
||||
Card 140: 1 9 81 51 8 90 35 61 82 27 | 55 49 88 60 7 93 46 96 70 75 18 37 41 52 36 78 77 80 5 31 76 79 65 99 20
|
||||
Card 141: 93 8 76 47 31 92 18 23 29 34 | 95 67 73 27 9 98 85 70 96 36 87 89 52 63 65 78 37 24 3 90 2 97 19 93 51
|
||||
Card 142: 34 71 94 2 79 18 69 89 44 19 | 3 10 9 62 71 44 37 32 97 85 2 89 48 6 14 95 17 91 5 99 11 33 41 39 22
|
||||
Card 143: 1 91 47 65 14 42 96 12 52 6 | 70 47 45 3 2 54 52 42 65 25 16 38 91 57 72 96 90 36 34 14 79 78 1 39 76
|
||||
Card 144: 32 9 19 63 16 5 81 1 2 49 | 90 19 52 28 23 75 34 57 70 81 1 36 26 2 32 27 63 43 16 4 49 99 9 21 5
|
||||
Card 145: 11 45 95 1 92 20 34 49 70 28 | 66 27 57 51 23 24 81 69 56 80 55 89 1 47 95 32 7 5 14 92 99 73 20 84 65
|
||||
Card 146: 29 84 70 31 61 77 47 89 96 63 | 32 96 52 23 73 79 47 66 67 46 31 26 8 82 15 29 89 84 77 72 11 1 63 97 27
|
||||
Card 147: 90 51 66 50 32 47 39 20 24 46 | 82 49 76 79 57 9 94 84 80 97 51 4 35 83 63 50 69 72 20 58 31 93 7 24 62
|
||||
Card 148: 50 53 44 71 81 41 31 57 88 2 | 41 2 68 51 53 37 25 65 34 24 50 98 95 76 88 69 82 42 81 58 31 11 77 33 21
|
||||
Card 149: 54 32 10 37 35 3 64 4 34 14 | 77 80 53 7 4 29 12 33 69 35 40 32 11 44 83 15 34 2 54 48 30 46 84 14 81
|
||||
Card 150: 68 41 72 13 84 60 20 54 6 90 | 56 54 65 25 5 32 39 34 26 63 16 86 75 92 95 28 78 62 24 8 48 98 83 69 57
|
||||
Card 151: 61 48 8 19 95 28 56 34 68 72 | 96 73 69 11 10 29 91 44 28 39 49 34 17 35 19 90 82 61 40 86 95 31 33 81 46
|
||||
Card 152: 24 65 90 26 97 95 55 68 54 96 | 30 43 70 47 92 96 68 74 26 73 77 97 8 90 86 54 69 17 79 55 16 78 7 38 6
|
||||
Card 153: 8 61 75 62 12 30 66 64 97 6 | 63 70 81 41 47 85 76 11 90 58 45 39 95 97 22 34 78 82 86 7 99 18 35 31 29
|
||||
Card 154: 42 2 81 53 80 36 62 64 89 49 | 99 80 49 84 24 91 93 70 88 30 19 47 79 32 33 18 62 25 8 60 28 92 14 89 42
|
||||
Card 155: 30 76 60 19 12 49 63 33 77 90 | 91 22 96 4 76 47 8 64 58 40 27 49 52 19 63 15 43 73 97 83 61 80 65 34 9
|
||||
Card 156: 75 23 40 88 39 96 9 36 21 51 | 39 70 67 1 92 62 57 5 27 87 78 81 51 28 63 23 56 2 93 84 75 21 29 97 20
|
||||
Card 157: 95 86 3 18 98 85 31 22 71 79 | 6 8 89 88 7 38 39 18 15 40 22 96 87 55 90 80 36 9 20 83 1 34 49 73 98
|
||||
Card 158: 31 36 87 28 57 21 64 35 55 5 | 96 2 78 38 62 32 40 75 14 43 65 71 70 74 61 87 86 1 80 47 23 27 45 67 42
|
||||
Card 159: 52 31 14 72 16 90 94 45 88 29 | 64 87 46 77 51 74 40 5 16 92 95 82 12 6 38 35 72 98 89 11 84 97 99 57 93
|
||||
Card 160: 69 51 53 88 58 54 27 48 78 4 | 70 87 72 32 33 23 94 83 10 73 76 19 91 68 80 89 34 64 58 13 98 5 78 75 52
|
||||
Card 161: 68 34 80 98 81 36 19 61 79 40 | 50 74 25 29 57 12 73 42 83 8 86 30 66 55 20 17 49 84 82 41 46 97 71 23 44
|
||||
Card 162: 94 12 32 66 57 67 97 39 65 7 | 71 23 76 47 49 9 86 58 50 78 88 15 90 43 54 27 37 81 75 13 34 64 87 2 40
|
||||
Card 163: 57 72 66 78 45 23 76 2 24 81 | 58 17 19 44 5 3 2 57 39 82 88 24 47 8 90 31 66 92 68 45 72 78 81 76 23
|
||||
Card 164: 22 57 61 52 83 80 99 37 39 36 | 80 23 67 54 43 99 83 28 37 13 3 55 91 52 51 98 82 27 21 61 22 36 85 57 39
|
||||
Card 165: 62 81 8 72 15 53 36 98 51 22 | 76 6 26 73 65 98 36 72 33 97 5 81 53 69 22 15 14 44 11 8 51 62 13 45 20
|
||||
Card 166: 28 33 40 30 17 74 81 2 88 62 | 4 79 81 96 93 48 62 39 40 78 33 75 26 29 37 30 2 17 31 28 15 88 97 72 74
|
||||
Card 167: 16 1 46 98 76 85 35 91 21 18 | 21 82 94 95 87 66 89 30 64 10 33 93 23 29 34 47 96 20 77 83 81 75 88 46 49
|
||||
Card 168: 50 86 74 64 85 75 80 21 5 46 | 85 74 50 64 96 51 49 55 48 72 5 14 3 39 92 54 46 38 21 86 33 97 61 75 15
|
||||
Card 169: 51 49 66 48 30 10 32 67 60 69 | 42 32 67 43 62 66 10 38 37 60 51 48 9 29 16 49 74 25 36 91 24 69 81 17 30
|
||||
Card 170: 17 24 18 73 64 60 56 38 80 8 | 94 45 30 39 71 12 88 89 61 2 23 40 9 48 42 52 28 96 59 95 19 72 36 81 25
|
||||
Card 171: 38 32 75 85 98 11 17 57 89 56 | 52 57 75 85 32 61 38 98 3 16 60 50 56 34 26 89 77 11 17 49 81 9 20 8 1
|
||||
Card 172: 1 30 98 25 63 39 29 17 58 40 | 98 6 30 85 27 25 69 17 93 47 29 31 63 5 23 56 87 7 91 39 35 58 59 22 38
|
||||
Card 173: 88 59 3 87 21 91 24 4 82 48 | 97 53 67 73 28 66 45 27 36 88 64 99 92 24 26 87 72 96 84 59 85 68 82 49 10
|
||||
Card 174: 56 79 60 1 77 37 83 9 30 92 | 2 15 71 79 60 31 32 58 34 74 42 1 18 5 38 83 97 12 92 86 56 95 19 85 98
|
||||
Card 175: 2 50 25 89 41 75 94 78 95 17 | 72 81 28 48 55 17 69 66 40 91 78 32 27 2 95 13 50 80 15 3 49 94 90 85 25
|
||||
Card 176: 51 22 14 16 1 62 64 84 12 25 | 22 34 91 76 62 38 88 78 35 95 51 45 12 92 61 28 81 16 36 14 8 66 9 10 56
|
||||
Card 177: 83 47 79 45 75 15 44 52 11 88 | 26 5 59 93 83 88 79 44 4 28 32 86 52 89 56 47 97 48 80 15 3 40 98 18 33
|
||||
Card 178: 87 42 52 70 32 7 39 6 9 17 | 17 9 5 45 52 4 70 72 27 3 78 24 50 39 94 87 47 14 42 6 44 95 85 88 7
|
||||
Card 179: 79 87 75 44 93 9 71 16 11 5 | 44 37 11 92 59 50 13 91 36 45 87 77 99 31 68 94 9 62 71 38 8 16 42 55 5
|
||||
Card 180: 18 98 61 58 87 41 51 37 28 79 | 65 32 36 92 49 45 10 93 40 4 67 76 55 42 88 30 75 44 23 71 98 51 14 78 24
|
||||
Card 181: 7 17 80 68 38 36 86 59 75 96 | 68 64 54 8 12 6 88 45 80 98 51 60 53 22 75 50 34 77 29 38 24 9 48 70 36
|
||||
Card 182: 9 57 37 30 78 31 18 40 49 32 | 11 57 40 50 68 22 18 36 74 91 29 52 70 81 75 69 38 7 26 24 33 55 5 34 95
|
||||
Card 183: 36 15 99 95 83 87 22 80 59 31 | 61 99 31 20 55 57 89 34 26 72 39 67 4 22 2 91 24 83 56 44 14 81 49 10 12
|
||||
Card 184: 70 55 77 4 95 51 10 13 75 27 | 70 38 97 88 85 24 48 67 69 89 13 49 28 60 71 10 93 72 84 15 57 98 33 16 20
|
||||
Card 185: 32 53 24 75 26 20 94 4 73 57 | 80 22 1 10 4 71 16 44 87 35 19 72 47 40 59 36 58 2 8 43 23 46 37 34 12
|
||||
Card 186: 93 84 73 24 6 37 72 41 55 75 | 36 71 80 32 2 68 58 47 33 6 70 10 78 19 44 82 39 90 54 91 88 20 28 64 87
|
||||
Card 187: 62 23 40 15 57 69 94 64 60 85 | 63 26 36 8 90 42 58 73 30 28 32 18 50 48 54 88 72 86 13 37 22 5 87 79 77
|
||||
Card 188: 84 42 64 5 88 96 45 91 66 25 | 91 32 93 75 25 2 73 85 88 33 66 58 45 53 28 42 57 40 39 24 5 84 96 78 67
|
||||
Card 189: 59 99 36 6 34 46 98 29 69 53 | 52 17 67 11 98 25 41 34 59 69 46 99 72 92 80 14 26 1 51 76 33 95 36 6 29
|
||||
Card 190: 75 5 85 72 81 96 7 74 21 39 | 32 44 7 87 42 72 86 4 71 81 95 84 85 33 75 78 74 76 96 21 37 58 10 64 73
|
||||
Card 191: 28 83 55 46 56 85 78 21 47 37 | 46 47 82 21 57 29 54 59 78 39 30 33 89 48 83 55 28 85 94 24 72 96 37 56 9
|
||||
Card 192: 72 91 29 35 2 42 71 24 82 55 | 49 29 84 40 69 85 24 48 3 42 61 9 63 37 41 79 11 20 72 14 80 71 16 38 82
|
||||
Card 193: 61 88 76 45 71 29 84 78 81 83 | 85 63 56 2 49 92 47 30 71 43 38 76 60 88 81 84 98 94 8 6 51 58 42 70 61
|
||||
Card 194: 28 18 61 86 27 79 32 48 58 96 | 13 20 95 38 63 46 51 78 90 3 80 15 72 76 88 77 69 24 6 35 28 62 5 36 65
|
||||
Card 195: 96 89 40 50 26 36 86 75 62 10 | 6 5 69 72 82 45 3 33 86 71 97 34 36 91 42 20 80 93 40 35 96 89 17 31 50
|
||||
Card 196: 45 11 82 74 51 55 19 43 24 94 | 63 14 22 75 94 29 19 39 13 8 82 32 76 41 53 43 54 91 11 17 62 21 71 42 86
|
||||
Card 197: 20 64 71 4 50 90 49 17 8 6 | 65 92 6 60 94 54 56 33 80 75 69 15 49 71 26 81 67 37 74 11 20 25 43 85 19
|
||||
Card 198: 28 11 15 25 97 2 22 31 29 73 | 14 35 15 87 81 54 49 2 20 79 44 96 38 94 55 97 17 86 65 46 32 21 67 58 27
|
||||
Card 199: 50 83 4 30 82 92 76 11 55 19 | 47 50 57 53 5 14 28 85 46 88 94 51 13 38 3 89 66 45 87 24 31 96 69 73 44
|
||||
Card 200: 55 23 78 25 87 33 36 80 79 38 | 99 30 52 4 85 95 66 26 28 91 20 45 72 68 8 35 92 86 93 43 65 97 14 50 44
|
||||
Card 201: 33 75 55 46 25 63 76 37 1 73 | 68 64 22 99 12 56 43 28 44 80 91 65 78 27 71 32 95 29 59 36 45 60 77 62 82
|
||||
Card 202: 66 29 75 28 68 42 98 21 82 99 | 23 92 38 44 45 12 6 4 17 64 67 60 36 79 46 58 14 73 71 72 81 49 13 2 30
|
197
2023/aoc_puzzle_cache/day_05
Normal file
197
2023/aoc_puzzle_cache/day_05
Normal file
|
@ -0,0 +1,197 @@
|
|||
seeds: 3127166940 109160474 3265086325 86449584 1581539098 205205726 3646327835 184743451 2671979893 17148151 305618297 40401857 2462071712 203075200 358806266 131147346 1802185716 538526744 635790399 705979250
|
||||
|
||||
seed-to-soil map:
|
||||
931304316 1786548802 232453384
|
||||
3500539319 2322065235 6421609
|
||||
496396007 147739714 266329192
|
||||
3169724489 768672891 39526579
|
||||
3689153715 1361862036 346985
|
||||
1936948751 3328259881 542896984
|
||||
3209251068 3154345676 173914205
|
||||
1163757700 2814318523 24125066
|
||||
2484210664 1362209021 231487475
|
||||
3991904247 2133571422 188493813
|
||||
1187882766 4045525873 83717994
|
||||
861951350 3084992710 69352966
|
||||
2715698139 2838443589 43714032
|
||||
3830303258 4025104215 20421658
|
||||
768672891 1268583577 93278459
|
||||
4180398060 2019002186 114569236
|
||||
3689500700 1593696496 10659519
|
||||
1271600760 808199470 460384107
|
||||
166497091 526585653 102729094
|
||||
3700160219 3894961176 130143039
|
||||
2966889400 2882157621 202835089
|
||||
147739714 414068906 18757377
|
||||
3850724916 4133608796 141179331
|
||||
2759412171 2328486844 183672918
|
||||
2479845735 4129243867 4364929
|
||||
3480360150 4274788127 20179169
|
||||
402636637 432826283 93759370
|
||||
3383165273 2717123646 97194877
|
||||
3506960928 1604356015 182192787
|
||||
269226185 629314747 133410452
|
||||
2943085089 3871156865 23804311
|
||||
1731984867 2512159762 204963884
|
||||
|
||||
soil-to-fertilizer map:
|
||||
3368312743 826425240 243745914
|
||||
1045038113 3682756471 174490549
|
||||
3931158487 1530223690 363808809
|
||||
1219528662 2460222182 131099318
|
||||
3020480207 1894032499 63879875
|
||||
121779694 248970341 36319877
|
||||
1993634034 2662348686 86667553
|
||||
3612058657 1323325837 196530127
|
||||
1531175223 2604354699 57993987
|
||||
158099571 121779694 127190647
|
||||
1867147432 3317666386 126486602
|
||||
2080301587 2768963716 548702670
|
||||
1402482267 1070171154 21180243
|
||||
2959841028 4051272297 60639179
|
||||
834756529 1966243663 128160296
|
||||
3911211010 2749016239 19947477
|
||||
962916825 3857247020 82121288
|
||||
2629004257 3444152988 238603483
|
||||
826425240 1957912374 8331289
|
||||
1350627980 3939368308 51854287
|
||||
1589169210 4214533702 80433594
|
||||
2867607740 2094403959 92233288
|
||||
1669602804 1125781209 197544628
|
||||
3084360082 1519855964 10367726
|
||||
1483712212 1091351397 34429812
|
||||
3094727808 2186637247 273584935
|
||||
1423662510 3991222595 60049702
|
||||
3808588784 4111911476 102622226
|
||||
1518142024 2591321500 13033199
|
||||
|
||||
fertilizer-to-water map:
|
||||
206818393 1973789958 18543481
|
||||
2641351404 1992333439 41420268
|
||||
58400970 2574944960 107826712
|
||||
3710426911 4065366707 42793360
|
||||
4217161704 4274048011 20919285
|
||||
1926695368 705931711 328031436
|
||||
1449580741 1210970895 50549447
|
||||
907984567 1421828853 15115545
|
||||
769748018 1108192216 102778679
|
||||
451427938 35457870 38201654
|
||||
2254726804 2033892789 137829519
|
||||
923239194 1513967644 270588891
|
||||
3753220271 4108160067 165887944
|
||||
499804857 310274559 109862756
|
||||
3061525238 3535532059 426476055
|
||||
1193828085 73659524 196024324
|
||||
872526697 0 35457870
|
||||
1766386857 1261520342 160308511
|
||||
4057593930 3283950856 159567774
|
||||
1389852409 646203379 59728332
|
||||
3919108215 3962008114 103358593
|
||||
1577153434 1784556535 189233423
|
||||
4022466808 3443518630 35127122
|
||||
489629592 1098016951 10175265
|
||||
923100112 2033753707 139082
|
||||
2392556323 2390203683 158894869
|
||||
1500130188 1436944398 77023246
|
||||
2577297600 1033963147 64053804
|
||||
609667613 2171722308 160080405
|
||||
3488001293 3061525238 222425618
|
||||
2551451192 2549098552 25846408
|
||||
4238080989 3478645752 56886307
|
||||
166227682 269683848 40590711
|
||||
0 2331802713 58400970
|
||||
225361874 420137315 226066064
|
||||
|
||||
water-to-light map:
|
||||
1833244152 0 764535859
|
||||
212138399 2132863085 224047237
|
||||
445686952 1600446740 163005122
|
||||
3322180377 2914685303 488586806
|
||||
2739726430 3712513349 582453947
|
||||
3946546331 3589340640 8839399
|
||||
1441711040 799272484 245821386
|
||||
1038755613 1763451862 6623730
|
||||
608692074 1587251997 13194743
|
||||
701103180 2356910322 39153476
|
||||
1687532426 1045093870 145711726
|
||||
2597780011 764535859 34736625
|
||||
740256656 1490869662 54307168
|
||||
0 1920724686 212138399
|
||||
2632516636 1545176830 9229765
|
||||
668257778 1554406595 32845402
|
||||
3955385730 2739726430 39179725
|
||||
4180633986 3598180039 114333310
|
||||
3810767183 2778906155 135779148
|
||||
1291061946 1770075592 150649094
|
||||
436185636 1481368346 9501316
|
||||
1045379343 2396063798 245682603
|
||||
794563824 1237176557 244191789
|
||||
621886817 1190805596 46370961
|
||||
3994565455 3403272109 186068531
|
||||
|
||||
light-to-temperature map:
|
||||
432141642 1268486741 19474646
|
||||
3617581823 3276436954 357008111
|
||||
3505110084 3786131308 49942802
|
||||
0 1287961387 432141642
|
||||
3096011130 1808659179 409098954
|
||||
1347993824 2675880000 161612192
|
||||
3019335150 3199760974 76675980
|
||||
3555052886 3137232037 62528937
|
||||
2778092757 1720103029 88556150
|
||||
451616288 2217758133 458121867
|
||||
1509606016 0 1268486741
|
||||
909738155 3836074110 138515824
|
||||
1048253979 2837492192 299739845
|
||||
2866648907 3633445065 152686243
|
||||
|
||||
temperature-to-humidity map:
|
||||
646729740 1519504972 559297346
|
||||
1894539176 2990410634 44298872
|
||||
232257988 972432123 414471752
|
||||
2277879451 278205785 108711195
|
||||
1775790220 132298732 118748956
|
||||
3371687162 2663455233 326955401
|
||||
1612056920 272509895 5695890
|
||||
1208383109 3703499740 147415518
|
||||
4070380190 4053129082 69974785
|
||||
4155541210 3305585510 139426086
|
||||
81956384 386916980 150301604
|
||||
3987543096 896459472 75972651
|
||||
2148980475 1386903875 128898976
|
||||
1617752810 3445011596 154599732
|
||||
4063515747 2078802318 6864443
|
||||
2392568787 3599611328 101532389
|
||||
2386590646 4123103867 5978141
|
||||
2494101176 2122546980 187027686
|
||||
2681128862 2085666761 36880219
|
||||
4140354975 2648268998 15186235
|
||||
1772352542 3051742077 3437678
|
||||
1355798627 3850915258 202213824
|
||||
3720104770 3055179755 250405755
|
||||
3032992830 2309574666 338694332
|
||||
1206027086 3701143717 2356023
|
||||
1938838048 537218584 44257139
|
||||
1558012451 81956384 50342348
|
||||
3970510525 3034709506 17032571
|
||||
1608354799 1515802851 3702121
|
||||
1983095187 4129082008 165885288
|
||||
3698642563 251047688 21462207
|
||||
2718009081 581475723 314983749
|
||||
|
||||
humidity-to-location map:
|
||||
971626884 4275486551 19480745
|
||||
1218249913 2090555906 502249162
|
||||
2914848039 2902831882 224865747
|
||||
3341591733 2819947352 82884530
|
||||
991107629 2592805068 227142284
|
||||
3424476263 606585628 95279547
|
||||
4279176998 2064757318 10971709
|
||||
3139713786 4068790015 201877947
|
||||
606585628 701865175 365041256
|
||||
3534582689 3291885426 744594309
|
||||
1916997152 1066906431 997850887
|
||||
1752809355 3127697629 164187797
|
||||
1720499075 4036479735 32310280
|
||||
4290148707 4270667962 4818589
|
||||
3519755810 2075729027 14826879
|
2
2023/aoc_puzzle_cache/day_06
Normal file
2
2023/aoc_puzzle_cache/day_06
Normal file
|
@ -0,0 +1,2 @@
|
|||
Time: 53 91 67 68
|
||||
Distance: 250 1330 1081 1025
|
1000
2023/aoc_puzzle_cache/day_07
Normal file
1000
2023/aoc_puzzle_cache/day_07
Normal file
File diff suppressed because it is too large
Load diff
756
2023/aoc_puzzle_cache/day_08
Normal file
756
2023/aoc_puzzle_cache/day_08
Normal file
|
@ -0,0 +1,756 @@
|
|||
LLRLRRRLLLRLRRLRRRLRLRRLRLRLRRRLRRRLRLRLRRLLRRRLRRLRRLLRLRRRLRLRLLRRRLLRRRLRLRRRLRRRLRRRLLLRRRLRRLRRLRLRRLRLRRRLRLRRLRLRLRRRLRLLLRRRLLLRLRRRLRLRRLRLRLRLRRLRRLRRLRLRRRLRRRLRRLRRRLRRLRRLRRRLLRLRRLLLRRLRRLRLRLLLRRLRRLRRRLRRLLRLRRRLRRRLRRLRRLRLRRLRLRRRLRRLRRRLLRRRLRLRLLLRRRLLLRRLLRRLRLRRLRLLLRRRR
|
||||
|
||||
BNR = (DLB, QNM)
|
||||
CTN = (NVJ, DRS)
|
||||
VHS = (XDL, LVL)
|
||||
MLQ = (VXK, CJK)
|
||||
CNX = (CTN, DRK)
|
||||
MVD = (SRT, SRT)
|
||||
LLM = (VKX, VTT)
|
||||
GDS = (PJT, DBD)
|
||||
QFF = (BQR, HCT)
|
||||
QNP = (NXM, MRQ)
|
||||
SKT = (GGD, BXR)
|
||||
KND = (JKT, VKS)
|
||||
NSJ = (VLH, HMK)
|
||||
TKV = (SMR, BVG)
|
||||
STR = (KFR, NQK)
|
||||
VDL = (PRB, KLG)
|
||||
DBN = (NPF, VDL)
|
||||
PCQ = (CNL, QBX)
|
||||
PQS = (KKJ, GNV)
|
||||
JQM = (DBD, PJT)
|
||||
FHL = (SSL, PLN)
|
||||
KVT = (KBG, SKT)
|
||||
CDR = (HCM, DGT)
|
||||
MKT = (RGP, CQR)
|
||||
MKK = (RMJ, DBK)
|
||||
AAA = (TFQ, VSD)
|
||||
QHL = (JBG, RNL)
|
||||
LXJ = (HPJ, QXC)
|
||||
QLT = (HQL, XDP)
|
||||
FHN = (MMF, CKL)
|
||||
SHF = (FHQ, FHG)
|
||||
MTJ = (SJT, KFG)
|
||||
DPJ = (SVF, HPV)
|
||||
FPX = (BNR, RSG)
|
||||
CVL = (XRS, HHM)
|
||||
NSK = (DBN, SBK)
|
||||
QNF = (PQK, RJC)
|
||||
KKJ = (BVJ, NTK)
|
||||
XNP = (KPD, QTF)
|
||||
XTJ = (HNS, XBV)
|
||||
KQT = (BHG, KTL)
|
||||
BPL = (QRS, PJB)
|
||||
JSX = (LCN, VQK)
|
||||
MLC = (JLF, JLF)
|
||||
QBX = (VVX, TNJ)
|
||||
PGP = (CMN, SRR)
|
||||
HRX = (HFM, JDB)
|
||||
GGK = (SQS, LLM)
|
||||
HVV = (VRG, JNJ)
|
||||
RND = (HHM, XRS)
|
||||
RPQ = (RMQ, JMH)
|
||||
LRF = (QBX, CNL)
|
||||
GJN = (TLF, LNB)
|
||||
CTJ = (HPT, MBC)
|
||||
HSR = (DKT, GFK)
|
||||
KTL = (PMJ, CRN)
|
||||
BDF = (LRF, PCQ)
|
||||
PFS = (XBP, NQC)
|
||||
VRQ = (KBL, VVD)
|
||||
QRR = (VNR, LGB)
|
||||
BNJ = (PVP, HPC)
|
||||
PQC = (GPT, HFK)
|
||||
CVX = (KKF, PFS)
|
||||
BTQ = (BLC, VGC)
|
||||
SDG = (LXT, QRR)
|
||||
RJM = (FNN, QJJ)
|
||||
JRF = (NSK, LFQ)
|
||||
DFB = (DKJ, MGR)
|
||||
XSC = (CFX, DHF)
|
||||
JKH = (QRS, PJB)
|
||||
NQQ = (NCR, CGS)
|
||||
JHV = (CTJ, SLC)
|
||||
LBB = (NVS, QJG)
|
||||
SBK = (VDL, NPF)
|
||||
HLD = (LXJ, XQB)
|
||||
XCR = (DJM, PPS)
|
||||
KPD = (GDF, KJL)
|
||||
HKL = (VQK, LCN)
|
||||
JKT = (BLH, CCN)
|
||||
SRQ = (XFS, QHQ)
|
||||
LXT = (VNR, LGB)
|
||||
PJT = (TTC, QLT)
|
||||
VNC = (BQR, HCT)
|
||||
XNQ = (TDD, QFZ)
|
||||
FDN = (MBR, DVG)
|
||||
JBL = (MNK, VPC)
|
||||
NRX = (PVH, PVH)
|
||||
TTK = (VQQ, FSH)
|
||||
XSJ = (BFQ, RDK)
|
||||
VTP = (NXM, MRQ)
|
||||
BCP = (MLC, PRC)
|
||||
JQS = (LRF, PCQ)
|
||||
QJC = (RJR, CNX)
|
||||
KSP = (MHL, QJH)
|
||||
KPN = (TKL, HKQ)
|
||||
LCN = (KXQ, FBF)
|
||||
GLG = (XVX, CQQ)
|
||||
JTM = (FJH, DDP)
|
||||
RQH = (PHJ, PKD)
|
||||
TVV = (HJV, JGJ)
|
||||
NKQ = (KKK, DSB)
|
||||
GXS = (PVP, HPC)
|
||||
SPS = (HVX, CFR)
|
||||
GXD = (MFV, DMH)
|
||||
QXJ = (HVT, MSF)
|
||||
PTP = (MTT, VFN)
|
||||
RMB = (DXR, RKJ)
|
||||
NTN = (JMH, RMQ)
|
||||
GJV = (JDH, NQQ)
|
||||
JFV = (PKD, PHJ)
|
||||
BMB = (MLB, QJL)
|
||||
DFC = (GFH, SMN)
|
||||
FFK = (XNT, JSQ)
|
||||
PHJ = (VVL, RMS)
|
||||
QRS = (RMC, VCJ)
|
||||
PNX = (BXH, JLS)
|
||||
GNB = (VHB, HFG)
|
||||
QJN = (LXX, MRV)
|
||||
MDM = (VCR, JHD)
|
||||
BSR = (LXG, LST)
|
||||
HXJ = (SRQ, HND)
|
||||
HCT = (TTX, RNP)
|
||||
HJV = (KCQ, QCB)
|
||||
VXK = (FFK, JVQ)
|
||||
GNP = (KQX, TSS)
|
||||
RKD = (FCR, BXX)
|
||||
FXP = (BXX, FCR)
|
||||
FSH = (QSB, FPX)
|
||||
QJJ = (DVB, GLR)
|
||||
XPC = (KKJ, GNV)
|
||||
HVQ = (NMR, DRN)
|
||||
RSG = (DLB, QNM)
|
||||
JSQ = (HMS, RJH)
|
||||
FHS = (DHS, CDT)
|
||||
JQB = (GQR, GVT)
|
||||
QXC = (KTG, TTD)
|
||||
JTL = (QLS, XGR)
|
||||
VNR = (QFF, VNC)
|
||||
PHG = (FTJ, TVR)
|
||||
PMJ = (PJV, PJV)
|
||||
SRJ = (LCV, JCL)
|
||||
MDF = (XBB, QTH)
|
||||
NDS = (SRF, RQP)
|
||||
RHP = (XQQ, SHF)
|
||||
NBL = (PXH, KGQ)
|
||||
JGS = (HFC, FJJ)
|
||||
QRD = (RGF, FMN)
|
||||
NDX = (SHX, HBB)
|
||||
LXG = (XMJ, RQS)
|
||||
NGH = (RLX, CDR)
|
||||
DJB = (FLC, RJS)
|
||||
TTD = (MKK, BRS)
|
||||
XVZ = (QSX, DJF)
|
||||
BQV = (NQQ, JDH)
|
||||
TTC = (HQL, XDP)
|
||||
DHF = (BSJ, MCL)
|
||||
VLV = (LSH, KTF)
|
||||
QLS = (TCX, BXB)
|
||||
QCT = (HFK, GPT)
|
||||
XDP = (JQX, SVH)
|
||||
LQL = (XCR, GCH)
|
||||
MXH = (VHB, HFG)
|
||||
HQB = (DMN, TNR)
|
||||
CKL = (VVR, PSF)
|
||||
KVG = (KMF, CRS)
|
||||
MXT = (TLX, FQN)
|
||||
VTV = (JHV, FDL)
|
||||
TTT = (KPD, QTF)
|
||||
PLN = (LMM, KCF)
|
||||
VCJ = (QHM, PTR)
|
||||
VCX = (XKM, RBG)
|
||||
RDK = (VDG, RFD)
|
||||
JCC = (QJL, MLB)
|
||||
RFD = (GXS, BNJ)
|
||||
RQP = (NQH, PKG)
|
||||
GST = (PNB, DVN)
|
||||
KFR = (JBP, GLM)
|
||||
PPS = (XXC, FDG)
|
||||
VJL = (PGH, PGH)
|
||||
TVR = (LJN, QJV)
|
||||
SLR = (BDH, QJC)
|
||||
SMM = (KGR, TTK)
|
||||
HGH = (QKX, KJP)
|
||||
GDD = (PQS, XPC)
|
||||
RPB = (TLD, LPB)
|
||||
KKF = (XBP, NQC)
|
||||
SCB = (MBR, MBR)
|
||||
PPC = (LXT, QRR)
|
||||
TFT = (XPK, SHP)
|
||||
XQQ = (FHG, FHQ)
|
||||
PVH = (TDD, TDD)
|
||||
SJT = (QNP, VTP)
|
||||
RRS = (JPC, JQB)
|
||||
CMR = (JQM, GDS)
|
||||
KHC = (BDF, JQS)
|
||||
BLH = (KXD, SKF)
|
||||
BFN = (LPB, TLD)
|
||||
LSH = (NTN, RPQ)
|
||||
NMN = (DRN, NMR)
|
||||
QJL = (VHG, VVC)
|
||||
XNJ = (SMN, GFH)
|
||||
RGF = (HLD, RVL)
|
||||
NGF = (PGQ, NLV)
|
||||
RMX = (LXX, MRV)
|
||||
QDK = (BCP, JNX)
|
||||
LVL = (SPS, KQJ)
|
||||
QFP = (SSV, QCP)
|
||||
DNT = (CQX, XSJ)
|
||||
MCL = (DCV, QBR)
|
||||
HNJ = (PRQ, KKR)
|
||||
QNM = (DBX, FNP)
|
||||
XLQ = (TKL, HKQ)
|
||||
JTD = (HXL, VTV)
|
||||
KXD = (XSH, PNX)
|
||||
THC = (JRF, FSV)
|
||||
VCR = (FXP, RKD)
|
||||
KKK = (DNG, DNM)
|
||||
PKQ = (BLC, VGC)
|
||||
PGQ = (DNT, PNK)
|
||||
DMH = (NJG, RVM)
|
||||
VVL = (JLT, GQH)
|
||||
RFN = (QHL, CXS)
|
||||
RKR = (PRQ, KKR)
|
||||
XNT = (HMS, RJH)
|
||||
JLL = (RTH, BNG)
|
||||
HCM = (TDX, VGM)
|
||||
NVH = (HNS, XBV)
|
||||
HFM = (MST, PTP)
|
||||
LJF = (XLR, KHC)
|
||||
GSV = (JLG, QQC)
|
||||
STF = (KGD, NSJ)
|
||||
DHB = (FHL, GPM)
|
||||
FJC = (QCL, HGP)
|
||||
BPN = (MVD, LQF)
|
||||
KSR = (JPC, JQB)
|
||||
KGD = (VLH, VLH)
|
||||
DPN = (TFT, LGT)
|
||||
QHQ = (QPV, JLL)
|
||||
FJH = (XFV, NMV)
|
||||
QBP = (XXJ, KVG)
|
||||
PNK = (CQX, XSJ)
|
||||
TBN = (SPT, JCV)
|
||||
DVG = (HRX, VGZ)
|
||||
NXH = (JTD, SCS)
|
||||
DDD = (BJC, JTM)
|
||||
HFC = (SDG, PPC)
|
||||
QKX = (XPM, QRP)
|
||||
GFK = (GCL, HGH)
|
||||
LMM = (MPD, BMK)
|
||||
PKG = (HLC, XSD)
|
||||
MLB = (VVC, VHG)
|
||||
BMK = (JKH, BPL)
|
||||
HBN = (XTT, LXV)
|
||||
QMN = (JTR, PHF)
|
||||
TLM = (DHS, CDT)
|
||||
PPZ = (HCG, NGT)
|
||||
VPK = (QJD, KCK)
|
||||
BRS = (RMJ, DBK)
|
||||
RQS = (XNP, TTT)
|
||||
NNM = (RRR, NDS)
|
||||
SRR = (HBN, QDP)
|
||||
TTN = (XLQ, KPN)
|
||||
LDL = (QXJ, FQP)
|
||||
PQT = (PGH, PPZ)
|
||||
BLM = (LGT, TFT)
|
||||
FMQ = (BTQ, PKQ)
|
||||
KQD = (TSS, KQX)
|
||||
XLR = (BDF, JQS)
|
||||
PKL = (LMK, FJS)
|
||||
KCF = (MPD, BMK)
|
||||
MHD = (KBG, SKT)
|
||||
RMQ = (THC, LFF)
|
||||
QPM = (JGF, TDH)
|
||||
QCP = (VPB, PKL)
|
||||
LCV = (LCJ, XQM)
|
||||
BCD = (PKQ, BTQ)
|
||||
RBG = (MLQ, STS)
|
||||
LVT = (DKT, GFK)
|
||||
DKJ = (LKN, CBS)
|
||||
DKB = (HDL, QFP)
|
||||
HPV = (RMX, QJN)
|
||||
MDT = (RCH, CMR)
|
||||
CFQ = (LXG, LST)
|
||||
XDV = (FQN, TLX)
|
||||
KXQ = (VRH, VRQ)
|
||||
CVB = (DSB, KKK)
|
||||
DBX = (DHB, QHF)
|
||||
DSB = (DNM, DNG)
|
||||
CFX = (BSJ, MCL)
|
||||
KJL = (QDK, VKJ)
|
||||
RTP = (KGQ, PXH)
|
||||
FJS = (QTR, FJC)
|
||||
HGJ = (VKQ, DCR)
|
||||
NXM = (LNC, HXR)
|
||||
CQX = (BFQ, RDK)
|
||||
BVV = (NQB, GMG)
|
||||
RRL = (DHF, CFX)
|
||||
JMH = (THC, LFF)
|
||||
DVH = (CCV, DLR)
|
||||
JFX = (RTB, XBH)
|
||||
GLR = (NXH, BLP)
|
||||
RMC = (QHM, PTR)
|
||||
NQB = (SXX, FSL)
|
||||
CTB = (CKS, XQD)
|
||||
VSJ = (QCT, PQC)
|
||||
NCR = (CNR, VQX)
|
||||
JTR = (MDT, LFL)
|
||||
DGT = (TDX, VGM)
|
||||
KFM = (CTB, LFG)
|
||||
SQG = (FPN, NHP)
|
||||
RTB = (XVQ, MDF)
|
||||
DSC = (GXD, PLD)
|
||||
PRB = (XDQ, XLJ)
|
||||
LSV = (LCP, VHS)
|
||||
CCQ = (MLM, TKV)
|
||||
DRS = (DPN, BLM)
|
||||
RVL = (LXJ, XQB)
|
||||
DKT = (HGH, GCL)
|
||||
GCP = (LCP, VHS)
|
||||
MPD = (JKH, BPL)
|
||||
BVJ = (PCK, HMC)
|
||||
LST = (XMJ, RQS)
|
||||
LRB = (NGH, BVD)
|
||||
MNM = (JGJ, HJV)
|
||||
QSB = (BNR, RSG)
|
||||
BVB = (BGT, CLM)
|
||||
NMV = (JCC, BMB)
|
||||
HVX = (GDD, BJS)
|
||||
FBL = (BJC, JTM)
|
||||
SFR = (RGF, FMN)
|
||||
KCK = (JRD, NFC)
|
||||
FTJ = (LJN, QJV)
|
||||
VSD = (SBB, GST)
|
||||
MSF = (RCJ, NDX)
|
||||
CNL = (VVX, TNJ)
|
||||
CLH = (JBM, JSB)
|
||||
JRQ = (TGH, LFN)
|
||||
HCV = (QPM, FXJ)
|
||||
NMR = (RRL, XSC)
|
||||
BGT = (RJM, NMQ)
|
||||
NQC = (KND, CRG)
|
||||
BXV = (KSP, MRN)
|
||||
SCS = (HXL, VTV)
|
||||
JCL = (LCJ, XQM)
|
||||
JTQ = (NLV, PGQ)
|
||||
TSS = (LVT, HSR)
|
||||
CDT = (KNG, VLV)
|
||||
QBR = (QMN, XXH)
|
||||
QJD = (NFC, JRD)
|
||||
JDH = (CGS, NCR)
|
||||
SLC = (MBC, HPT)
|
||||
BLC = (BSR, CFQ)
|
||||
JJN = (BCD, FMQ)
|
||||
DXR = (SCB, SCB)
|
||||
CRG = (JKT, VKS)
|
||||
DNG = (KXS, FQX)
|
||||
GCL = (QKX, KJP)
|
||||
SPT = (KSK, KSK)
|
||||
PQK = (XTJ, NVH)
|
||||
NPF = (PRB, KLG)
|
||||
RCJ = (HBB, SHX)
|
||||
GCH = (PPS, DJM)
|
||||
QRA = (DJF, QSX)
|
||||
DJF = (MDM, LKV)
|
||||
RRR = (SRF, RQP)
|
||||
TLD = (RVV, HGJ)
|
||||
LNC = (XGJ, VSJ)
|
||||
VVD = (TTN, PRD)
|
||||
TNJ = (XLF, CLG)
|
||||
JNJ = (LVK, LBB)
|
||||
GXH = (NRX, TNT)
|
||||
DFR = (PGP, TCC)
|
||||
RCH = (JQM, GDS)
|
||||
FMN = (HLD, RVL)
|
||||
TFQ = (GST, SBB)
|
||||
NSQ = (FQP, QXJ)
|
||||
LFF = (JRF, FSV)
|
||||
HVT = (RCJ, NDX)
|
||||
SHR = (KFM, TVX)
|
||||
SQS = (VKX, VTT)
|
||||
PHF = (LFL, MDT)
|
||||
PJV = (SPT, SPT)
|
||||
LFG = (CKS, XQD)
|
||||
HND = (QHQ, XFS)
|
||||
FFD = (BGT, CLM)
|
||||
KMF = (LQL, FHT)
|
||||
XVQ = (XBB, QTH)
|
||||
JCV = (KSK, ZZZ)
|
||||
JVQ = (JSQ, XNT)
|
||||
DHS = (KNG, VLV)
|
||||
SKF = (PNX, XSH)
|
||||
BJC = (DDP, FJH)
|
||||
GGD = (RQH, JFV)
|
||||
JBP = (BVB, FFD)
|
||||
JRJ = (NBL, RTP)
|
||||
HMK = (LJF, QQZ)
|
||||
JBG = (GGK, NHR)
|
||||
XQB = (QXC, HPJ)
|
||||
NTK = (PCK, HMC)
|
||||
RTH = (BQV, GJV)
|
||||
LFQ = (DBN, SBK)
|
||||
KKR = (RJB, PKR)
|
||||
DRK = (DRS, NVJ)
|
||||
SHP = (SMM, SSN)
|
||||
KCQ = (LSV, GCP)
|
||||
KTG = (BRS, MKK)
|
||||
GJT = (DPJ, KTV)
|
||||
JPN = (DMN, TNR)
|
||||
HNS = (GRL, TKH)
|
||||
KBG = (GGD, BXR)
|
||||
RVM = (QNF, MQF)
|
||||
KQA = (XLR, KHC)
|
||||
LNB = (MXT, XDV)
|
||||
KGR = (VQQ, FSH)
|
||||
BXR = (RQH, JFV)
|
||||
MNK = (XNJ, DFC)
|
||||
CQR = (SFR, QRD)
|
||||
MTT = (SRB, JBL)
|
||||
CQQ = (QKG, GSV)
|
||||
MTH = (BHG, KTL)
|
||||
MBC = (FXS, CCQ)
|
||||
CLM = (RJM, NMQ)
|
||||
VGZ = (JDB, HFM)
|
||||
PRC = (JLF, NKV)
|
||||
LPB = (HGJ, RVV)
|
||||
QPV = (BNG, RTH)
|
||||
ZZZ = (VSD, TFQ)
|
||||
VKS = (BLH, CCN)
|
||||
FDG = (MTL, RMB)
|
||||
FQN = (NRN, LRB)
|
||||
MGR = (LKN, CBS)
|
||||
GMG = (SXX, FSL)
|
||||
BVG = (BVV, CSL)
|
||||
VQX = (JXS, JRJ)
|
||||
DFA = (HFM, JDB)
|
||||
RMS = (GQH, JLT)
|
||||
XFV = (BMB, JCC)
|
||||
BLP = (SCS, JTD)
|
||||
HST = (DQH, GVC)
|
||||
JLF = (VJL, VJL)
|
||||
BQR = (TTX, RNP)
|
||||
FDL = (SLC, CTJ)
|
||||
HSQ = (SHR, VFR)
|
||||
FPN = (DJB, MBX)
|
||||
DMN = (GJT, HRJ)
|
||||
MFV = (NJG, RVM)
|
||||
VPB = (FJS, LMK)
|
||||
KSK = (TFQ, VSD)
|
||||
VRH = (VVD, KBL)
|
||||
VTT = (QBP, HVJ)
|
||||
PXH = (RND, CVL)
|
||||
JLT = (PKV, GLG)
|
||||
DVB = (BLP, NXH)
|
||||
QTH = (FHN, JFF)
|
||||
SSV = (VPB, PKL)
|
||||
PTR = (KQD, GNP)
|
||||
XRS = (JPN, HQB)
|
||||
NLV = (PNK, DNT)
|
||||
KQX = (HSR, LVT)
|
||||
VPC = (XNJ, DFC)
|
||||
PJB = (VCJ, RMC)
|
||||
FHQ = (BHV, SBM)
|
||||
NRN = (BVD, NGH)
|
||||
TLF = (XDV, MXT)
|
||||
MMF = (PSF, VVR)
|
||||
QCB = (GCP, LSV)
|
||||
RGP = (SFR, QRD)
|
||||
DBA = (NGT, HCG)
|
||||
JNV = (VRG, JNJ)
|
||||
JLG = (GJN, LKQ)
|
||||
DDP = (NMV, XFV)
|
||||
BHV = (CFJ, GRP)
|
||||
HXL = (JHV, FDL)
|
||||
JDB = (PTP, MST)
|
||||
HFK = (DTK, PLF)
|
||||
KQJ = (HVX, CFR)
|
||||
MHL = (PMR, DKB)
|
||||
GVL = (RBG, XKM)
|
||||
TNR = (HRJ, GJT)
|
||||
FQP = (MSF, HVT)
|
||||
FQX = (KJT, SRJ)
|
||||
FJJ = (SDG, PPC)
|
||||
LCJ = (XQS, STF)
|
||||
SVF = (RMX, QJN)
|
||||
CXS = (JBG, RNL)
|
||||
NJP = (FPN, NHP)
|
||||
TNH = (KSP, MRN)
|
||||
CSL = (NQB, GMG)
|
||||
NFC = (FBL, DDD)
|
||||
QFZ = (DSC, DKD)
|
||||
XQS = (KGD, KGD)
|
||||
BJS = (XPC, PQS)
|
||||
JGJ = (KCQ, QCB)
|
||||
XSD = (TLM, FHS)
|
||||
QHM = (KQD, GNP)
|
||||
XBP = (KND, CRG)
|
||||
KFG = (QNP, VTP)
|
||||
JRL = (FXJ, QPM)
|
||||
XSH = (BXH, JLS)
|
||||
BDH = (CNX, RJR)
|
||||
GNV = (BVJ, NTK)
|
||||
SBM = (GRP, CFJ)
|
||||
BXH = (JGS, XRM)
|
||||
GQH = (GLG, PKV)
|
||||
FNP = (DHB, QHF)
|
||||
TDH = (HGM, MTJ)
|
||||
VKX = (HVJ, QBP)
|
||||
PLF = (BJH, DFB)
|
||||
FSL = (HCV, JRL)
|
||||
VQK = (KXQ, FBF)
|
||||
BJJ = (HND, SRQ)
|
||||
SRT = (DJF, QSX)
|
||||
LGT = (XPK, SHP)
|
||||
CFR = (BJS, GDD)
|
||||
LFL = (CMR, RCH)
|
||||
SHX = (HXJ, BJJ)
|
||||
VHG = (VFJ, RHP)
|
||||
BXX = (BXV, TNH)
|
||||
JBM = (HNL, JFX)
|
||||
CKS = (GBT, CVX)
|
||||
HVJ = (KVG, XXJ)
|
||||
CMN = (QDP, HBN)
|
||||
HRJ = (DPJ, KTV)
|
||||
FSV = (NSK, LFQ)
|
||||
FBF = (VRH, VRQ)
|
||||
GRP = (PMT, DFF)
|
||||
VFN = (SRB, JBL)
|
||||
HMC = (JRQ, SNK)
|
||||
TCC = (SRR, CMN)
|
||||
XBH = (XVQ, MDF)
|
||||
TVX = (CTB, LFG)
|
||||
DQH = (MDC, HSQ)
|
||||
DVN = (PHG, DSS)
|
||||
QCV = (DQH, GVC)
|
||||
NVJ = (BLM, DPN)
|
||||
KXS = (SRJ, KJT)
|
||||
QRP = (CMS, JTL)
|
||||
MBR = (HRX, HRX)
|
||||
SRF = (PKG, NQH)
|
||||
VHB = (NJP, SQG)
|
||||
PRQ = (PKR, RJB)
|
||||
BNG = (BQV, GJV)
|
||||
TTX = (NNM, LFH)
|
||||
XDQ = (CVB, NKQ)
|
||||
MRV = (JSX, HKL)
|
||||
QQZ = (KHC, XLR)
|
||||
XVX = (GSV, QKG)
|
||||
RJC = (NVH, XTJ)
|
||||
GLK = (PGP, TCC)
|
||||
XBV = (GRL, TKH)
|
||||
STS = (CJK, VXK)
|
||||
XTT = (RKR, HNJ)
|
||||
SBB = (DVN, PNB)
|
||||
JRD = (DDD, FBL)
|
||||
GRL = (MNM, TVV)
|
||||
SMR = (CSL, BVV)
|
||||
DCV = (XXH, QMN)
|
||||
GFH = (JTQ, NGF)
|
||||
HXR = (VSJ, XGJ)
|
||||
CCN = (KXD, SKF)
|
||||
SXX = (HCV, JRL)
|
||||
RJH = (KMT, VPK)
|
||||
RJS = (VCX, GVL)
|
||||
TLX = (LRB, NRN)
|
||||
SSN = (KGR, TTK)
|
||||
XLF = (QCV, HST)
|
||||
SVH = (SLR, JBK)
|
||||
RJB = (STR, BJQ)
|
||||
RMJ = (RFN, DXF)
|
||||
LGC = (FMQ, BCD)
|
||||
VRG = (LBB, LVK)
|
||||
HGM = (SJT, KFG)
|
||||
JFF = (CKL, MMF)
|
||||
QQC = (GJN, LKQ)
|
||||
PLD = (MFV, DMH)
|
||||
DSS = (FTJ, TVR)
|
||||
NKV = (VJL, PQT)
|
||||
CBS = (BRN, GXH)
|
||||
JBK = (BDH, QJC)
|
||||
HKQ = (RRS, KSR)
|
||||
GQR = (DVH, TRF)
|
||||
BJH = (DKJ, MGR)
|
||||
TKL = (KSR, RRS)
|
||||
BFQ = (RFD, VDG)
|
||||
LCP = (LVL, XDL)
|
||||
FCR = (BXV, TNH)
|
||||
HFG = (NJP, SQG)
|
||||
GPM = (PLN, SSL)
|
||||
NHR = (SQS, LLM)
|
||||
CLG = (QCV, HST)
|
||||
PKV = (CQQ, XVX)
|
||||
JLS = (XRM, JGS)
|
||||
PRD = (XLQ, KPN)
|
||||
HLC = (TLM, FHS)
|
||||
QDP = (XTT, LXV)
|
||||
DXF = (CXS, QHL)
|
||||
KTF = (NTN, RPQ)
|
||||
QJG = (JJN, LGC)
|
||||
QCL = (MXH, GNB)
|
||||
PCK = (JRQ, SNK)
|
||||
HDL = (SSV, QCP)
|
||||
FNN = (DVB, GLR)
|
||||
HGP = (GNB, MXH)
|
||||
VGC = (BSR, CFQ)
|
||||
XRM = (HFC, FJJ)
|
||||
DLB = (DBX, FNP)
|
||||
LFH = (NDS, RRR)
|
||||
RNL = (GGK, NHR)
|
||||
DBK = (DXF, RFN)
|
||||
HPT = (CCQ, FXS)
|
||||
LXV = (RKR, HNJ)
|
||||
HQL = (JQX, SVH)
|
||||
TRF = (DLR, CCV)
|
||||
QJV = (HVQ, NMN)
|
||||
VFR = (TVX, KFM)
|
||||
HNL = (XBH, RTB)
|
||||
LJN = (HVQ, NMN)
|
||||
GVT = (DVH, TRF)
|
||||
FHT = (XCR, GCH)
|
||||
HCG = (PJD, CLH)
|
||||
QKG = (QQC, JLG)
|
||||
MRQ = (LNC, HXR)
|
||||
FLC = (GVL, VCX)
|
||||
PNB = (PHG, DSS)
|
||||
VVR = (NSQ, LDL)
|
||||
QJH = (DKB, PMR)
|
||||
VFJ = (XQQ, SHF)
|
||||
SSL = (LMM, KCF)
|
||||
MST = (MTT, VFN)
|
||||
PVP = (SND, MKT)
|
||||
HBB = (BJJ, HXJ)
|
||||
PMR = (HDL, QFP)
|
||||
KTV = (HPV, SVF)
|
||||
XXJ = (CRS, KMF)
|
||||
CGS = (CNR, VQX)
|
||||
SNK = (TGH, LFN)
|
||||
GPT = (DTK, PLF)
|
||||
RVV = (VKQ, DCR)
|
||||
KBL = (TTN, PRD)
|
||||
JSB = (HNL, JFX)
|
||||
JPC = (GQR, GVT)
|
||||
NGT = (CLH, PJD)
|
||||
LQF = (SRT, XVZ)
|
||||
LMK = (QTR, FJC)
|
||||
QTR = (QCL, HGP)
|
||||
XBB = (FHN, JFF)
|
||||
NJG = (MQF, QNF)
|
||||
XLJ = (CVB, NKQ)
|
||||
LGB = (QFF, VNC)
|
||||
NQK = (JBP, GLM)
|
||||
LVK = (NVS, QJG)
|
||||
HJA = (DKD, DSC)
|
||||
XXH = (PHF, JTR)
|
||||
BHG = (PMJ, CRN)
|
||||
KJT = (LCV, JCL)
|
||||
MQF = (RJC, PQK)
|
||||
KLG = (XDQ, XLJ)
|
||||
XXC = (MTL, RMB)
|
||||
PGH = (NGT, HCG)
|
||||
XPK = (SSN, SMM)
|
||||
BRN = (NRX, NRX)
|
||||
MRN = (QJH, MHL)
|
||||
QSX = (MDM, LKV)
|
||||
SRB = (VPC, MNK)
|
||||
VGM = (MQR, BPN)
|
||||
JNX = (MLC, PRC)
|
||||
VQQ = (QSB, FPX)
|
||||
DRN = (XSC, RRL)
|
||||
LKQ = (LNB, TLF)
|
||||
LKV = (VCR, JHD)
|
||||
MTL = (DXR, RKJ)
|
||||
PKD = (RMS, VVL)
|
||||
DNM = (KXS, FQX)
|
||||
FXS = (MLM, TKV)
|
||||
CFJ = (PMT, DFF)
|
||||
XFS = (JLL, QPV)
|
||||
JXS = (RTP, NBL)
|
||||
TCX = (KQT, MTH)
|
||||
TGH = (DFR, GLK)
|
||||
JHD = (RKD, FXP)
|
||||
MDC = (VFR, SHR)
|
||||
XGR = (BXB, TCX)
|
||||
RJR = (CTN, DRK)
|
||||
LKN = (BRN, GXH)
|
||||
DFF = (KVT, MHD)
|
||||
GDF = (VKJ, QDK)
|
||||
PSF = (LDL, NSQ)
|
||||
HPC = (SND, MKT)
|
||||
CRN = (PJV, TBN)
|
||||
KMT = (KCK, QJD)
|
||||
QTF = (KJL, GDF)
|
||||
XQM = (XQS, STF)
|
||||
TKH = (MNM, TVV)
|
||||
KGQ = (CVL, RND)
|
||||
GBT = (PFS, KKF)
|
||||
DTK = (BJH, DFB)
|
||||
TDD = (DKD, DSC)
|
||||
BXB = (MTH, KQT)
|
||||
DCR = (HVV, JNV)
|
||||
VLH = (LJF, LJF)
|
||||
GLM = (BVB, FFD)
|
||||
CCV = (BFN, RPB)
|
||||
MBX = (RJS, FLC)
|
||||
CMS = (QLS, XGR)
|
||||
XMJ = (TTT, XNP)
|
||||
JGF = (MTJ, HGM)
|
||||
VDG = (GXS, BNJ)
|
||||
LFN = (DFR, GLK)
|
||||
TDX = (MQR, MQR)
|
||||
PMT = (KVT, MHD)
|
||||
PKR = (BJQ, STR)
|
||||
XDL = (KQJ, SPS)
|
||||
XKM = (MLQ, STS)
|
||||
XGJ = (PQC, QCT)
|
||||
MLM = (BVG, SMR)
|
||||
PJD = (JBM, JSB)
|
||||
GVC = (MDC, HSQ)
|
||||
NVS = (JJN, LGC)
|
||||
RLX = (HCM, DGT)
|
||||
BVD = (CDR, RLX)
|
||||
RNP = (NNM, LFH)
|
||||
TNT = (PVH, XNQ)
|
||||
KJP = (XPM, QRP)
|
||||
NMQ = (QJJ, FNN)
|
||||
XQD = (CVX, GBT)
|
||||
SMN = (NGF, JTQ)
|
||||
DLR = (BFN, RPB)
|
||||
MQR = (MVD, MVD)
|
||||
NHP = (DJB, MBX)
|
||||
DBD = (QLT, TTC)
|
||||
DJM = (FDG, XXC)
|
||||
CNR = (JXS, JRJ)
|
||||
VVC = (RHP, VFJ)
|
||||
BJQ = (NQK, KFR)
|
||||
HHM = (JPN, HQB)
|
||||
NQH = (HLC, XSD)
|
||||
QHF = (GPM, FHL)
|
||||
BSJ = (QBR, DCV)
|
||||
JQX = (SLR, JBK)
|
||||
XPM = (JTL, CMS)
|
||||
CJK = (FFK, JVQ)
|
||||
VVX = (CLG, XLF)
|
||||
HMS = (VPK, KMT)
|
||||
VKJ = (BCP, JNX)
|
||||
LXX = (JSX, HKL)
|
||||
CRS = (FHT, LQL)
|
||||
FXJ = (TDH, JGF)
|
||||
FHG = (SBM, BHV)
|
||||
HPJ = (KTG, TTD)
|
||||
VKQ = (JNV, HVV)
|
||||
KNG = (LSH, KTF)
|
||||
SND = (RGP, CQR)
|
||||
RKJ = (SCB, FDN)
|
||||
DKD = (GXD, PLD)
|
200
2023/aoc_puzzle_cache/day_09
Normal file
200
2023/aoc_puzzle_cache/day_09
Normal file
|
@ -0,0 +1,200 @@
|
|||
8 7 3 3 21 91 297 830 2098 4940 11041 23745 49682 102071 207392 418543 839856 1672689 3294947 6393907 12179007
|
||||
14 16 21 48 126 306 696 1534 3320 7031 14440 28549 54126 98307 171187 286281 460690 714762 1070999 1551934 2176694
|
||||
16 25 28 16 -15 -58 -95 -93 27 484 1843 5395 13786 31983 68678 138244 263370 478515 834334 1403242 2286295
|
||||
11 14 21 40 76 125 170 186 176 285 1081 4181 13601 38634 99880 241509 555257 1225456 2610109 5381286 10759714
|
||||
14 22 47 116 268 548 997 1638 2458 3386 4267 4832 4664 3160 -511 -7454 -19098 -37250 -64153 -102548 -155740
|
||||
16 17 29 64 133 246 412 639 934 1303 1751 2282 2899 3604 4398 5281 6252 7309 8449 9668 10961
|
||||
7 17 44 98 194 359 639 1106 1865 3061 4886 7586 11468 16907 24353 34338 47483 64505 86224 113570 147590
|
||||
23 34 41 50 76 155 375 943 2318 5456 12232 26126 53285 104101 195476 353979 620137 1054142 1743299 2811586 4431746
|
||||
9 19 33 48 60 64 54 23 -37 -135 -281 -486 -762 -1122 -1580 -2151 -2851 -3697 -4707 -5900 -7296
|
||||
12 15 21 49 138 352 778 1528 2774 4870 8652 16072 31448 63860 131720 271603 555820 1128761 2284679 4637247 9488786
|
||||
15 34 61 103 183 355 725 1476 2893 5379 9445 15646 24421 35778 48745 60485 64947 50896 -867 -121319 -358325
|
||||
11 13 20 35 61 101 158 235 335 461 616 803 1025 1285 1586 1931 2323 2765 3260 3811 4421
|
||||
0 -2 -5 -17 -38 -48 -1 167 503 959 1256 680 -2193 -9841 -26210 -57218 -111414 -200940 -343079 -562875 -897600
|
||||
-2 -6 -12 -25 -52 -102 -186 -317 -510 -782 -1152 -1641 -2272 -3070 -4062 -5277 -6746 -8502 -10580 -13017 -15852
|
||||
6 0 -1 16 72 200 451 902 1666 2904 4839 7772 12100 18336 27131 39298 55838 77968 107151 145128 193952
|
||||
-1 13 48 114 226 408 697 1147 1833 2855 4342 6456 9396 13402 18759 25801 34915 46545 61196 79438 101910
|
||||
-4 3 27 79 170 311 513 787 1144 1595 2151 2823 3622 4559 5645 6891 8308 9907 11699 13695 15906
|
||||
9 19 32 53 107 254 601 1321 2710 5338 10383 20301 40144 80237 161864 329686 678973 1414585 2976164 6297977 13336423
|
||||
8 22 43 82 162 319 607 1119 2058 3925 7937 16861 36593 79128 168277 351007 720344 1461600 2944167 5899128 11752624
|
||||
17 29 41 46 36 5 -43 -65 107 970 3771 11324 29582 70700 159050 342953 717151 1464954 2936061 5789659 11260094
|
||||
7 23 51 94 156 247 388 616 989 1591 2537 3978 6106 9159 13426 19252 27043 37271 50479 67286 88392
|
||||
1 4 8 4 -8 -7 56 271 823 2164 5463 13660 33772 81706 191968 436790 963244 2064587 4316461 8834963 17760843
|
||||
-2 14 52 132 296 630 1296 2586 5019 9512 17674 32314 58355 104578 187128 336789 614256 1142126 2171220 4215984 8325814
|
||||
2 -1 -4 -3 9 54 198 605 1629 3960 8841 18376 35962 66913 119417 206098 346668 572477 934234 1514815 2449935
|
||||
17 25 30 32 31 27 20 10 -3 -19 -38 -60 -85 -113 -144 -178 -215 -255 -298 -344 -393
|
||||
17 15 24 59 139 293 571 1074 2038 4043 8487 18611 41665 93398 207137 451589 964595 2015027 4112774 8198631 15963739
|
||||
-5 -10 -15 -20 -25 -30 -35 -40 -45 -50 -55 -60 -65 -70 -75 -80 -85 -90 -95 -100 -105
|
||||
0 6 15 27 57 159 457 1178 2682 5484 10263 17853 29211 45357 67281 95812 131444 174114 222927 275823 329181
|
||||
3 7 23 67 176 423 932 1893 3577 6351 10693 17207 26638 39887 58026 82313 114207 155383 207747 273451 354908
|
||||
7 13 26 68 179 417 852 1563 2672 4498 8012 15971 35500 83659 199038 465377 1058965 2342607 5049574 10638354 21964697
|
||||
10 2 -11 -18 14 151 515 1330 3002 6244 12257 22978 41406 72017 121279 198278 315466 489542 742477 1102694 1606414
|
||||
2 10 37 91 192 384 748 1417 2593 4566 7744 12734 20595 33578 57103 104632 208868 445946 984871 2183653 4768098
|
||||
20 36 50 68 104 178 314 538 876 1352 1986 2792 3776 4934 6250 7694 9220 10764 12242 13548 14552
|
||||
13 12 8 6 14 43 107 223 411 694 1098 1652 2388 3341 4549 6053 7897 10128 12796 15954 19658
|
||||
-2 9 27 56 115 251 564 1261 2764 5910 12300 24889 49004 94255 178538 337047 642862 1252940 2507292 5135812 10678959
|
||||
9 4 7 27 82 207 459 930 1786 3365 6412 12643 26076 56039 123595 274489 603851 1301070 2727841 5548807 10942978
|
||||
3 2 -2 -9 -23 -54 -119 -238 -401 -453 196 3193 12476 36657 93621 219447 485691 1032538 2131441 4301698 8525093
|
||||
19 30 52 106 217 425 820 1612 3256 6669 13610 27367 54059 105227 203167 392014 760501 1487468 2929844 5786716 11394577
|
||||
15 24 36 49 72 146 393 1105 2880 6800 14621 28900 52911 90092 142608 208400 275805 314464 260770 -4469 -689182
|
||||
1 13 39 81 151 290 597 1271 2669 5383 10339 18921 33123 55732 90545 142623 218585 326945 478495 686737 968367
|
||||
19 48 88 142 224 360 597 1029 1847 3425 6469 12293 23382 44650 86410 171474 351819 746370 1623174 3570632 7839828
|
||||
28 57 105 180 291 448 662 946 1334 1958 3258 6465 14622 34626 81107 183410 397508 825395 1645623 3160830 5872881
|
||||
8 15 40 107 265 598 1235 2360 4222 7145 11538 17905 26855 39112 55525 77078 104900 140275 184652 239655 307093
|
||||
7 11 24 55 113 207 346 539 795 1123 1532 2031 2629 3335 4158 5107 6191 7419 8800 10343 12057
|
||||
8 14 43 120 289 619 1205 2169 3674 5967 9461 14850 23242 36356 57112 91749 156464 295332 623251 1419764 3319523
|
||||
13 35 65 116 224 470 1017 2168 4460 8837 17020 32355 61725 119626 236310 473083 949519 1889631 3697059 7073238 13197454
|
||||
-1 -5 -12 -22 -35 -51 -70 -92 -117 -145 -176 -210 -247 -287 -330 -376 -425 -477 -532 -590 -651
|
||||
9 4 9 40 119 274 539 954 1565 2424 3589 5124 7099 9590 12679 16454 21009 26444 32865 40384 49119
|
||||
20 38 74 139 244 400 618 909 1284 1754 2330 3023 3844 4804 5914 7185 8628 10254 12074 14099 16340
|
||||
7 20 53 120 244 456 798 1330 2150 3456 5702 9912 18205 34557 65835 123315 225497 404488 721211 1300196 2404090
|
||||
17 29 42 63 98 158 280 570 1289 3029 7064 16011 34998 73610 148970 290410 546297 993701 1751726 2999471 4999746
|
||||
-2 -4 -4 -2 10 62 222 618 1482 3258 6871 14369 30377 65224 141353 305913 654622 1375755 2829859 5693690 11223106
|
||||
-4 -4 16 78 225 541 1173 2350 4391 7689 12665 19733 29446 43260 65828 110503 210886 442914 964270 2080952 4354815
|
||||
26 40 56 80 121 184 256 296 256 178 435 2217 8413 25116 64091 146709 310078 616412 1167090 2123390 3736561
|
||||
11 20 34 63 134 300 663 1419 2928 5815 11127 20609 37227 66198 117118 208669 379720 716425 1418415 2956810 6438303
|
||||
25 43 74 130 238 448 850 1610 3031 5637 10273 18231 31500 53510 91433 162689 311687 649692 1444052 3307963 7586800
|
||||
12 33 66 113 174 247 328 411 488 549 582 573 506 363 124 -233 -732 -1399 -2262 -3351 -4698
|
||||
11 18 35 84 204 460 959 1871 3453 6087 10395 17637 30928 58504 121666 272821 634630 1482571 3416169 7710686 17034753
|
||||
-1 7 32 87 184 331 536 831 1334 2373 4716 10007 21631 46461 98326 204639 418505 839867 1650928 3173303 5957210
|
||||
25 43 77 134 224 368 610 1033 1779 3073 5251 8792 14354 22814 35312 53299 78589 113415 160489 223066 305012
|
||||
2 1 10 50 157 378 777 1465 2668 4847 8884 16348 29855 53536 93627 159195 263014 422605 661454 1010422 1509361
|
||||
14 19 23 35 86 236 583 1284 2599 4975 9220 16915 31441 60475 121736 255471 550180 1193159 2565693 5415679 11160144
|
||||
10 15 31 83 212 474 937 1678 2782 4345 6483 9349 13160 18236 25053 34312 47026 64627 89095 123111 170236
|
||||
8 15 33 87 228 547 1195 2409 4543 8106 13816 22690 36205 56584 87284 133790 204850 314321 483835 746537 1152194
|
||||
10 21 24 19 22 72 244 684 1698 3955 8920 19743 43040 92413 195393 407212 838266 1708765 3456172 6942059 13839906
|
||||
13 21 41 98 236 521 1050 1973 3534 6150 10589 18394 32845 60970 117424 231467 458803 900707 1733681 3253858 5941530
|
||||
7 15 30 61 112 183 272 369 433 363 29 -452 239 7205 35514 123890 363303 953775 2312372 5270455 11421086
|
||||
12 29 60 105 164 237 324 425 540 669 812 969 1140 1325 1524 1737 1964 2205 2460 2729 3012
|
||||
-5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 -22 -23 -24 -25
|
||||
10 13 12 15 39 110 263 542 1000 1699 2710 4113 5997 8460 11609 15560 20438 26377 33520 42019 52035
|
||||
8 12 33 75 140 233 365 558 861 1399 2506 5042 11071 25209 57205 126827 273118 571922 1168779 2339573 4599646
|
||||
6 10 24 72 186 408 807 1528 2900 5641 11216 22444 44540 86968 166870 315640 591906 1107760 2082476 3952728 7596590
|
||||
6 12 30 73 157 307 570 1036 1869 3353 5960 10437 17863 29502 46004 64975 74988 42506 -114398 -575675 -1708563
|
||||
10 34 68 112 166 230 304 388 482 586 700 824 958 1102 1256 1420 1594 1778 1972 2176 2390
|
||||
7 18 31 56 113 228 437 815 1548 3062 6214 12536 24504 45780 81346 137415 220965 338698 495177 689840 912531
|
||||
6 11 29 61 119 256 621 1549 3696 8229 17081 33281 61369 107906 182089 296481 467866 718239 1075941 1576949 2266331
|
||||
13 22 36 63 120 251 559 1257 2758 5853 12073 24403 48623 95706 185922 355599 667899 1229504 2215802 3908047 6747074
|
||||
6 11 19 41 95 222 520 1198 2654 5591 11220 21698 41186 78410 152561 306090 630970 1320243 2765809 5739355 11720997
|
||||
2 12 43 108 230 459 898 1735 3277 5981 10476 17569 28227 43526 64557 92278 127300 169594 218105 270258 321340
|
||||
9 21 57 121 221 387 693 1291 2475 4800 9285 17730 33175 60524 107349 184878 309157 502359 794193 1223343 1838841
|
||||
5 1 -7 -13 1 82 337 978 2381 5159 10249 19013 33353 55840 89857 139756 211029 310493 446489 629095 870353
|
||||
11 19 38 93 234 557 1236 2571 5075 9668 18140 34213 65797 129413 258251 515930 1018695 1969461 3707702 6779553 12032472
|
||||
13 35 74 140 251 433 720 1154 1785 2671 3878 5480 7559 10205 13516 17598 22565 28539 35650 44036 53843
|
||||
-7 -8 8 59 170 389 815 1638 3191 6014 10930 19133 32288 52643 83153 127616 190821 278708 398540 559087 770822
|
||||
11 28 66 147 306 600 1121 2013 3493 5876 9604 15279 23700 35904 53211 77273 110127 154252 212630 288811 386982
|
||||
23 37 54 71 83 83 62 9 -89 -247 -482 -813 -1261 -1849 -2602 -3547 -4713 -6131 -7834 -9857 -12237
|
||||
13 26 40 72 151 310 570 913 1253 1433 1301 953 1298 5269 20441 64850 180015 459521 1109694 2573981 5780871
|
||||
11 29 49 71 101 152 246 425 781 1513 3007 5910 11144 19834 33333 54166 90210 167439 362022 871617 2159474
|
||||
3 2 8 44 158 434 1014 2151 4316 8395 16056 30479 57884 110755 214490 420659 832557 1653032 3271856 6422098 12454958
|
||||
20 31 42 53 64 75 86 97 108 119 130 141 152 163 174 185 196 207 218 229 240
|
||||
-1 4 23 68 158 324 620 1156 2178 4243 8602 18065 38975 85620 189701 419688 918489 1973410 4140609 8457982 16796612
|
||||
18 37 66 118 223 441 875 1696 3208 6009 11370 22112 44618 93376 200976 439412 963937 2100368 4513605 9524129 19688464
|
||||
16 21 41 96 222 479 959 1794 3164 5305 8517 13172 19722 28707 40763 56630 77160 103325 136225 177096 227318
|
||||
-6 2 26 84 210 460 929 1789 3358 6210 11336 20366 35862 61692 103495 169247 269938 420370 640086 954440 1395818
|
||||
7 27 56 89 133 220 426 903 1931 3997 7908 14945 27065 47158 79366 129471 205359 317567 479920 710265 1031309
|
||||
1 -1 9 41 116 274 584 1162 2216 4171 7988 15884 32789 69044 145053 298853 597859 1156375 2160835 3905147 6838954
|
||||
0 -3 1 31 114 281 562 976 1507 2052 2322 1672 -1169 -8502 -24235 -54677 -109598 -203609 -357921 -602547 -979016
|
||||
15 31 59 111 203 357 615 1074 1963 3808 7774 16345 34636 72912 151519 310814 631553 1276860 2577662 5203507 10497645
|
||||
16 26 41 68 114 186 291 436 628 874 1181 1556 2006 2538 3159 3876 4696 5626 6673 7844 9146
|
||||
16 21 26 44 99 237 545 1178 2390 4567 8277 14406 24596 42557 77600 153293 327117 732628 1666477 3764163 8352022
|
||||
-5 -4 7 45 149 404 988 2256 4880 10069 19898 37780 69120 122195 209309 348277 564297 892274 1379665 2089919 3106591
|
||||
21 31 41 51 61 71 81 91 101 111 121 131 141 151 161 171 181 191 201 211 221
|
||||
16 34 69 123 196 289 407 562 776 1084 1537 2205 3180 4579 6547 9260 12928 17798 24157 32335 42708
|
||||
8 22 46 93 182 331 558 897 1445 2490 4842 10612 24871 58885 135976 301516 639134 1295918 2520238 4716815 8524828
|
||||
12 13 10 11 45 172 493 1160 2386 4455 7732 12673 19835 29886 43615 61942 85928 116785 155886 204775 265177
|
||||
6 22 50 95 167 276 437 704 1253 2536 5533 12143 25792 52433 102381 194174 363632 686126 1330952 2689399 5662421
|
||||
4 4 0 -7 -16 -26 -36 -45 -52 -56 -56 -51 -40 -22 4 39 84 140 208 289 384
|
||||
13 17 25 57 150 372 847 1791 3559 6703 12041 20737 34392 55146 85791 129895 191937 277453 393193 547289 749434
|
||||
1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61
|
||||
9 7 7 23 87 260 660 1516 3257 6645 12961 24253 43655 75786 127238 207162 327961 506099 763035 1126291 1630663
|
||||
8 9 25 79 208 475 999 2016 3985 7745 14720 27180 48631 84573 144192 244113 416222 722865 1284563 2327869 4264274
|
||||
9 11 28 79 199 453 967 1992 4024 8028 15868 31141 60782 118137 228910 442944 858083 1668933 3265728 6430635 12716521
|
||||
18 40 74 122 184 258 340 424 502 564 598 590 524 382 144 -212 -710 -1376 -2238 -3326 -4672
|
||||
9 9 18 56 161 400 881 1775 3378 6279 11770 22785 45981 96237 206097 444874 955731 2024641 4203378 8520350 16828917
|
||||
1 12 28 57 131 325 788 1793 3822 7732 15114 29074 55848 107927 209728 407318 784295 1486668 2760472 5006919 8861137
|
||||
3 19 49 99 175 283 429 619 859 1155 1513 1939 2439 3019 3685 4443 5299 6259 7329 8515 9823
|
||||
17 34 61 103 179 329 624 1193 2297 4503 9041 18464 37775 76236 150132 286828 530529 950232 1650445 2785341 4577115
|
||||
4 17 40 71 107 144 177 200 206 187 134 37 -115 -334 -633 -1026 -1528 -2155 -2924 -3853 -4961
|
||||
14 29 55 109 231 503 1087 2306 4813 9922 20212 40560 79812 153362 286978 522291 924448 1592523 2673381 4379799 7013765
|
||||
8 24 47 75 107 152 242 445 874 1688 3081 5255 8373 12488 17444 22745 27388 29656 26867 15075 -11281
|
||||
17 21 20 14 3 -13 -34 -60 -91 -127 -168 -214 -265 -321 -382 -448 -519 -595 -676 -762 -853
|
||||
10 33 71 131 222 361 592 1018 1853 3523 6888 13722 27670 56001 112635 223286 434488 830477 1566685 2938113 5518450
|
||||
-6 -7 -7 6 59 206 553 1297 2772 5490 10168 17746 29427 46807 72208 109375 164742 249503 382731 595758 937947
|
||||
3 3 18 77 225 522 1055 1973 3550 6276 10971 18912 31958 52653 84282 130850 196949 287473 407136 559743 747159
|
||||
13 19 48 121 273 561 1074 1956 3461 6075 10772 19537 36435 69826 136994 273780 554374 1131454 2316989 4744788 9698474
|
||||
1 1 10 41 107 221 396 645 981 1417 1966 2641 3455 4421 5552 6861 8361 10065 11986 14137 16531
|
||||
11 23 46 91 179 337 604 1061 1899 3539 6818 13255 25411 47357 85264 148129 248651 404271 638390 981779 1474195
|
||||
4 0 11 58 169 382 758 1416 2611 4886 9347 18157 35457 69149 134379 260204 501882 962544 1829727 3434368 6342333
|
||||
28 53 90 136 196 305 566 1212 2714 5995 12880 27020 55683 113027 225801 442938 851340 1601513 2948890 5320104 9418714
|
||||
15 14 5 -5 7 91 338 899 2020 4112 7884 14585 26440 47438 84747 151194 269445 478718 844999 1475707 2539421
|
||||
0 7 29 86 221 517 1134 2377 4812 9477 18319 35179 68037 133987 269858 554126 1150832 2395419 4958601 10152004 20484933
|
||||
17 37 81 166 329 646 1259 2423 4605 8708 16571 32034 63095 126099 253623 508987 1012497 1988167 3845573 7320774 13714389
|
||||
8 19 28 38 52 67 81 128 356 1163 3406 8698 19808 41179 79579 144900 251120 417443 669632 1041550 1576924
|
||||
14 20 28 48 109 274 663 1493 3157 6389 12607 24620 48088 94545 187629 375758 757456 1530898 3088682 6194964 12308847
|
||||
1 12 37 80 146 252 449 864 1789 3885 8643 19368 43163 94761 203714 427619 876109 1753874 3437021 6607308 12485900
|
||||
29 45 68 115 210 376 637 1051 1804 3406 7043 15154 32319 66563 131202 247380 447471 779547 1313142 2146573 3416112
|
||||
9 31 64 108 163 229 306 394 493 603 724 856 999 1153 1318 1494 1681 1879 2088 2308 2539
|
||||
-1 -2 7 39 116 288 662 1441 2973 5810 10777 19051 32250 52532 82704 126341 187915 272934 388091 541423 742480
|
||||
-2 13 55 134 270 516 1004 2032 4225 8833 18293 37316 75017 149069 293682 574677 1117608 2159875 4147202 7912909 15013186
|
||||
22 34 46 58 70 82 94 106 118 130 142 154 166 178 190 202 214 226 238 250 262
|
||||
-6 -4 14 53 110 171 213 227 293 754 2546 7735 20291 47127 99546 195687 365787 664983 1204769 2227592 4275927
|
||||
10 22 44 83 162 328 660 1277 2346 4090 6796 10823 16610 24684 35668 50289 69386 93918 124972 163771 211682
|
||||
0 7 28 83 197 401 753 1396 2671 5308 10741 21657 43028 84133 162497 311269 592260 1117427 2081504 3806821 6796649
|
||||
5 23 51 97 187 368 718 1369 2542 4579 7931 13011 19731 26400 27477 9528 -55129 -216609 -553905 -1168495 -2137857
|
||||
3 17 47 92 144 200 288 515 1151 2775 6536 14634 31214 64002 127209 246501 467195 867309 1577685 2812136 4911460
|
||||
17 33 62 117 228 451 878 1651 2983 5186 8701 14119 22176 33700 49485 70067 95381 124287 153968 179225 191724
|
||||
21 40 87 186 381 757 1477 2849 5445 10302 19243 35364 63741 112419 193753 326179 536501 862788 1357983 2094334 3168765
|
||||
-5 9 33 73 147 287 541 975 1675 2749 4329 6573 9667 13827 19301 26371 35355 46609 60529 77553 98163
|
||||
-1 3 8 14 21 29 38 48 59 71 84 98 113 129 146 164 183 203 224 246 269
|
||||
-9 -13 -17 -21 -25 -29 -33 -37 -41 -45 -49 -53 -57 -61 -65 -69 -73 -77 -81 -85 -89
|
||||
12 24 45 66 73 47 -36 -205 -494 -942 -1593 -2496 -3705 -5279 -7282 -9783 -12856 -16580 -21039 -26322 -32523
|
||||
1 -7 -5 36 159 421 893 1660 2821 4489 6791 9868 13875 18981 25369 33236 42793 54265 67891 83924 102631
|
||||
8 7 4 8 29 68 100 56 -170 -628 -1012 82 6803 29505 91748 243988 589428 1331125 2854868 5870172 11642713
|
||||
17 18 23 47 113 249 494 924 1717 3308 6769 14741 33640 78604 183971 424370 955538 2091410 4448557 9218722 18691990
|
||||
5 4 8 34 114 300 681 1424 2849 5541 10489 19228 33968 57793 95374 155649 260420 468619 939039 2083089 4921517
|
||||
23 32 41 50 59 68 77 86 95 104 113 122 131 140 149 158 167 176 185 194 203
|
||||
18 29 43 78 174 406 903 1887 3762 7299 13986 26658 50616 95620 179442 334143 616954 1128665 2043837 3659038 6467762
|
||||
-1 -2 -4 -10 -25 -49 -50 96 712 2493 6774 15938 34032 67690 127502 230018 400637 677704 1118224 1805702 2860733
|
||||
30 53 98 179 310 505 778 1143 1614 2205 2930 3803 4838 6049 7450 9055 10878 12933 15234 17795 20630
|
||||
-6 1 16 39 70 109 156 211 274 345 424 511 606 709 820 939 1066 1201 1344 1495 1654
|
||||
21 33 60 121 242 467 886 1691 3276 6413 12566 24444 46936 88635 164356 299737 541051 978609 1804192 3448255 6892074
|
||||
-3 -4 9 48 125 252 441 704 1053 1500 2057 2736 3549 4508 5625 6912 8381 10044 11913 14000 16317
|
||||
8 15 34 71 135 237 399 688 1298 2711 5978 13177 28139 57625 113400 216356 405565 759024 1440935 2806156 5621716
|
||||
3 15 37 69 106 146 202 329 690 1697 4271 10262 23045 48246 94434 173418 299485 486475 740977 1049107 1353252
|
||||
1 7 36 103 221 408 711 1256 2336 4552 9025 17700 33766 62219 110598 189927 315899 510341 803002 1233709 1854939
|
||||
13 18 34 82 204 485 1085 2291 4605 8896 16685 30741 56399 104441 197111 380060 745214 1473958 2919643 5770066 11378567
|
||||
-1 7 33 88 184 337 572 930 1477 2315 3595 5532 8422 12661 18766 27398 39387 55759 77765 106912 144996
|
||||
9 32 63 110 187 309 499 825 1495 3056 6768 15258 33629 71393 146114 290861 570109 1113560 2185909 4324846 8602263
|
||||
-3 2 12 20 20 24 96 408 1333 3623 8803 20083 44397 96680 208275 442589 923203 1883614 3756016 7334016 14080712
|
||||
-6 0 23 69 157 346 775 1711 3604 7156 13424 24001 41374 69698 116584 197405 345861 639891 1264259 2657809 5848656
|
||||
7 15 37 79 147 247 385 567 799 1087 1437 1855 2347 2919 3577 4327 5175 6127 7189 8367 9667
|
||||
1 0 4 17 43 86 150 239 357 508 696 925 1199 1522 1898 2331 2825 3384 4012 4713 5491
|
||||
-2 -6 -12 -6 50 232 675 1610 3446 6958 13696 26824 52751 104146 205271 401145 773292 1467962 2750914 5123462 9583214
|
||||
11 11 17 40 90 185 369 741 1505 3066 6234 12683 25980 53804 112527 236373 495423 1030789 2123107 4325038 8714342
|
||||
7 19 48 109 220 399 659 1013 1513 2365 4191 8554 18935 42494 93286 198454 410975 837155 1696738 3452459 7081034
|
||||
5 18 36 63 105 178 331 701 1633 3929 9347 21570 48036 103327 215391 436977 866793 1688972 3247154 6183973 11703543
|
||||
23 38 59 94 157 283 552 1114 2215 4242 7831 14109 25153 44717 79156 138197 234679 381486 582475 812064 975061
|
||||
13 38 76 140 251 440 764 1351 2491 4801 9525 19099 38231 75933 149213 289508 553433 1040056 1917706 3464302 6126379
|
||||
17 18 21 29 51 116 287 668 1399 2636 4524 7227 11263 18867 38171 94179 254740 687497 1777538 4358940 10152174
|
||||
5 19 55 143 328 670 1244 2140 3463 5333 7885 11269 15650 21208 28138 36650 46969 59335 74003 91243 111340
|
||||
11 14 21 45 127 354 896 2089 4618 9910 20957 43989 91754 189694 387102 776485 1525933 2931406 5498613 10067693 17998353
|
||||
10 13 23 61 165 403 890 1814 3498 6572 12411 24122 48545 99980 206674 421509 838834 1619991 3030807 5495171 9669797
|
||||
21 38 66 120 239 497 1029 2084 4116 7933 14958 27744 51079 94401 176942 338209 658323 1295676 2553710 4994836 9628155
|
||||
13 31 59 105 195 382 764 1527 3044 6080 12171 24251 47575 90898 167681 296760 501387 804793 1219407 1725593 2234279
|
||||
-7 -2 16 46 79 92 51 -53 -91 465 3056 10949 30743 74717 164331 335260 644417 1179504 2071720 3512352 5774079
|
||||
28 50 93 177 335 620 1126 2032 3681 6715 12309 22597 41496 76396 141789 267250 514978 1017580 2056897 4222417 8717573
|
||||
4 17 33 47 49 25 -40 -157 -326 -527 -709 -777 -577 121 1642 4427 9056 16273 27013 42431 63933
|
||||
7 11 23 52 116 252 534 1111 2298 4785 10069 21272 44621 92112 186392 369873 721825 1390063 2648339 4997292 9336554
|
||||
2 4 9 29 91 243 572 1253 2658 5564 11509 23355 46127 88207 162972 290975 502778 842556 1372601 2178865 3377691
|
||||
19 28 43 83 186 425 932 1938 3857 7477 14373 27727 53828 104630 201866 383348 712223 1290098 2275087 3905963 6533710
|
||||
10 8 4 14 77 263 688 1540 3115 5867 10508 18275 31653 56195 104783 207024 428953 912587 1952373 4138229 8616090
|
||||
21 29 44 83 185 422 910 1828 3470 6393 11794 22362 44018 89188 182562 370687 737235 1426389 2677512 4875117 8619151
|
||||
21 31 47 88 193 432 925 1892 3767 7411 14450 27741 51929 93998 163636 273125 436329 666183 969881 1340718 1745257
|
||||
15 13 2 -11 7 129 482 1261 2743 5301 9418 15701 24895 37897 55770 79757 111295 152029 203826 268789 349271
|
||||
-8 -11 -14 -17 -20 -23 -26 -29 -32 -35 -38 -41 -44 -47 -50 -53 -56 -59 -62 -65 -68
|
||||
18 28 36 48 72 122 228 449 886 1692 3076 5298 8652 13434 19892 28155 38138 49420 61092 71572 78384
|
||||
14 23 47 104 221 446 873 1686 3232 6142 11533 21353 39008 70604 127566 232240 429598 810693 1557495 3024738 5883107
|
||||
16 29 52 81 108 121 105 56 45 420 2321 8809 27076 72420 174990 390905 820690 1641111 3163610 5947757 11028712
|
||||
21 29 40 58 84 112 134 159 245 535 1281 2841 5664 10389 18477 34425 71752 166672 405377 971947 2221091
|
||||
-6 -14 -27 -33 -7 89 306 708 1372 2388 3859 5901 8643 12227 16808 22554 29646 38278 48657 61003 75549
|
140
2023/aoc_puzzle_cache/day_10
Normal file
140
2023/aoc_puzzle_cache/day_10
Normal file
|
@ -0,0 +1,140 @@
|
|||
|-L.FL-FJFL.|7FJ7F|F7-7F77.FL7---.7FF77--.|-F|FF--7FF7F-7F--77FFFJFJF7.F-LF7LFJJ.F|.|77F7F---7FLL.|FFJ.FF7-77..F77.-F-7FL-FF|77F-FFLL-FJ-|.J
|
||||
|7JF77-|L7J-F-JJL7|-|LJLF-|7.|.LLLJ7|-7.LFJFF--JF7L7|||FJ|F-J77L|F7.L-FJF----L7.FF.FJ-J-L-7|L|LJ7FJJJ.F|L-7L7.FF-|-7F-|J..||LJ-|-J-.|L|J|LF|
|
||||
LJ-LL|F7|LL7LLL-|-F7||..||..FJ.FJJF-7JJ|.7JLL--7|L7LJLJ|FJL-77|..FFJ7FJ7L7-|-JL.F--7LJJ|LJJ.F-|L7.FF-L7-F-7F77|J7||FLFJ|FFLL7.|JFJJ--J|.7-7|
|
||||
|.FJ.|F7-7L77|||L7JL-7LF777-JJ.|7F-L7JFJ7|F-|.LLJ|L---7||F--J7JFLF|JF-.--7||J.|F-.7LLLFF7||7F777L7FJ-||LJ7|||F|L-7.JJ.||7||J7.|-LL.7J.F7L7--
|
||||
F-7LF||.FLJL-7|FF|L7FL-L||F-7|FL7LJ|L7L|.LLJ|FJJLF---7|||L---7L7|L|7||FLFLJ|-FF-7|777FJ7|-FFJ|L77LL-F.JJJL7LLJ.|L7FJFF-77LF-7-|-|77L|7.L--7|
|
||||
F-JF-L7--J|JLL7-|LJ|F|J7L|J.J-|F7J7F|JF-7.|LF7F77L--7||LJF---JL-JJ|LJ7FJL7L|JLFJF|7FF7.-JJFL7|-F77J-777JF|L7J.|--L|J7|7LJ7JFJJ..|-J--7.L7.FJ
|
||||
L7J|7||J--L-F7.||LFL-JF7.F7.|.FL7.FF7L|7F|FF-7F-7F7FJLJF7L----7JFFJJ.J|7L|7L7JLL|JFFJ7.|.|F-J|FJL7|F7-|F7JF|FF.|.||7L-J7LF-||.L7J7L7FJ7.L-.|
|
||||
L7.L-FJJJF|FJ-.|JF--J7FJ7LLJ-..LJF||L-7F-7-L7|L7|||L--7|L-----J-FF-F7FL77|---F7JLL-|JF-77FL-7LJF-JFJ|-|-7-7L-7-7-JLJ-|L7-JJLF7-J-7|L77JFJJ.|
|
||||
LL-|FJL7.L|J7|-L7F.|FL-.FJJ.F-F-F-7L-7LJFJ|F|L-JLJL7F7|L----7|.F7F7F7JJ-L--|JJ7|-7-LF|FJF7J|L-7||FJFJ.LLJ.77||.L.LF7LF-F77F-J.F7-J7L-F7FJF-.
|
||||
FJ.|J7L77-7LL7J-7---FJ-FL---|||FJFJLLL-7|F7FL-----7||||F--7FJ-FJ||LJ||..LF7|JL--F||.FJL7||LF-7|L7|FJF7-.F-LJ.-7.F7.77F7||7-|L7LJJJFJ.FJJF-L.
|
||||
|.F|F7-.|.JJ.L..L|JL7..FJL|FF-7L7L-7F--JLJ|7LF7F--JLJLJ|F7LJJFL7||F-J--J7|7..F|-FL|FL7FJ|L7L7LJFJ|L7||7F|J|L7.F7F77.FJ||L--7--7|7.L-7L-77J|7
|
||||
LF-LL.L7J.FF-.F-||--.|-|-F--|FJ7L-7|L--7F7|F-J||F7F---7|||F7LFFJLJL7JL|.FF-77FF7JJF77|||L7L-JF-JLL7||L7F7|F-|.||||LFL7||F7FJ-LJ-77J-J7.LJF7J
|
||||
FF.|..7JJ7FLJ7|L-7F|F|.|7LLL|L7F--JL7F7||LJL7FJLJLJLF7|||LJL7FJF---J-|F77|JL7L|||FJL-JL-7L--7L7F7FJ|L7||L7L-F-J|||F7F||||LJ7LLJ.7JFFLF-L7LJ-
|
||||
L.FJ-|77--F||F77JJLF-7-J7F7LL7||F--7||LJL7|FJL-7F--7|||LJF--JL7|F-7JF--F7|.L7.|L7L----7FJF7FJFJ||L7|FJ||FJ77L-7LJ||L-JLJL7-|..-.|F7--77LJ-|J
|
||||
F|.L7||--FLJ7.L7F-J|FJJFF7FF7||LJF7||L7F7L7L7F-JL-7||||F-JLF-7|LJFJ7JFLF--77L-L7|7FF-7|L7||L7L7||FJ|L7LJ|F7F-7|F-JL--7F--J7F|J-F|7|LLJL7JF|.
|
||||
J|LF|FJFFL.|F7LLJ|.|L7F7||FJLJL--JLJL7LJL7L7|L--7FJLJLJ|LF-JFJ|F-JF7.|.L7FJF7JFJL7FJFJ|FJ||7L7||LJFJ7L7FJ||L7|||F-7F7||F7LLJJ7.FJ.F77JF|F7|F
|
||||
||JFJ|F|J|7|JJL|-7-L7LJ|||L-7F7F--7F7L7F7L7LJF--JL--7F7L7|F-JFJL-7||-F-7||FJL7L7FJL7L-JL7||F-JLJF-JLF-JL-J|FJLJLJFJ|LJLJ|7J.F|7LJL|--7FJF|||
|
||||
L7--.LLJJ--|.FFJF-7-L-7||L-7LJ||F7LJL7LJL7L-7L-7F7F-J|L7LJL77L7F-J|L7L7|||L-7|FJL7FJF-7FJ||L-7F7|F7JL7F7F-JL--7F-J|L--7FJF77J|F|JLL7FLFLLJ|F
|
||||
.JLLF77.L-.|.LJ-7||FF-J||F-JF7LJ|L--7L-7FJF7|F-J||L--JLL-7FJF7||F7L7|FJ||L7FJLJF-JL-J||L7|L-7LJ|||L7FJ|||JF7F-J|F--7F-JL-JL7F---7JJ|F-JJ7LL-
|
||||
7-F7|FLJ7|7L-|.FJFL-L-7||L7FJL7LL-7FJF7|L-JLJL-7|L7F-7F7FJ|FJLJLJL7||L7||FJL-7FJF7F7F7|FJ|F-JF7|||FJ|FJLJFJ|L-7||F-JL--7F-7LJF--JJ7||||.7F|.
|
||||
L7LL|J|FFJ7FL7.FFJFFF-JLJFJL7FJF7FJ|FJ||F7F---7||FJL7||||FJ|F-7F7FJ||FJLJL7FFJL-J||LJLJL7|L-7||||||L||F7FJFJF-JLJ|F7F7FJL7L7FJF7.F7J-FF.FL-7
|
||||
LJ.LL7-J-JL|F|F---7FJF7F7L-7|L7|LJFJL7|LJLJF7FJLJL-7|LJ|||L||7LJLJJ|||F---JFJF---JL---7FJ|F-J|LJ||L7||||L7||L---7LJ|||L7FJ-|L-JL-J|.F-JFF.L7
|
||||
FJF|.L--L|-FLFL--7|L7||||F-J|FJL-7L7FJ|7F--JLJF----JL-7LJL7|L---7F7|LJL-7F7|FJF-7F-7F7|L7|L-7L7FJ|FJ|||L7|L7-F-7L-7LJL-JL-7L--7F--J.|.7JL|L|
|
||||
F-|77FJLFFJ|J.|F7|L7LJLJ||F-JL7F7L7|L7L7L----7L----7F7L-7FJ|F---J||L---7||LJL7L7|L7|||L7||F-JFJL-J|FJ||FJ|FJFJFJF7|F---7F7L7.LLJJJ.--7J.F777
|
||||
|..77-L-7-.LF7FJLJFJ7FF-J|L--7||L7||FJFJF7F7L|F---7|||F7|L7|L--7FJL7F7FJ||F7FJFJ|FJLJL7|||L7FJF7F-JL7LJL7|L-JFJFJLJ|F7F|||FJ-LJ|LLL.J|F-F.|.
|
||||
-7-LL|7FJ7L-|-|F-7L--7L-7|F7L|||FJ||L7|F|||L7||JF7LJ|LJ|L7||F--JL7FJ||L7|||LJL|FJL---7||||FJ|FJLJF--JF--J|F--JFJF--J|L7|||L7JFFF7L|7.L|F77J7
|
||||
F|7J.-J-LL7L-JLJ7L7F-JF-JLJL-JLJ|FJL7|L7||L7LJL7||F7L-7L7|||L-7F7|L7|L7|||L---JL7F-7FJ||LJL-J|FF7L-7FJ|F-JL7F7L7L7F7|FJLJL-J-F-7.F|F7JL-JFFF
|
||||
FLF.LLL7|.|-7.F7F7||F7L-------7FJL7FJL7|||LL7F-J|||L--JFJ|||F-J|||FJL7||LJF-----JL7||FJ|F---7L-J|F7||F7L--7|||.|FJ|LJ|F7.F7|7L7L7-J|FJL|LLJJ
|
||||
LJ.|7|LF|7J.LFJLJLJLJL7F--7F--JL--JL7FJ|||F-JL-7||L---7|FJLJL-7|LJL77|||F-JF-7-F7FJLJ|7LJF--JF--J|||LJ|FF7|||L-JL-JF7LJ|FJL77FJFJ|.JJ7F-J|||
|
||||
FF-|-J|LJ||7LL--7F7F7FJL-7|L-7F7F-7FJ|FJ|||F---J|L-7F-J||F----JL--7L7|LJ|F7L7L7||L--7L--7L--7L--7|||F-JFJLJLJF7F7F-JL--J|F7L-JFJJ-LJL-J.|F--
|
||||
-J||-LJJF-F-J7L-LJLJ|L---JL--J|||FJ|FJ|FJ||L-7F-JF7|L-7LJL-7F-7F7L|FJL7FJ|L7L7|||F7FJF--JF7.|F--J|||L-7L--7F-JLJ|L------J|L---J7|-J7FFL77||J
|
||||
LL||7.|LJ.|L-7L7-F-7|F7F-7F7F7|LJL7LJFJL7||F-JL--J||F7|F-7FJ|FJ|L-JL7FJL-JFJF||||||L7|F-7||FJL7F7|LJF-JFF-J|F--7L-7F-7F--J7F7|F7777LFL.LF-77
|
||||
.LL-F-77J.J7-|-F7|FJLJLJ-LJLJLJ-F7L-7|F7|LJ|F7F7F-J|||LJFJL7|L7L---7LJF---JF7|||LJ|FJLJFJ||L7FJ||L-7L--7L-7LJF7L-7||FJL----JL-JL77FF|-|-7|LL
|
||||
F7.F|-|--7JFF77|||L7F---7|F7FFF7|L--J|||L-7LJLJ||F7LJ|F7L7FJL7|F7F-JF7|F--7||||L-7LJF--JFJ|FJL7||F7L7F-JF7|F-JL-7|||L7F--------7L7----|FJ-7L
|
||||
L|-L--|FFFF7||FJ|L7|L--7|FJL7FJ|L---7|||F7|F---JLJL7FJ||7||F7||||L7FJLJ|F-J||||F7L-7|F77L7|L7FJ||||L||F7|||L---7LJLJFJL-------7|FJ-77JF77.7J
|
||||
F--||.F--7||||L7|J|L---JLJF7|L7|7F--JLJ|||||F-7F7F-JL7|L7|||||||L7||F7FJ|F7|||||L7FJ||L7FJL7||FJ||L7|||LJLJF7F7L--7-L-7F7F----J||--J-7LLJ-JJ
|
||||
LJFJ|FL-7LJLJL-JL7L----7F7|||FJL7L---7F||LJ||FJ||L7F-J|FJ|LJ||LJ-||LJ|L7LJ||||||FJL7||FJ|-FJ|||FJL7||||F---JLJL--7L--7|||L-7..LLJ7|.|F7FJ7L7
|
||||
|.L7L-|-|F7F-7F-7|-F7F7LJ|||LJF7L77F7|FJL-7|||FJ|FJL-7|L7|F-JL--7LJF7L7L7FJ|||LJ|F-J|||FJFJFJ||L7FJ||||L---7F---7|F--JLJL--J-FF7JLL-F7LJ||J.
|
||||
-J-LJ7LFLJ|L7|L7|L-JLJL-7LJL7FJL7L-J|||F7FJ||||7LJF--JL7||L7F7F7L7FJL7L7|L7|||F7|L-7||||FL7|FJL7|L7||LJF---J|F7FJ|L-7F-7F7F7-FJ|-|.F777F|JFJ
|
||||
|F-LL7F|J.|FJL-JL7F----7|.F7LJF7L--7LJLJ|L7|||L--7L7F7FJ||J||LJ|FJ|F7L-J|F|||LJ||F-J||LJF-J||F-J|FJLJF7L----J|||-L--JL7||LJL7|FJJ|-|L-7JJ.L7
|
||||
L-J.|L7JJ.LJ.F7F7LJ|F7FJL7|L--JL--7L7F7.|FJLJ|F--J.LJ|L7||FJL7FJL7LJL7F7|FJ|L7FJ|L7-|L-7L7FJ||JFJL7F-JL------JLJF7F7F7|||F--J|L-77.|F-JJ7JF|
|
||||
|-7F|J|.|.F7.|LJL---J|L-7LJF7F7F-7L-J|L7|L7F-JL---7F7|FJLJ|F7|L7FJF7F||||L7|L|L7L7L7|F-J.||JLJFJF-JL-----------7|||||||LJL7F7|F-J7-|L-7.F.-L
|
||||
F7L7|L|F-7|L-JF-----7L--JF7|LJLJFL---JFJ|FJL-7F7F7||LJL--7LJ||-LJFJL7LJ||J||FJFJ7|FJLJF--J|F--JFJFF7F---------7LJ||LJLJF7FJ|||L7F7FJF-J7|F..
|
||||
.FFFJ.|7.F|F7FJF-7F7L--7FJ||F7LF7F----JFLJF7FJ|||||L7F7F7|FFJL--7|F7L--JL7|||FJF-JL-7.L7F7|L--7||FJLJF-------7L--J|F---JLJFJ||FJ|LJFJ|7L|J.F
|
||||
--7|LJ-JF-LJLJ|L7LJL---JL7LJ||FJ|L-7F--7F7||L7|LJ||7||LJ|L7L7F-7|||L7F-7FJ||LJ-L7F--JF7LJLJF--JL7L7F-JJF-----JF---JL--7F77|FJ||FJF7L-7--J||J
|
||||
FLLJ-LF7J||F-7F7L---7F7F-JF7||L7L-7LJF7|||||7LJF7LJFJL-7|FJFJL7LJLJFJL7||FJ|F---JL---JL-7F-JF-7FJFJ|FF7L-----7|F------J||FJL7|LJFJ|F7|F|FFL7
|
||||
JL---77J|--L7LJL-7F-J|LJF-JLJ|7|F7L--JLJ|LJL---JL-7|F7FJ|L7|F7L--7FJF7|||L7||F7F7F7F-7F7||F-JFJL7L-JFJL------J|L---7F--J|L7FJ|F-JLLJ||7LFJFJ
|
||||
.|L7||JF--JL|F7F7||F7|F-JF7F7L-J||F7F7JFJF7F7F7F--J|||L7L7||||F-7|L7|||||FJ|||||LJ|L7||||LJ-FJF7|F7FJF----7F7.|F---J|F--JF|L-JL-7L|-LJ--77FL
|
||||
L7LLJ.LJ.|FLLJ||||LJ||L--JLJL7F-JLJLJL-JFJLJ|||L--7|||FJ7||||||FLJF||||LJL7||||L-7|FJ||||F--JFJLJ|LJFJF---J|L7||F7F7||F7|FJF---7L7-7L|-L-7J|
|
||||
.J7.LL7F--J-||LJ|L-7||F-7F7F7LJF----7F--JF7.LJL7F-J|||L-7|||||L7F--J|LJ-F-J|||L7FJ|||LJ||L7F7L7FSL--J.L--7.L7||LJLJLJLJL7L7L--7|FJF-F|7|LL-7
|
||||
F||JJFFFJ|FFFF-7L7FJLJL7|||||F7L---7||F7F|L---7||F7|||F7||||||FJL7F7L--7|F7|||FJ|FJL--7|L7LJL7||L----7F--JF7|||F--------JFJF--JLJ7L7F777|.|L
|
||||
FL77.F777FF7JL7L-JL7LF7|LJ||LJL----JLJ||FJF7F7||LJ|LJ||LJ||||||F-J|L7F7|LJ|||||FJ|F7F-JL-JF77LJL---7FJL---JLJLJL----7.F7-|FJF--7F7L7J|JL-.L|
|
||||
|.L-77JL7F7F7.L--7FJFJ|L-7|L----------JLJFJ|||||F-JF7||F7LJLJLJ|F7|FJ||L-7||||||FJ|||F-7LFJ|F-7F7F-J|F7F--------7F--JFJL7|L-JF7LJL--77--J7L-
|
||||
L7FL7J|L7|LJL----JL-JFJF-J|F-7|F7F--7F7F-JFLJLJLJF-J||LJL7|F--7LJLJL7||F-JLJ||LJL-JLJ|FJFJFJ|FJ||L-7LJ|L-----7F7LJF-7|F-J|F--JL7F---J..F|LF|
|
||||
|.|LJL|-FL----------7|-L-7|L7L7||L-7|||L7F-----7LL7FJL7F7L7|F-J-F---J||L-7F-JL7FF7F-7|L7L7L-JL7||F7L-7|F----7LJ|F7L7||L--JL---7LJ7|7-J-7|-7|
|
||||
|.LF7FJF7F7-F7F-----JL-7FJ|7L7LJL--JLJL7LJF----JF-J|F7LJL7LJL-7FL----J|F-JL7F7|FJ||FJL7|FJF7F7LJLJ|F7||L---7|F7LJL7|||F--7F7F7L--7F77.LLJLJ7
|
||||
L7LJ7J|LFJL7||L-------7|L7|F7L--------7L7FJF---7L-7LJL--7L-7F7|F------JL-7FJ|||L7LJL--JLJFJLJL--7FJ|||L----J|||F-7LJLJL-7||||L7F7LJL-7-LJ||J
|
||||
F|7LF-7FJF7LJL--------JL-JLJL---7F7F--J7LJ.L7F-JF-JF7F--JF7LJ|||F7F-7F7F7||FJ||7L----7F-7L7F--7FJL-J|L7F---7||LJFJF-----JLJ|L7LJ|F7F-J7F-|J|
|
||||
77-7L7LJFJL7F7F7F7F7F---7F-7F7F7LJLJF7F7FF7-|L-7|F-JLJLF-JL-7LJ||LJFJ||||||L7||F-----JL7L-JL-7LJF--7L-J|F--JLJF7L7L---7-F7FJFJLFJ||L-7F|F7LL
|
||||
||LJ.L7FJF-J|LJLJ||LJ-F-J|FJ|LJL-7F7|||L-JL7|F-J|L----7L-7F-JLLLJF-JFJ|||||FJ|||F----7FJF----JF7L-7L7F7|L-----JL7|F7F7L7||L-JF7|FJL--JFF777|
|
||||
F-.J7LLJF|F-JF77FJ|F--JF7|L-J.F--J|LJLJF7F7LJL--JF----JF7|L7F7|JL|F7|F||LJ|||LJLJF---JL7L7F-7FJ|F-J7LJLJF------7|LJLJL7|||F77||LJLF7|F7|L77|
|
||||
F-|LJ7.|F||F-JL-JFJL7F-JLJF7F7L7F-JF-7FJ|||F7F7F7|F-7F7|||FJ||77LLJLJFJL7.||F----JF7F7FJL|L7LJFJL-7F---7L-----7LJF---7LJ|LJL-JL---J|FJLJFJF7
|
||||
.FL77F|LFLJL--7F7|F7||F---JLJL7LJF-J-LJFJ|LJ||LJLJL7||||LJ|FJL7-|.|L-L-7|-LJL--7F7||||L7FJFJF-JF7FJL7F7L------JF7|F--JF7|F------7F-J|F-7L-J|
|
||||
FL7|L77FJ|FF-7|||||LJ|L7F7F-7FJF7L----7L7L-7LJF7FF7|LJLJF-JL7FJ-F--7|L.LJ-||F--J|||LJ|FJL7L7|F-JLJF7LJ|F-------JLJL---J||L7F---7|L--J|LL7F7|
|
||||
FJ77.L-7JFLL7|LJ||L--J|LJLJFJL-JL-----JLL-7L7FJL7|||F7F7L7JFJL7.|FLFF-FJ|7.LL7F7|LJF7||F7L7||L7F--JL--J|F--7F7F--------J|FJ|F--JL7F-7L-7||LJ
|
||||
|LFL-7.-JFJFJL-7LJF-7-F7F7LL--7F7F-7F7F7F7L-J|F-J||||LJL7L-JF-JF77-|J7J-J7-|.||LJF7||LJ|L7LJL-JL-------JL-7|||L---------JL-JL-7LF||||F-J||JJ
|
||||
-.F|-L.L-F-JF-7|FFJFJFJLJL-7F-J|||JLJ||||L--7|L--JLJL--7L---JF-J|-7|J||7LJ7LLLJJF|LJL7-|FJF--7F7F7F-------J||L7F-7F-----7F7F7FJF7LJ-||JLLJ..
|
||||
LF-|JL|JLL-7|FJL-JFJFJF-7F7|L7FJ||F--J|||F--J|F-7F7F7F7L-----JF-J-|J-|FFJ|-JFLF|-L-7FJFJ|FJF7LJLJ|L---7F-7FLJ|LJFJ|F-7F7LJLJ|L-JL7J|LJ77.|F7
|
||||
FL.|..L-JF7LJL---7L-JFJFLJ||FJ|LLJL---JLJL-7FJL7LJ|||||F-7F7F7L-7-|J7L--7FJFFFFJ7LFJL7L7|L-JL7F-7L7F7|LJLL----77L-JL7LJL7.F7L---7L--7-LF-7.7
|
||||
|FJ77F-J-||F----7L--7L7F--J|L-JF------7F---J|F-JF7LJLJ|L7|||||F7|J|F|F-7|J|F-J|F7FJF-JFJL7F7FJ||L7LJL---------JF7.F7|F-7L-JL---7L7F-J7-|-F7|
|
||||
L||L--JF-JLJF7F7L--7L-JL--7L--7L-----7||-F7FJL7FJL--7FL7|||LJ||LJ.|-F-J|.F7JF7F||L7|F7L7FJ||L-JF7L-------------J|FJ||L7L--7F--7L7LJ||.||L7-J
|
||||
.JJJ.J||F7F-JLJL7F7L7F7|F7L-7FJF-----J|L-JLJF-JL7F-7L-7||LJ7FLJJF77L-7||F-JLF7FJL-JLJ|FJ|FJL-7FJL----7F---------JL7||FJ.F7LJF7L7L---77F--|-L
|
||||
FL|.FJFLJ||F----J|L7LJ|FJL--J|-L-7F7F7L7F7F7L---JL7L7FJ|L7F--7JFJL-7||-|L|.|||L-----7LJFJL--7|L-----7|L----7F7F7F7|LJL-7|L7FJL7|F---J-JJFF-L
|
||||
-.FJ|.F|7LJL-----J|L-7|L----7|F7JLJLJL7|||||F7F7F7L7||FL7LJF-J7F|-LL77.J.77FJL------JF7L-7FFJL7F----JL--7F7LJ||||LJF7F-J|FJ|F-JLJF7J.FJ-F|7|
|
||||
L-F-7-F|J7FF7F----77FJL-----JLJ|F-----JLJ||||LJ|||FJ|L-7|F7L7-L.|JJL|J-F7.LL--7F7F7F7||F7L7L7FJL----7F-7|||F7LJLJF-J|L--JL-JL---7||7F7J|FJFL
|
||||
LFJL|LJL|F-J|L--7FJFJF----7F--7LJF---7F77LJ|L-7||LJFL--JLJL-J.FJ.777L7FF7.L7.|LJ||LJLJLJL7L-JL7F7F77LJFJLJLJL7F-7L-7|F-7F7F-----J|L7-J.-J7F7
|
||||
7J.|JF|7-L-7|JF7|L-JFJF-7FJ|F-JF7|F-7LJL-7FJF7||L-----7F7-F--7JJ-F7J-FL-..LLF7JLLJJ-F7.F-JF7F7LJLJL--7L-----7LJ7L--J|L7|||L------JFJ7|||FFL|
|
||||
|7L.L||JLF-JL-JLJF7FJ7L7LJFJL7FJ||L7L----J|FJLJL7F----J|L-JF7|J.FF7-F7F||7L||L----7FJL7L--JLJL7F-7F-7L-----7L-7F7F7-L-JLJ|F7F-7F--JF7FF--JL|
|
||||
|7-|.L|..L---7F7FJ||F--JF7L7FJ|FJL7L---7F7LJF---JL--7F7|F--JLJF7FJ|7F7J7F7FFL----7|L7FJF7F7F77LJFJ|FJF----7L7FJ|LJL--7F--J|LJJLJF--JL7J.|.FJ
|
||||
FJ7L|J|FF--7FJ|LJ7LJL--7|L7|L-JL--JF7F7LJL7|L------7LJLJL-----J|L7L--7.-JL-F.LF--JL-JL7|LJLJL-7FL-JL7|F-7FJ|LJFJF----JL--7L---7FJF7F7|.FJ-|7
|
||||
L7|J|JL-L-7|L7|F-------JL7LJF----7-||||F-7L-7F7.F-7L7F7F7F7F7F-J-|F--J7|-J|JFLL-----7FJL-7F7F-JF7JF7LJL7|L----JFJFF77F-7FJF--7LJFJ||||F--|.|
|
||||
L|.FF7|LLFJL7LJL-7F------JF7L---7L-JLJLJF|F-J|L7|FJ7LJLJLJLJLJJFFJ|L|FF-7|F7JLF-7F--J|F-7LJ||F7|L7|L---JL---7F7|F7|L-JFJL7L-7|F7|7||||7LF-|7
|
||||
-L-FFFJ7FL-7|F--7LJF------J|F---JF----7F7LJF7|FJ||FF7F----7F--7-L7L7|7L7L-7LF|L7|L--7|L7L--JLJ||FJL--------7|||LJLJF7FJF-JF-J|||L7||LJL7|J|L
|
||||
JLLLJ|-F---J|L-7|F7L7F7F--7|L--7FJLF--J|||FJ||L-J|FJLJF---J|F-JF-JFJF7|L7FJF7F7|L---JL-JF-7F-7LJL7F--------J||L7F--JLJ-L-7L-7LJL-JLJJ|J.F7F7
|
||||
LL7LL||L---7L7FJLJL7||LJF-JL--7LJF-JF-7|L7|FJ|F--J|F--JF7F7|L-7L-7|-|L7||L7|LJLJF7F-7F-7|FJ|JL7F7|L----7F7F7LJJ|L-------7|F7L---7L|7L|-F-JLJ
|
||||
.F|7|.F-7F7L7|L--7FJLJF7L----7L7JL-7|FJ|FJ||FJL-7FJ|F--JLJLJF-JF7||FJFJFJFJ|F--7|LJLLJFJ|L-JF7LJ||7F7F7LJLJL--7L-------7|LJ|F-7FJ.L7-|L.FJJ7
|
||||
LJ|FF-L7LJL-JL-7FJL7F7||F7F-7L7L-7FJ||J|L-JLJF7FJL7LJF------JF7||||L7L7L7|-LJF7LJF----JFJF--JL--JL-JLJ|F-----7L-------7|L-7||L||-L-F77.FFJ.J
|
||||
||L77FFJF-----7LJF7LJLJLJ|L7||L-7|L-JL7|F--7FJLJF7|F7L-7F--7FJLJLJL7|FJL|L7F7|L-7L----7L7L-7F7F7F7F7F7LJF--7LL--------JL--JLJ-LJ.|.L--FJ.F||
|
||||
.F7FF7L-JJF7F-JF-JL-7F--7|FJL---JL---7LJL-7|L---JLJ|L7FJL7FJL7F---7|||7-|FJ||L7FJF7F--JFJF7LJLJLJLJLJL--JF-JF7F----------7F7F7J.F77FL-L|.F7-
|
||||
F|FFJL7F7F||L-7|FF7|LJF-J|L7F---7F--7|F-7FJL--7F7F-JF||F7|L-7LJF--JLJL7FJ|FJ|FJ|-||L7F-JFJL7F7F-7F7F-----JF7|||F--------7LJLJL-7-7-|F--F7JL|
|
||||
-FLL-7LJL-JL--J|FJ|F7JL-7L-J|F--J|F-JLJFJL---7|||L--7|||||F-JF7L----7FJL7|L7|L7|FJL7||F7L-7LJ||FJ||L------JLJLJL7JF----7L------J.|J|F-FLJ..F
|
||||
LLLF-JF-7F7F-7FJL7LJL---JF7FJ|F7FJL7-F7L---7FJLJ|F--JLJ||||F7||JF7F7||J.||FJ|FJLJF7|LJ||F-JF7LJL-J||F7F7F--7F7F7L7|F---J7F7F----7JJLF77-77.|
|
||||
|LFL-7L7||||FJL7LL7F-7F7FJ|L7LJ||F-JFJL---7||F-7LJF7F7FJLJLJLJ|FJLJLJL7FJ|L7|L7F-JLJ7FJ|L--JL7F-7FJFJLJ|L7FLJLJL-J||F7F--JLJF---J-LJ|L|---77
|
||||
J7|JLL7|||||L--JF7||FJ|||FJFJF-J|L--JF----JLJ|FJF7|LJ|L-7F----JL-----7|L7|FJL-JL7F7-FJFJ|F7F7||FJL7L-7FJFL-----7F7|||||F---7L7F7F7|FF777L-JF
|
||||
|F7J.F||LJLJF7F7|LJ|L7|LJL-JJL--JF---JF----7F|L-J|L7FJF-J|F7FF7F--7JFJ|FJ|L----7LJ|FJFJJFJ||LJ|L-7|JFJL--------J|LJLJ|||F-7L-J|LJL7FJ|7--JFJ
|
||||
L7J.-L||F---JLJLJF7L7LJFF---7F--7L-7F7L7F--JFJF7FJFJL7L-7||L7|||F-JFJFJ|FJ|F--7L-7LJFJF7|FJL7FJF-JL-JF7F----7F-7|F---J|||FJF7.L-7FJ|FJ..FFF7
|
||||
||.L|JLJL7F7F-7F7|L-JF7FJF-7LJF-JF-J||FJL7F-JFJ||FJF-JF-JLJFJ||||7FJFJFJ|F-JF-JF7L7FJFJ|||JLLJJL7F7F7|||F-7FJL7|||JF-7|LJL7|L7F7|L7|L77-FLL-
|
||||
|77||7|.LLJ||FJ|||F--JLJFJFJF7L--JF7|LJF-J|F-J.LJL7L7.L---7L7||||FJFJ|L7LJF-JF7|L-J|FJFJ|L7F7F--J|||LJLJL7LJ-FJ||L7L7||F--J|FJ||L7||FJF-7JJJ
|
||||
|J|-7-JFLLFJ|L7|||L----7|-L-JL----JLJF7L-7||LF77F7L7L7F7F7|FJ|||||FJF77L-7|F7||L7F-JL7|F|FJ||L--7|LJF-7F-J|F7|FJ|FJ7||||JF7|L7|L7|LJL-JFJJ||
|
||||
|.|LJL|7|.L7|FJ|LJF----J|F-------7F--J|F-J|L7|L7||FJFJ||||||FJ||||L7|L--7|||||L-J|LF-JL7|L7|L7F7LJF7L7LJF--JLJL-JL--JLJL-JLJFJL7||F---7||.F7
|
||||
7FJ7JFJ-LF7LJL-JF7L-----JL------7|L--7LJF-JFJ|FJ|||FJFJLJLJLJFJ|||FJL7F7||LJ|L--7L7L-7FJL7|L7||L7FJ|FJF-JF7F7F---7F-7F-7F7F7L--JLJL-7-LJ77L-
|
||||
FJF|-|J-J|--FLF-JL--7F----------JL---JF7L7FJF||FJLJL7|F--7F--JFJ|||F7LJ||L-7|F7J|FJF7|L-7||FJ||FJL7|L-JF-JLJLJJF7LJFLJL|||||F7F7F7F7L77|||7|
|
||||
F7F-7|F|FL-77JL----7|L-7F7F7F7F-----7FJL-JL7FJ|L--7FJLJF7|L7F7|FJ|||L7FJ|F7||||FJ|FJ||F-J||L7|||F7||F7FL---7LF7|L-----7||||LJLJ||||L7L77JLFJ
|
||||
|-J|-|F|7J.LL-.F7F7||F-J|LJLJLJF-7F-JL---7FJL7|F7FJ|F7FJ||FJ||||FJ||FJL7LJLJ||LJFJL7|||F-J|FJ|||||||||F7F--JFJLJF---7FJLJ|L---7||LJ||FJ|.7.|
|
||||
7FFJF-F--.|F-JF|LJLJLJF7|F-77F7|FJL7LF7F7||F7||||L7||||FJ||7|||||FJ||F7L---7||F-J.L||||L-7||FJ||||||||||L-7J|F-7L--7||F7.|F7F7|LJJF7LJF-..F7
|
||||
-FJFJF|JJ7L|JL|L---7F7|LJL7L-JLJL--JFJ||||||||LJ|FJ||LJ|FJL7||||||FJ|||F-7FJ||L7F7FJ||L7FJ||L7||||||||||F7L-JL7|F7FJ|LJL7|||||L---JL--7|FLF-
|
||||
L|-|F7.L7--7FF-F---J|||F--JF7F7F-7F-JFJ|LJ||||F-J|FJ|FFJL7FJ|LJ|||L7||||FJL7||FJ|||J||-||-LJFJ|LJ||||LJ|||F7F-J||LJLL-7FJ|||||F-7F7F--J--LJ|
|
||||
.|FJF-7-LLLLFJ.L---7|||L7F-JLJ||FJ|F-JFJF-J|LJL7FJL7L7L-7|L7L-7|||FJ|||||F7|LJL7|||FJL7||F7-|FJF-J|||F-J||||L-7|L7F-7L|L7LJLJ|L7|||L-7J|LJF7
|
||||
F7J|L|-.J.|.JJ.LLF-J||L7LJF---J|L7|L-7|JL-7|F--JL7FJFJF7LJFJF7||||L7||LJ||LJFF7LJ||L7FJ|LJL7|L7L7FJ||L-7|LJ|F-JL7LJFJFJFJLF7FL-JLJL--JL7-7LJ
|
||||
LJ.FLJ|.|F-7|7-JJ|F7|L-JF7L----JFJL7FJL7-FJ|L7F7FJL7L-JL-7L7|LJLJ|FJ|L7J|L-7FJL--J|.|L7|F-7|L7L7||||L7FJL-7|L--7|F-JJL7L-7|L------7L|7F|.|J|
|
||||
L77JLF|7|.L|LJ7.|LJLJF--J|F-----JF-JL-7L7L7L7LJ||F-JF--7FJFJL--7FJ|FJFJFJF7|L-7F7FJFJFJ|L7||FJFJ|L7|FJL7F-J|F-7|LJ|F-7|F7LJF------J-F|J|7.LL
|
||||
||J7F7LJ-7|L-LL7F|L||L--7|L7F-7F7L7F--JFJLL7|F-J||F7L7LLJFJF7F-J|FJL-JFJFJ||F-J|||||FJFJFJ||L7||L7|||F-JL7FLJ||L---JFJ|||F-JF-----7L||LJ7F7|
|
||||
LJ-L7LF7.F7|7LJLF|7FF7F-JL7LJ-LJ|FJL--7|J7|LJL-7|||L7L--7|FJ||F-JL7F--JFJ7LJL-7||L7|||L7|FJL7LJF7LJ||L--7L---7L7F7F-JFJ||L-7|F----J|LJ7L7JL7
|
||||
L||LL-L|77-FL-J.LLF-J|L7F7L-----J|-F7FJL7FFF7F7LJ|L7|F-7|||-|||F-7||F-7L7F----J||FJ|L-7LJ|F7|F-JL--JL7F-JF7F-J.|||L-7L7||F7LJ|F--7L7.L7-L.LL
|
||||
7--7..7L|-J|L-7F.FL-7L7LJL---7F-7L7|LJF7L7FJLJL--JFJ||FJ||L7||LJ-LJ|L7L7|L-7F-7|LJFJF7L-7|||||F7F7F7FJ|F7||L--7|||F7||||LJ|F7LJF-JF77F7JL-7.
|
||||
|J7|..JFL.F|7L7JFF|7L7L------JL7L7|L7FJL7|L7F--7F7L7|||FJ|FJ|L-7FF-JFJFJ|F-JL7||F7|FJL--JLJ||||LJ|||L7LJLJ|F--JLJLJLJFJL-7|||F7L--JL-7LF7.L7
|
||||
.FF.J-JF-L-7--F.F.F7FJF-7F7F---J-LJFJ|F7LJFJ|F7||L7|||||FJL7|F7|FJF7L7|FJL7F7||||LJL------7|||||FJ|L7|7F--JL------7F7L7F-JLJ||L7F7F-7|7LL-J|
|
||||
.F|.L|.F7JFJJL7.LF|LJFJ|LJLJF----77L7LJL-7|FJ|||L7|||||||F7|||LJ|FJ|FJLJF-J|||LJL7F7F7F7F7|LJ||FJFJFJL7|F--7F7F---J||L|L---7LJJLJLJLLJJJ.|JF
|
||||
FLJJFFFF77J-J7|..FJF7|F--7F-JF--7L7F|F7F-JLJFJLJFJ|||||||||||L-7||FJL--7L--J||F--J|||LJ||LJF7LJL7||L7FJ||F-J|||LF7FJL7L7F--J7L7JJ7..LL7FF77J
|
||||
L-JJL7-7J--7JLJ.LL-JLJL-7|L--JF7L7L-J|||7F--JF7FJFJ||||||||||F-JLJL-7F-JF7F-J|L7F7||L-7LJ7FJ|F--J|F-JL7|||F7||L-J||F-JFJL-7JJ7|FFF7FFJ-7LJL.
|
||||
FL7-|J.L7LJJF-F--F------JL-7F-JL-JF-7||L7|F7FJLJFJFJ|||||||||L7-F7JFJL--J|L-7|F|||||F7L7F7|FJL7F7|L-7FJ||LJ|||F-7LJL-7L---JJLFJ7F|-JJ7LL7-|7
|
||||
77|.|L7LL7J--.L.-L----7F7F7LJF-7F-JFJ||FJLJ|L7F7L7L7||||LJLJ|FJFJL-JF7F-7|F-J|FJ|||||L7LJLJ|F-J||||FJL7LJF-J|||FJF7F7L----77FL7|JL77J|F|-FL7
|
||||
J-77J7L7LF-7L-LFJ|L|L|LJLJ|F7|FJL77L7||L7F-JFJ|L-JFJLJ|L---7|L7L-7F7|LJ.||L-7|L7|||LJFJF-7FJL--J||FJF7L7FJF7|||L7||||F7F7FJ77JF--LJJ-LJJLJJJ
|
||||
|..--|LJ7.FJJ.L--F-F7F7F7FJ|LJ|F-JF-J|L7||F7L7L7F7L--7L7F7FJ|FJF-J||L--7LJF7||7|||L-7L7|-LJF7F7.LJ|FJ|FJL7|||LJFJ|LJLJLJLJ.JJ.---JJ|JF7|-FJJ
|
||||
L-J-F|.FJF|FFF-7J.L|LJLJLJFJF-JL7|L-7L7||LJL7|FJ||F--JFJ|LJF|L7|F7|L7F7|F-JLJL7LJL--JFJL---JLJL77FJL7||L||||L7JL7L-----7J77|F|-7LFJ|-LF--J|7
|
||||
LJ7LJJ.LJ-F|JL7L7--L-7F-7FJL|F7FJF--JFJ|L--7||L-J|L-7|L7L--7L-JLJ||FJ|||L-7F-7L-7|F--JF-7F-----JFJF7||L-7||L7|F-JF-7F--JLFJL-LJF7F7|.FF7-J7.
|
||||
F-LF7.JJ|L-F7F7FJ7|JFJ|FJL-7||||FJF7FJL|F-7|||F--JF7L-7L---JF----J|L7||L7F||LL7FJFJF-7L7|L7F7F-7|FJ|||F7|LJLLJL7FJFJL---77.L77L-JJLF|.JJJ7.J
|
||||
|-LL-7JF7.FL-|J7|F7FL-JL7F-JLJ||L7||L-7||FJ|LJL--7|L-7L-7F7JL-7F7FJ|||L-JFJL7FJL7L7|FJFJL7LJLJFJ||FJ||||L7F-7F-JL7|F-7F7L7JJL7|L-F--|-LJ.FF.
|
||||
L7LF-7LJJF|FL.LJ7J.F.F7FJL-7F-J|JLJL7FJLJ|FJ7F7F-JL-7|F-J|L-7F|||L7FJL--7L7FJ|F7|-LJL7L-7L7F7FJFJ||FJ||L7LJFJL-7FJ|L7LJL-J|-|F|LF7.LJ.LF|FJ7
|
||||
LJFL-J7.L-LF-F-L|JLF7|LJF7FJL7FJF---JL7F7LJ-FJ|L--7FJ|L--JF-J-LJL-JL-7F-JFJL7||||F---JF7|FJ||L7|FJ|L7LJLL7FJF--J|.L7L--7JL7-F|F7JL-.L|7LL|-7
|
||||
JFJLL-L7J.||F7JLJ7J||L7FJ||FFJ||L7F7F7LJL-7-L7L---JL7|F-7FJ.F|-|-|JJLLJJFL-7|||LJL7F7FJ|||FJL7|LJLL7L7F--J|LL7F7L-7L7F7|.|L7LL7J||LJ.FF7||F-
|
||||
.|J||7JF-7FJ-J-FJFFJL-JL7LJFL7L7L||LJ|F-7FJF-JF7F7F7|||FJ|7-J7.|FF-L7J-LF--J||L-7FJ||L7LJ||7FJ||7..L-JL--7L-7LJ|F-J||||L7---7L|-FFFJF-JLF7J.
|
||||
FJ7JFLFF..JJ||F--LL---7FJJ-FJL7|FJ|F-JL7LJFJF7|LJ||LJ||L7|-.LJ7LJ||7||LFJF-7|L7FJL-JL7L-7|L7L7L-7-J|.F7.FJF7L7FJL7F-LJL-JJ|.|.|JLJ||-|F.-|..
|
||||
F.F----J.F|LF7F7-|JLJ-||JL.F-L||L-J|F-7L-7L7|||F-JL-7|L7||.|7FF7FFFJ-L-L7|FJ|7LJ.LF7FJF-J|FJ-L7FJ7JF-|L-JFJ|FJL-7L7.L..|L7JF7-|J7-F.L7JFJJ7F
|
||||
LLJL|FJJ7LF-J7|7F||J|.||F|F--7LJJFFJ|FJF7L7LJLJL7F7FJL-J||.LLLLJJL7.7J|LLJL7|7F---JLJFJ-FJL7-LLJJLFJFL7F7L7LJJ..|FJ7..FJ7.LLJ|.FF-J--7F-.77|
|
||||
-7JLF||-|LJJ..LJJ||FJ-LJ7J-J.7JFF-L-JL7||FJ-J.LFJ|||J...LJ--7L7J|7J7L-L77.FJL7L-----7L-7|F7|J|FJJL.F|L||L7|J|.-FJ|JF-77..FFJFFLJ-7L-J.F.JJ--
|
||||
J777L|7L--LJF-|7L7J7.LJ7F.|..F.|.J.L|.LJ|||-J-FL7|||LL..||.LFFJF--F-.F|F-7L--JJLLLF-JF-JLJ||F77.FL.|J.|||LJL---L7|7LLFF7-FJJLLJ|F7.|.7|J|F|J
|
||||
L--J.7|.|.FF7--7.J-F|--F|-7.FL7|7..FL-J-LJ-7|JLF||LJ7|7.FFJ7JLL7F7JJ.F|J.FJ.JJ.7.LL7FJJL7LLJ-J77FJ-|FFLJJ7|.|FFL||--7|J.|.L77L-L|7FL7-|L7-77
|
||||
LJ-LJ.F-|.7|...||7F77|F|J-.|FLFL77-|J.|.|JLJJ|LLLJ|-F|77-||L|.F-FJJ.|-LJ7L7J.F--7LLLJ.FJJ.F|J-|||.F|FFJ|||7.|-J-LJ.L--7L--|FFJJ7.F7J|-JL-.F7
|
||||
7JFF.FF-L-LJJJ-7JL7LLL|7JJ.LJJLLLFJLFJ7JJL.LL--JJLJ..JLL-FF---J.J.F.L.J.|-|LFF--7-L|-LF.J-JJJLLF--L-|J.L|L|.J-J.LLJJ-L|.|-L-F---J.LJJJ.FJL|7
|
140
2023/aoc_puzzle_cache/day_11
Normal file
140
2023/aoc_puzzle_cache/day_11
Normal file
|
@ -0,0 +1,140 @@
|
|||
...#...................#.......................#.......................................................#....................................
|
||||
........................................................#...................................................................................
|
||||
...............................#..........#..........................#.....#......................#.........................................
|
||||
......#.................................................................................#.............................#..............#......
|
||||
...........................................................................................................................................#
|
||||
.................#........#.........................#...........#................#....................#......#..............................
|
||||
........................................#................#....................................#..............................#..............
|
||||
......................#.....................................................................................................................
|
||||
..#.........#.......................#..............................#...............................................................#........
|
||||
.............................................................#..................................................#...........................
|
||||
...................#...........#...................#....................#...............................................#...................
|
||||
...........................................#...................................#.....................#......#...............................
|
||||
....#.........................................................................................................................#.............
|
||||
........................................................................................#..........................#........................
|
||||
...........#........................#..........................#............#...............................................................
|
||||
.#...........................#..............................................................................................................
|
||||
...............#..........................#................#.......................#.......................#................................
|
||||
.....................#...........................................................................................#..........................
|
||||
.........#.......................................#..................#..........#............#..........#..................#.................
|
||||
.......................................................................................................................................#....
|
||||
....................................#........................#..........................#...................................................
|
||||
.....#.....................................#................................................................................................
|
||||
...............#......................................#......................................................#....................#.........
|
||||
....................#................................................................#.......#...............................#..............
|
||||
...........#................................................................................................................................
|
||||
.........................#......................#...........................................................................................
|
||||
...#..............................#....................................#...........................#........................................
|
||||
..................................................................#..................................................................#......
|
||||
..........................................#..........#......................#............................................#..................
|
||||
...............#......................................................................#..........................#........................#.
|
||||
.....................#......................................................................................................................
|
||||
..................................................#.............#.................................#.........................................
|
||||
#..........................#.........................................................................................#......................
|
||||
.....................................#......#................................#..............#...............#..................#............
|
||||
........#............................................................................................#................................#.....
|
||||
................................................................................................................#...........................
|
||||
...............................#.......................#..................#................................................#................
|
||||
..................................................................................................#...................#....................#
|
||||
............................................................................................................................................
|
||||
................#..........#....................#..................#..........................................#.............................
|
||||
........#.................................#........................................#.....#.....................................#............
|
||||
.......................#............................................................................................#.......................
|
||||
.........................................................................................................................#.........#........
|
||||
........................................................................................................#...................................
|
||||
....#.......#...............#........................................#......................................................................
|
||||
...........................................#.....#.............................................................#..............#.........#...
|
||||
............................................................................................................................................
|
||||
.....................#................#..................#....................#..............#..............................................
|
||||
......#.....................................................................................................................................
|
||||
...............#......................................................................................#.........................#...........
|
||||
........................#...........................#..........#......................................................#.....................
|
||||
.........................................#...........................#.................#......................#.............................
|
||||
............................................................................................................................................
|
||||
............................#.............................#.................................#..............................#...........#....
|
||||
.#...........#......................#.........#...........................#.................................................................
|
||||
............................................................................................................................................
|
||||
.................#..................................................................#...........#.........#......................#..........
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
.........#...................#.................................#.............#..............................................................
|
||||
...............#....................................................#...............................................#.....#.................
|
||||
..........................................#..............................................#...........#.......#..............................
|
||||
..#..................................................................................................................................#......
|
||||
..........................................................................#.........#.......................................................
|
||||
....................................#.........................#.........................................................#...................
|
||||
...............................#................................................................#...........................................
|
||||
...........#.............................................#............................................#............#........................
|
||||
...........................................................................................................................#............#...
|
||||
................#...........................#......................#..........#.......#.....................................................
|
||||
#......................................................................................................................#............#.......
|
||||
........................................................................#..................................#................................
|
||||
..............................................................#...........................#.....#.........................................#.
|
||||
......#.......#.....#.............#.........................................................................................................
|
||||
.............................#.........#..................#.................................................................................
|
||||
..........#.........................................................................................................#.......................
|
||||
......................................................#................................................#...................#................
|
||||
....#....................#.........................................#.........................................#..............................
|
||||
....................................#.........#...............#...............#..............#...................................#..........
|
||||
............................................................................................................................................
|
||||
.............................#..................................................................................#.......#...................
|
||||
........................................#................#...............#..................................................................
|
||||
............................................................................................................................................
|
||||
.............................................................#.........................#................#...................................
|
||||
..........#......#............................#..................................#...............#..............................#.........#.
|
||||
..................................#.................................................................................#.......................
|
||||
....................................................#.......................#...............#.................#.......................#.....
|
||||
.#...........#........................#..............................................#......................................................
|
||||
................................................................#.......#..............................#....................................
|
||||
..................................................................................................#...........................#.............
|
||||
............................................................#............................................................#..............#...
|
||||
......#.....................#......................................#...........#............................................................
|
||||
.....................................................#.............................................................#.............#..........
|
||||
.......................#.............#.....................................................................................................#
|
||||
...........#.................................#............................#...........................#.....................................
|
||||
.#...............................#....................................................................................#.....................
|
||||
...................#...................................#..........................................#..............#..........................
|
||||
.........................#.......................................#.............#............................................................
|
||||
..........................................#.......#.....................#................#..................................#...............
|
||||
...#.......................................................................................................#............................#...
|
||||
............#.............................................#..................................#...................................#..........
|
||||
............................#..........#.............................................................#.............#........................
|
||||
......................#.....................................................................................................................
|
||||
.............................................................................................................#..............................
|
||||
....#........................................#.....................................#.......................................#................
|
||||
.....................................................#..............#...................................................................#...
|
||||
#....................................#....................#.......................................................................#.........
|
||||
................................................................................................#...........................................
|
||||
...........#.........#....................#...............................#.............#................................#..................
|
||||
............................................................................................................................................
|
||||
......#..........................#...........................#...........................................#...........#......................
|
||||
.#.............#.........#.........................................#...........#.....#..................................................#...
|
||||
.....................................#...................#.....................................................................#............
|
||||
...........................................................................................#................................................
|
||||
...................#................................................................................#..............#........................
|
||||
...........................................#......#........................................................................................#
|
||||
..#........................#..................................#.........................#...................................................
|
||||
........#.............................#...............................................................................#.....................
|
||||
...............................#........................#...............#..............................#....................................
|
||||
.................................................................#..........................................#...............................
|
||||
....................................................#........................#........#....................................#.........#......
|
||||
....#.........#....................................................................................#.......................................#
|
||||
......................#.....#.............................................................#.................................................
|
||||
#......................................#......#....................................#...............................#.............#..........
|
||||
.......................................................#..................................................#.................................
|
||||
.........................................................................#......................#...........................................
|
||||
...............................................................................#............................................#...............
|
||||
....#........#................#...............................#.......................................................................#.....
|
||||
.......................#.................................................................#..................#...............................
|
||||
.....................................#.............#........................................................................................
|
||||
...................................................................................................#......................................#.
|
||||
..#.........................................................................................................................................
|
||||
........#.................................#.............#...........#................#......................................................
|
||||
...............................................................................................#............................#...............
|
||||
.................#....................#.........................#..................................................................#........
|
||||
....#.............................................#........................................................#........#.......................
|
||||
.........................#.............................................#............................#.......................................
|
||||
......................................................#.................................#................................................#..
|
||||
.............................#...............#.................................#............................................................
|
||||
.........#....................................................................................#........................#........#...........
|
||||
..................#...........................................#.................................................#...........................
|
1000
2023/aoc_puzzle_cache/day_12
Normal file
1000
2023/aoc_puzzle_cache/day_12
Normal file
File diff suppressed because it is too large
Load diff
1311
2023/aoc_puzzle_cache/day_13
Normal file
1311
2023/aoc_puzzle_cache/day_13
Normal file
File diff suppressed because it is too large
Load diff
100
2023/aoc_puzzle_cache/day_14
Normal file
100
2023/aoc_puzzle_cache/day_14
Normal file
|
@ -0,0 +1,100 @@
|
|||
O...O..###.#..#O...###.......#....O#.O...O....#.O...O..O..##.O.O#...O........O...#.#.O...O#O.......#
|
||||
...O#..#O...#....O..###.O.....#......#.OO.O#..#.O..##...#....##...#.O....##O##OOO..#.O..OOOO..#..#.#
|
||||
...##.OOOOO#.OO....OO#O.###.O..O...OO.......O....O...OO##....#..O.....#O#.O.O.#O..O.##....##.#.OOOO#
|
||||
O..#O..O.....#.#...#....#O.O..#..O.O..#O#..O....O..O.#.O.#..O.O#...#O#...##O.#O.##.OO...#.#.#OOO....
|
||||
.#O#O.O.......#O.#.O#.O..##.#.O.....#..#.....O..#..###..OO.#.O.OO#..O.O.........O..O...#.O.#....OO#.
|
||||
..........#...O.OO....#.O.O##OO#......#OO.#.O...O....O..#OO#..O...#..#.#.....O#O#..OO#...#OOO.O.#O..
|
||||
#O#OO.O.#.O.O...O.###O.........#O.O.#...O.#..O.O..#..O##.#O.O.OO.....OO.#.#.#..#.O..O#......O..O....
|
||||
.#....O#O.OO..#..O#..O..O..O.#..O..#.O#....#.O....O.O.....#O#....#.#.#..O...O#OO#.#O.#O.#...OO..OO#O
|
||||
.O.........#.#O#....O.O#OOO......O..#O#...#.....#.......#...#....#.##.O...O..#O..#O...O.#..O.OO..#..
|
||||
O...O...O.....O..O...........OO.##..OO.OO#.O.##..O#OO#......O..O#.O#.OO..#####......O....#....O...#.
|
||||
.....#O.....#....#O......#..OO.O.O.#..O..O....O..#.#..#.......O..O.O....O.OO......OOO#.OOO......O...
|
||||
..O#.O.O.#O#O...#..........#..O##...O..O#OOO.OO..##O.#OOOO...#..O....#.....O...#....#.#.#...OO.O.#..
|
||||
#.......#.O....O#.#O..#OOO..O..###O#..#.O...OO.O.......##O#..O#...OO.........OOO.#O...O...#OO#O#...O
|
||||
#O#...#O.##..O.........O#..O..O..........#.##..OOOO...O..#.OO......O#....##....O.O...O.OO...O..OOO.O
|
||||
.OO..#.....O#O..O..OOOO.#.#..#.O......#..#..O..O..O.#O..OO....#...O##O.O.O.O.#......O...O..#.#O...#.
|
||||
..OO.O......O.O.OO.....O.#..#.O..#O.#.O.....#.O..OO.OOO#..#.#OO.#.OO#.....##O....#.#O.....#..#......
|
||||
.#..O#.#O#.....##.O.#......O#.O.#..#O.#..O#.OO.O.#.O#..O.....#.##..###O..O.OO.##.O.O..#......###...O
|
||||
#.O.O....O##...#..OO..#...O#O....O....O.OO.........#..OO..#...#...OOO#O.....O.#.OO.OO##.O....#......
|
||||
O#.O.O..#..#....O.O.......#.#...#...##O..O.O...O.OO#..#O.O..O.......#...#O.#.O.#O##.#.O..#..O....#.#
|
||||
.O.O..#...O#..O....O..#.#.OO......O.O.O.O##........#.O#.#..#....O..O....O...O##OOO..O.#O..O.......##
|
||||
......#..........O#..O..O..O#.OOO#O.#........#...O.#..OO..#.#.#..O#...###.#...#.#.O#..#O.#O....O..O.
|
||||
..#.......O...#..O..O#..........#.......#....#...O........##O....#O..OO.###.O#.#O........OO#.#O..O#O
|
||||
.....#.O.O........O.#.O.#.O...##.......#..#........#.O..O...###...O.O.O#....OO.#.....#.......O#..O..
|
||||
#..O.O.O#.....#.OOO##.....O..OOO.OO...#..#O..OO.O...##...#..###......O...##..#....#..OOO.O...#OO.#..
|
||||
..##...O...#O..O#.O.#...O.O#......OO..O...O.#...O.O.OO...O.O.O.#..#O.O........#.#..##.O.....#.#O...O
|
||||
..#O...O.O.#.O....O#.....#..O.O................O....O..##O#.#O....O.O......O...#.....O..O#...O..#.O.
|
||||
..#..O.#......O#.O.O...O#...O#.O#...O..O....#..O...#.#......#......#O....O.O.O..O..O..#....O..O.....
|
||||
..#...O....OOO.O##..O#.#.......O##.....O........OO.O...OO#.....#......O.#O#OO##O....O#.OO........#..
|
||||
....O##..#.....##.O##...O.#..O...#O.#...#.#...#O....O.O.....O.OO.##..#O...#O.O#.#..O#...............
|
||||
O..O.......O#O.......OO....O.OO....#...#O.OO#..##O....#..#.#O#OO##O...O.O...#...OO#.....O..#..OO....
|
||||
..#..#O....#...O.##...#O#.O..O.O....O.....OO#O.#..#.....O..O.###.OO.O.......O..#.......OO.#.#..O....
|
||||
#.O..O.O.#O..OOO##OO....O.OO#OO...#OO.#.#O.OO.OO...#..O.....O....O.O.O#.OO..O.#..#.O.O..OOO##..O#OO.
|
||||
O.#O.#.OO.#...#.##..OO...#.O##..#O.#.#.#.....O.O##..O..#..O.O.....#....O...O......O..O##.###..#O.#OO
|
||||
#.........#....O...O........OOOO.##.O.O.#......O####O..#..O##.O.#O.#O...#..#.....O...#.#..O#.#...#O.
|
||||
.......#.#OOO.....O#O..#.#....#.OO.....O..OOOO#...#.............###.........O.OO..#.O#O..O...O..#.O.
|
||||
O#...O.......O.O..O.#.O.....OO...O...O.O#OO....##.##.#O#..........O.O.......#.....O.....O.O..OOO#..#
|
||||
#.O#......O.O..#O.O..O....#..#O..#.#O.O...OO...##.#.O.O..#..#O.#.#.O#.......O..O.#...#O.....#.O#...O
|
||||
..O..O#...##.#..##..#O..O.OO#..#.##O.O..O..#.O..##.O#.O..#.O.#...........O#.O...O.O#.#...#..#..O.O.O
|
||||
#.#.O...OO....O..O.#O.#.OO..O#..O..O....O.#.#O.##O.....#.O.#...#...#....#....OO.......#.O..O...#..#.
|
||||
..O.O#O..O.......#.......O#OO..O....O##.....O.#.O..#.#.....#...OOO.......#...OO#......O..........O.O
|
||||
..##.#..O.O..#....##..O...O..O#.#O....O##....##O.....OO.O..#.O.O#.#.....OO..O........#........O#O###
|
||||
..#.#...O#..O.......#.OO##...OO#O...#.O....#OOO......O.O.O.#O..#.....##..#O#.OOO...O......OOO#.O.O.O
|
||||
O...#...O..#O......O.O......#.....#...#..#.O...O.#O##..#.#...#..O#....O.#OO#..O.....#.#..#OOO#...OOO
|
||||
...##..#O...#...O.##O.O#.........O........OO#O..#.OO.#....O..#...OO..#O.......O..O.O#...#......OO..#
|
||||
.....O.O....O.O#....#O#......O.............O.OO#.....#OO...........O#.......#......OO#O#.OO..O..O...
|
||||
O##.....O...#.#.#..O..OOOOO..#.#.O##.O...#..O...O.....O.#.#...###O.O..#.#.O..O#....#.O...O#.O.......
|
||||
#OO.....O.O.#...#.O#.....OO...##.O...O......O.#O.........#.O....OO.OO.#.O.#O.O......#O.###..#.#.OO#.
|
||||
.OOO..O.OO#O..O##.......##...##......O..O...#...O...#.O.O.#.#O.#OO...O.O..#.O#...O..#...OO....#OO...
|
||||
.##.O.OOO..O#.##O...#O#O...#...#.....#.....O...O......#..##O.OOO.O#..O.#..#.#..O........O..#.O#O....
|
||||
....O..O.............#......O.#O..OO...OO.....O..#..#......OO......O....OO..OOOO.....#.#O..#.#...O.O
|
||||
.###.....##.#......###....O#....O....O...O....#.#O.O#..#..O..#O...OO..OO.O.....#O.O..#.#.....O...O#.
|
||||
..O..#O...O.OO.O........O...O.O.....O..#O.O.O...#........O........OO.O..OO#O.#.O..#.#O#...O.#.##.O..
|
||||
OO..OO.O..#OO..OO#..........#...............#.O#....O...O.#.O.O#..#.#.OO#...O.#O..##........O#.O....
|
||||
#.O......#....#...O.O...O....OO..O..#...O..O..#..O#........###...#..#.#..OO..O.....#.....#...#...O..
|
||||
..#O.O..O.....OO...............O....#.....O.....#O.OO.O..O..##O....O..#.#.#O...O#O##O#.#OOOOOO.#..O.
|
||||
#O#O.....O..#...O#......OO...#..OOO#O..O##.OO..#.#.##.#.OO..O.###.O.#..O...#O#....O....O##O..#O.O.O.
|
||||
..O.....O#.O#.....OOO.O..O......O.O..#O..O.O.........#.###..#.O.O.O.OO#.O..#...O.#..#.#...O##.#...O.
|
||||
#..O#..O#..#...#.#......##.....#OO.O#.OO..#.....OO#...O.O..O.......O#.#.........O.#O#O.O..#.O.......
|
||||
..O.#..#..O.O..##..#.#O.......OOO#.O.#.OO.##...O...........#.O..#...#.O........O..O..#.....O.#.....O
|
||||
O.....O.....O...O....#..#......OO#....O......O..O#.#...O...##.O####O#..O.OO.O.O.O.##...........O...O
|
||||
OO#.O..##O.O..O..#.#..#...#...O.O.#..#...#.#...O.#..#O......#####..##.OOOOO......O.O..#OO.O.#..O.O..
|
||||
O.O..#.O.OO.#.O.#....O.#......O.##..#O...O..##.#...O.#...O.O....#...O.#...O.......###....#....#.....
|
||||
#..#.........O....#........OO.#..OO..OOO....#.....O....##O.O.O....O.O..O....#O#.###.O...#..O.O....#O
|
||||
#...O##..O#..O..#.O.......O.....#....#O###O#OO.O.O..O...O..OO...#.#.#..O..O...O..#...#.#....#.#.#.OO
|
||||
......#..........#...#..O..#O#..O....#.O..O..#.O.#O...O#.......#........O#O....OO.....O..OO...#..#..
|
||||
O..O...#...#..O##....#.O....O..#...O..###..O...O....OO..O..O.........O..##OO......#O...O.O##...OOO.O
|
||||
..#......OO.#.......#...O#.#.O#...#...#O...O......#.....O#....OO........O#O.......#O..#OO#.O.O....#.
|
||||
.O.##....#OO.O...O#....O..O......O..#.....#O..O.#...#.......O....OO#...O....#....#.O...OOOOO.#O.O..O
|
||||
....#....OO#..#O....O...#.OO#...#O......#.#.OOO..#...O#......#...O..##.OO..O....O.#O...OO.#.#.O..O..
|
||||
O.O....OO#...#..O...O.#OO.O..O.....#....#.O..O.#..........OO..#.#.#.O...O.O.#.#..#.#......#..O.###..
|
||||
....#..O.O....OO...O.....#.......#........O..#.OO##O#OOO#O.......#.#.#....#.#.O..#.O##.#..O....##.OO
|
||||
O.....#.#....#.........O.O....O..O#.....#O.O#O...O#O...O...##........OO.O.........OO..#...OO.O..#...
|
||||
.O....O....#.#O..O...OOO.......O..O..O..#............O.....#.O...OO....#.O#O.O##.#.O........#...O...
|
||||
..##.O..OO#..O.O...O....##...O.......#..O...O.#O.O..........O.#.#OOO#..O...O..O.OOO.....O.........O.
|
||||
OO..#..#.....#....##...#..#..##.O.OO...O#........O..O.....#.......O.O.O..O...O.O.OO..O...#.###.#.O##
|
||||
O.#O...O......O.......O#.O......O#..O..#...##.O...##......O.O.#O.##.O.O#....O#O#..#..#O#...#........
|
||||
#OOO.O...O...O.#.#O....#....O..#.#..O.......#OO......O........O#..O..##..#.O...O...##O...........O#O
|
||||
.O.#.OO..O.....O...##O.#O.#...O#..O.#....#..#OO#.#.OO...#.O#...OO......O.....#O..O...O...OOO#.O..O##
|
||||
..O...O...#..O..O#..O.OO.#.OO.O...OO.#.....#.O..#..#O..OOO.##O#O....#...#O.O....OO..#.O...OO#O#....O
|
||||
#O..OO.###.OOOO....O#......O.O.#OO......OO..O.O..O...O...O..#.OO.....##.O.OO...O..#O.###..O..OO.#.O.
|
||||
...O.O##....O.#..O#.OOO#.........#....#....#.......#.O...O...........O.O#O.O#..OO.O#....O.#.O.#O.O..
|
||||
#....#....O..O..#.....#..O#O.#..O.O.#O.O....OO.#.#.O.O....#O....#..O..#.O.#O...#.....O.O...#..#...O.
|
||||
.#....O.....O..OO.O.O#..#...##.....OO....#.#.OO.#..O..O.......#......#.....OOO#O.#######.##......O#O
|
||||
#OO..#..OOOO.O..#.###..#.O..#.O...O#.O..#....#...#OO#..#....#OO....#...OO..#...O.O.....OO...#.O.#...
|
||||
#..O....OO....#.#.OO...O.O....O.##..#.O..O....OO..#.O..O.OO......#.#O..O.O........O.O.O...O.....O#.O
|
||||
.O.#...O.#....O..O#.O..O.OO.....O...........#.##OO....O..#O###..#..O.O.O.....#.......##O#.#...O.....
|
||||
.....O.OO.#O.O##............O.O...##.O......#....#....#...#.#...O...#OO.#.O.....O.#..O...........#..
|
||||
..O.OO..#O..O.O.##.O#..........OO..O...OO..OO.OO.OO#...O.#O.O...OO.......#OO.#..#..O...#....O.......
|
||||
O.OO....O#....#...#.#O##..O#...#..#......O.......#O..#O..O..O...#......#O..O##.O....O..O.O#.#....O..
|
||||
.#.O..O..O.........##O..#..OOO...O##.O.#O#.O...O.#....#..O..O.......O..#..O..O#..#....O..OO.##..O...
|
||||
...#...OO.OOO..#...O.#.O.......#...##.O#.##..##..#..#.##.....##O..O..O..#OO...#....O..O.......#..#O.
|
||||
.....O...O.#......##O.O..#...#.....O..O....#O#.#..#O.#....O#.O...#O....###...OOO...O#..O..O..###..O.
|
||||
..#..........O..O..O...O...O....O............O.....#O....O..#.....#...O.....#..O.#.#..O..O...O.#O...
|
||||
...OOO......O...#.O#....##..#...O..O#..##..O....#.O.OO.......#....O....##.#.#.O...O#.#O..OOO..O.O...
|
||||
O...#.O....O..OO..O...O....#.#.....#O#O....#O.##.O.OO.#.O............#.O#...OO..OO#..#O.#....O......
|
||||
#.O.....#.O#.OO.#........O..O.#.OO.........#..#...#.O#O...O...O..OO.#.......O.O..#..O.O...OO..O..O.O
|
||||
..#....#O#.O.O#.OO..O...#..O......O#O.......OO..OO.....#O#.O.O..#O.......OO.#.O..O....O.O.O.........
|
||||
#...O###O..O.O##..#.#.##..#...#.#.#...O.#....#.....#.#...O#..O.O...O..O........#.###....O...#..#...#
|
||||
.......O........O.....##..O##...O...OO..#O..O...#...O.........#OO.....OO.O..O..#OO.#.#O..O#.OO...#O.
|
||||
.OO..O.....#.O.....#O..#O...O....#..O.....#....#O......O...#.O###.OO......O..O.......#####.........O
|
1
2023/aoc_puzzle_cache/day_15
Normal file
1
2023/aoc_puzzle_cache/day_15
Normal file
File diff suppressed because one or more lines are too long
110
2023/aoc_puzzle_cache/day_16
Normal file
110
2023/aoc_puzzle_cache/day_16
Normal file
|
@ -0,0 +1,110 @@
|
|||
\\..../........-...-........-.-.|..................-...........................-.........-...---..............
|
||||
..../.....................\...........|........|...........\...|./...-...|..|.|-.....-.....|........\....../..
|
||||
............|...........\.....................\....|.....|/./........../.....................-................
|
||||
.......\.|.\-....--../..........\.../.../.../......................\.............\............................
|
||||
.............\/...../..........................|....-.....-.......\|...........-....|.........................
|
||||
.-............-../......|.............-................../|....-...-....../|...-....--...\.......\..|.......-.
|
||||
.......-......./....................\......................\.....|........../.......\............|..\../.../..
|
||||
........................-.....\.......\........................./............................|......\..-......
|
||||
...................-................./......|.....-....\\............./.....\.................................
|
||||
.............|.........................\.|.....|\....../.......|..............\\../..................../......
|
||||
-......\......./........\.-/...................|../-./................/.........................|......\.....|
|
||||
..........................\...........................\...........................|...........................
|
||||
....-...../|.............................-........./...-..................|..........\..\................\....
|
||||
............/........-.-.................//..\................................-.......|.-............//....-..
|
||||
.......-.....|.\........\...|....-......./......\.......-.......\...................../...\...................
|
||||
...\.|..-........./........................-.....|..-............................\..-.........................
|
||||
..../.........................................--.............|...................................\..../....../
|
||||
..........\...........--........./.|.......\./................/.........\.|..|......\........-//............./
|
||||
...\.|..\......\.......-\........\|......./.......\..|...........-..............\-..|...................\.....
|
||||
..../........|..|.........................../..\....................|.......\.......................-........\
|
||||
.....\.......\...\.|.........\.................|......|..-...................-.../.\...................|......
|
||||
........\................./..............-....-..................|.....\|\................./...../............
|
||||
.|................\../..........................|.....\.......................................................
|
||||
...|.........................|........|...|...\.-.-...................\..|./..\\......|.../..................-
|
||||
......-..................................|.................................\.|.\..-........\..................
|
||||
.-..........\|..-.....-.\..-...............\........-.....................-.....|....................\..|.....
|
||||
..../....-..............................-\................................................................../.
|
||||
............./....................\...................|...........\.../.............-......-....-.............
|
||||
........../....../..-.|.............\\......../.....................|....-..........\.........\....../........
|
||||
.............|......\......../../..........|...........-......\|........\...........././....\..........|......
|
||||
......-................../.....-................-..............\.-..............|................|............
|
||||
...-...-./..................................................|.\..\........\-........-.................\.......
|
||||
.......................\.\.........|................\....../.|....\.../..\.|\.....-.|..............-..........
|
||||
..-.........-|...\.\....|.-.\........................\........................./.-................/..........-
|
||||
.........|.......-.................\/......../...............\..|..................|....|..\..|.............\.
|
||||
......\........................-......\..-...-..........-......./....\........................\..............-
|
||||
.......\...-....\\...........................\......................./..|../........./................|....../
|
||||
...............|...|..\..-......................../............\-............/.\..........-........|.........\
|
||||
...-..\......|......\............/................/...\../.|../...........|-...........\.........\.....-..|...
|
||||
.........\.....-......|..................-.....................................................-.............|
|
||||
....../.....|.................|./....-\......................|...-..............|...\..-.......|.......-../...
|
||||
................................/............\..........\................./............\.-.....|............/.
|
||||
........\.............\.......|..................-.......................-....................................
|
||||
....-.-................\..............-......-.../............\............................../|...............
|
||||
............................\.\..........././........|..\/....-|...................\.......-...../.\..........
|
||||
-.................../...\....../.|.........................../..........\...........\..........|......-.......
|
||||
...|-|...............|...\..../|.............-...............\.........-....|-...................|............
|
||||
..\\.......\.....|....\./\............./.|...../...\...........................-.......--......-.......\\.....
|
||||
....-..//...../....................|....-...../\..................................|......................-....
|
||||
......................................../..-...................../.......|.--......\....|..-..\...............
|
||||
.......-..\........../..................-........\...........|..|.....\...-.....\../.-..\.....-.||...|..-.....
|
||||
/./....../|...................-............/.....|..-..................................|........./\....-......
|
||||
................/............................/......-...\...............................\..........-....-....|
|
||||
.........\.....\......-.....\.........................-............./........./......\...................\....
|
||||
.....................|...................|...........-............./........\.........../.................\...
|
||||
........................................../................-|.......||....\...|......\........................
|
||||
|..-.../|......-............-.....||...|...........-./....................../...\....\-........//......\......
|
||||
../.-......../........./.-..|..|....||........./......-..\................../.....|.....|...|....|\...........
|
||||
.-/..\...........\........\...............\..................|......../............-...........-..........|...
|
||||
...|..|................|............./\....-....-...-......-......-................-................/........|
|
||||
..-....\....|...../..........|..-./.\......./|.........\.....-|.......\.......................-...|...........
|
||||
-.......\\...................-....\|........|............|.......................\.............\....../....\./
|
||||
-......................................../.............-./\.........\.|......./|......../.....|...............
|
||||
........-.\\\...............-.../............\.................||.............../../..........................
|
||||
.....................\............\............................-..|.........\......................../........
|
||||
\..././.....|....|.....-............\./....-.............|..-...-..........-.|....-...\..........|....\.......
|
||||
.|..........|.....|.......\................................../......./.../...|....\...-..-...\................
|
||||
..\...\......-..........................................-.........../........--..........--......|............
|
||||
................................||...-.....|.....-.\..............\.|...\...............-...-.................
|
||||
............................../..\..|....../.......\......\...-..|../............-.......................\..\.
|
||||
./............./..|.......|............-.........|.......\../...................|....\...................../..
|
||||
.|...................|\...................|.....................-.......\...|................-|...............
|
||||
/|......./../.........\.................\............../.../......|....|......./....|-..........\.............
|
||||
............|....\.............-.....-./|/.................../......./.\...-.........-..................|.....
|
||||
.-.../..........................\\.......|.......|.....-........../........\.................|.|..............
|
||||
....-.\....................../.-......||................/\\.........../..............|........................
|
||||
\/.....\....-......|...................|.\......\.|............/...\.|.../................|.\.................
|
||||
..-.\...............-......../.......\....../........-.......-\....../......|../..................|../........
|
||||
..-./..........\.....................................|.........-.......|................/........|............
|
||||
.............-....../......./......................|.............../............\..../........................
|
||||
..|......-........|...................-...........|............../........................|../................
|
||||
..../..........|-.....-......./....../......./.\.....\.........-...|......................................\...
|
||||
....\......../..................../..-......|..............-.................||...........\.\...|/............
|
||||
........\.............|.................................\......./.............-.......|..............\.-......
|
||||
.....|...........-.............|..........-......\..................................|..-............\.../.\.-.
|
||||
..................................\...........\...\.......\................\-.................../.............
|
||||
......-............../...........-......\./..........|..\..................|...|....|...|-./..............|...
|
||||
........\..|.\......................../..........\..........\.|..|../....\..|.....|.|..............\..-.......
|
||||
...........-..........|..../.-........../..................|......./.................\.............../........
|
||||
..........-..../\....\........./............/..................\..........-/................................//
|
||||
.............-../.-.............\.............../-....-....|..../.............|...............................
|
||||
........./............|....................|./........\...../................................-.......|........
|
||||
........./..../..........\..\.....././.........|...........\..................../....../...\.........../.../..
|
||||
.-....\.........\....-............/...................-.....|.....................|...........................
|
||||
................-.......................|.........|.................................................\.......|.
|
||||
...../............|....//...../................|.\...........|............\.....|-........|.........\.........
|
||||
\..././-....................|...................-..............-..............|.........|....|............./..
|
||||
..-...........................././-./...\-.................|...-.....-/........\....|............\-..-........
|
||||
...............|...............//........../.......-.-......................-.........|.............\.........
|
||||
../............/..................\\......../............................\................../........./.......
|
||||
......|.\...............................................|................................/.........-.-........
|
||||
....\.\...\..................-..-.................\\.....-....|................\.................|............
|
||||
........................./.............-...|./.................\....|....\..|...|..........\-.................
|
||||
..........|.............\..................\..................../.\.......|..................\/......|........
|
||||
............|....\..\..../...........-....\....................\...........................-../...............
|
||||
.....................|......../.././.............\......|.-......\.............-../...|...............-......|
|
||||
..................-...................................................-.............\............./.|......-..
|
||||
...\.............||...........................\........\......-......-..\...\...\............./-...........|..
|
||||
...\........|...................|.......|.............|..-......../..-...-............/.........\....|........
|
||||
......-...........|................./......|.....-./|..\\...............\|././...............-........\....\..
|
141
2023/aoc_puzzle_cache/day_17
Normal file
141
2023/aoc_puzzle_cache/day_17
Normal file
|
@ -0,0 +1,141 @@
|
|||
314412134515235343233533333536633455653353226524463545367577644655564375735567774443767545555476326253354625332434443364224465621314212153555
|
||||
541151354452244522426632553456444465355436252633745744545656765664467373344353475666347765767443443552326263264235346622346265464551153535535
|
||||
331313213153324653452333663333462335265624455475544677337533645646454544573377667566554353775343377532656434266344566626434262245532313441542
|
||||
231231134242452536244266236256525426355273354474573763575656667355645557536446754366667563657447367737456645352222534556245645343351335322223
|
||||
251433112552564352445455233433553362245337533756634643733533466354356373567633334767437674677465346746774546242625352644324265246422513313355
|
||||
413125324132545243423242425355265226355444733776744656536465355674555733753474534534433566567674774473567333452433553242344623352255235253434
|
||||
532355354346566256462226323353453233574773645645433345534463465454533556537575575577754774536656666577567366323533434336553634632645651225243
|
||||
455311523432626356642246453352635354666745454767466646743434437774334444766744753773634355543363377575473337333424664332326565454236653544323
|
||||
424523363662246263654465624464655447744774567556775663763465367677374675753355374345346677343654333775353543635753655256634466626335324551131
|
||||
312234524445243642435564344443643546563334674463666677677375666374376637677377675656367674677655374445445436364656344562424423465563566224112
|
||||
115435666634232345425362663436566563773563533376643646553453766464636476757674637467374456676436444363454454565354445236442434463546522456311
|
||||
154534345264644332453643233644775666573434664657335643647354474373543563433577357373746663547554745737536477775465743462232356456544633335612
|
||||
451266255244444535322452434645573365766537743665343557476666464758667467776574476764465334655477443443745655654457677624263534623665264555224
|
||||
353335563222253235535444636573356337445367344474777333557878464768444788856675585565465366454733456455674536433473654575346243664464634353361
|
||||
133423654653562566524555363736665736664674537436557377575766444544774854555847644678448674465647577673665776754454646667262236226252353332253
|
||||
133244534342626454662664766673363454654775367333568448688558578768686448546868444748457676856473435435676655374655443447465552545633333543332
|
||||
243466552334262456344733345534573753356536657446767756788575445478764548775685776647768646456856765643745556543743664466543662642344456546633
|
||||
225656624252654654257373356646344537466547455766887558787658686656447855868447485884684656856578745535456436454746473564736542642544625222354
|
||||
263225332334642334675643644754654536773763445878468566857854558584444644768557757487854646584847654777756335644546467463376674663436535646452
|
||||
462346565445343656664446656746533643745447844866758554785454458448648877657447474444486777886656567775334434446577467565433575636665445223642
|
||||
363266453445466566556667366355434346533355777566657774487686846454565466845574688847467448668876766446676776475563644443566363242625262335623
|
||||
325363664656255465436433336773567347537767485744446565664446855866487664586568787776655755686868765886664344557456735673467475426333444333354
|
||||
622523453334652767737546677766537644476465885765644778876688488446747664448447488668445647744766848776656844776733757447477443333425525625425
|
||||
333623242525533576376533574476577337665748887566464644665446655885548856787747865488577777487546544876644587367343333376355575457243464345323
|
||||
543454255433367553446637345433677465656546447845788656747548755757888785557588445647856758456654456888685858475473564764673634765655244332245
|
||||
623536555425575563774673767455733665777686666786545674684485686454886457575558854685585754647856666454488644483445777757775736767455653333323
|
||||
335365452534347455445473435765736686586454476877577676868665648588444785645788688755665567847847585545847774845545765767665374567754666353346
|
||||
465462453636344566675354655574674445647778775756448777556676575896785898598558875578854754655544448684755674768743663367375367764556356656544
|
||||
363442635343777335564633673354845878587776886578665748646577867786688655765785766556946866764484465548878588568456776747534365377563626244552
|
||||
232634453453763747553644733568475457767854754657478566598876656677877858987888958665955775887757458758846446485486633766635574537637743535463
|
||||
522344452575745446776443535457848555475857457855478488988789876956765857655568587967855966667854884755868658474447474543647465737337736454553
|
||||
663552627334333773546633445548767755868645584584477759875859697897758656889957568796889865757587657865664687876775763343644433447356576623322
|
||||
445264645556337754376544665585466787575557454745756756569865889888669678579697997988759885795864747457454586846847864776454355655747776434462
|
||||
622455277467655667357753578774565877584888457466786879796679896785676566558958878758687656579956856668584545646457888846333776555447355326455
|
||||
332544567353564566667655876454688564476674785685585555898896589897779866986569586598987767875687986855654688558578465866465363654354575635354
|
||||
362352774453665775437766846688756656644468774687855675597596697959675558598777586676566558856799988477458485845764474846545665733565465642235
|
||||
653443463447775343644765866587748864448654759898689676566898666986677759957898699679989767966696878566674676885568556746354374333576755645346
|
||||
233457756564473374745676786648657667555644559576795697887955798889695765895777795769767775857776555687668866577657748875665546353337347453544
|
||||
544435543735775756436586648877447574576649986595589858785976896678788775858975897998958798577699775668576788768487847776466567574473543737433
|
||||
552254545736366367557746645875766864684655876967787578968965796566679766856567978896897569787898896679846454688458564765474667745344575656652
|
||||
446576536675377537777877667464484755588965569999587859678868658589679797766778779556888989997779955859977746666655578676475336765356674466355
|
||||
664473477475337634746565456787867874856975589795859955596796869957859878755688955799686898799975987695678655645557444554578533555356365636576
|
||||
465574733563457536788876484884757745657879799597655969996679655767876986677677885995975575988689878558975568885475654565747543764777545434764
|
||||
655353564364767347457778866577575747857576977959767669999755887968768679988668899777968856587559585695675755788768567745454887754734566654776
|
||||
367447364467773735858756877784568848579768578757989966677688997788886686879996878778959688959859779665977976845865465575445443764647473556443
|
||||
575575376547735375465674555454756677556699558557789786866688889777886986677798966766867857656867689689857999565775845768554668773553355667455
|
||||
234337435764637437477847577878544788568595659969575976666789796968969867888879989998669978798695996588697968856484458578564864454363357443746
|
||||
757374646667343374658776784548485699556687968567959887878767769896667677769799977697998887555798975859969987654847844667488486337577646667436
|
||||
746675344636443355447847877775585975688786658585856976688798979766676667669777869966786696985578695567558879587875686667857658435634537537574
|
||||
565477576353557754765856675584756757758869688899685888866867969967789996777977696786786799899578969989676858577478878648884558444634344565534
|
||||
545776547376457656484767664474675785787867996876586886969967867667968766667869896988688866988899565575789556889485458685687857857634755536555
|
||||
556547536534744464666677768654665678867877599566799896796696767679697779667679787798778776868867566879877875598887644644556565875437573346464
|
||||
475674567766655748846675487577896855868786656856889676967777888896899798696668996799767868967695859567789998779678567645654866474475575474564
|
||||
575776574667667488585664655566878858856696985666978969677996768866897769698998978797769697696678578875896978895756568847474676767653445435775
|
||||
654337754774366757587856446454599578896669889566879786768967788796796669876779987979768676978667976655798586598867767646745874485743333475573
|
||||
654535367644768656654887558678576586959758878969989678877897997899999966989878689799986869688867799655667586798667456578885664544463374435766
|
||||
373454367345364747845477877778675566899885865996967677867679667777788676989889796668969976888798995987599977865979678558884576658675654335775
|
||||
445765373433585588645685488858679558587596589669677997776969767976999889898898766997786967866698797999857865789796785754485546845444454775674
|
||||
337734475564468456565466675695986676969896699869686898678978677788879779787799996887768688996869667576965976777685546448666856777733574373737
|
||||
644734774466757856744886858488965696559799868986877886989867976897888778788788798986886797677969698965795977998975557467585758586844655756455
|
||||
554577373345575856457564758579875559586586796866798868679677697988989997977997877768988676689966886665767569769698685685548846746574457776477
|
||||
667557463566744755788558777855777886587799679787686877796677897998989989988989787886668788678666969975976669795676556888447866647567743646364
|
||||
477373654454748646848578744889989655567667976978866867686997789989879798778898999797966898766997896877988557566598698448764657467667475673343
|
||||
547767744463684588776576646599966657599868977798867767969869998988789788779979999878667887668677976995895669795776694454475565788475343635657
|
||||
575346733753567857486747775687658558698895999787897796978778979899978798987797778998888699888676688686959695889576575786886446768854464455437
|
||||
473546446375756484756475658876679886997566686887666679669897979779788997978979778799998867676769798987567787967859975765844867475587534537454
|
||||
776453776365684567446656644967786587775958996676668967679898799998788799879898877877989898977976777678699685585766764777775447488756354556446
|
||||
736736635634666666775484566586558589788997989786967767799887998789888988797899987888989886989697987667599676976788787665844667557685574343647
|
||||
573544375367857645884646554755995555778899999998889786688779888888989988897997798979897867888697867777955555886985854554867878658455476654776
|
||||
547366346654785856677675467857768875867789767867687996698877797797899878799797879777887699877699896968665989587996796455854847576445446464566
|
||||
553774575776675458645746458988598759889577967677669966899798979999979999789878997799789966699879979775697777599869796745465885585456345737663
|
||||
353767574665657756756574574787569598778898766697776969787797997797878998797878779887779986689876898989659798867989978566746888666457646435435
|
||||
653737743445665787556877448595787969666796786787697768767778799999788897889878889979979888788689777869688958985877955585488544558456364563435
|
||||
763637337773885888664576787665577575587575866776988989688778799898797888889889798798876887679867876995756675876698764657588677588473535647734
|
||||
637644466754745688456758488895558797777587677768679999666877988788777879979897997898778676778876797665975669889776876777657444686464667776673
|
||||
666575766736756646478667475789986767858855969986999798899899997877987998799899899987896677686676868779995578576986677485854676545866776337365
|
||||
766455377434588788655477784898599856578797767798869686878899988797778797777877899788897777699996979975569757859898676546748776486667636474556
|
||||
545447346666475474465466565586969777578988877798779686777788998788798997877998897979899997796697788985669755797567897486874854548465473567557
|
||||
444655447566445854654474455756878599795979666889787989699799799788789899798878779887786786978766799797798756556977755677546455687663556373733
|
||||
457756474767867685745767766688656959868969669698696779769987889977889997879978988997869666968688686686667595765685954465848754645545676346656
|
||||
577777634634784475566585487766898679766857589876666797878786899778877977888988789997897987777866866875865657958858898886558674477546645373733
|
||||
375564455343464778546576465699596776656969768977898766987868978799797977799899998977676887796966769685566567875598986866656546864673577335644
|
||||
764536374744688766576577885877665755778667698767767896866976678787887997777989979797997897886879998588785565797599856764646476874865657375337
|
||||
543643663577445575575746865856699797886966697787689988987898997887889778799878876968676879669667867865969569598866786777478684447473535476464
|
||||
636376576444445784685557667858867858989886768887678798987997786899978898979778799676976968699687687696799958596989878545477776884836466676544
|
||||
763557453467756688577756587779998976955765595888976888986678666799789998989886898897796979988899965969688858788595854765644557856563554676536
|
||||
577357635456488886845878554769765556955985655979997878697999677778688978698787966866789866976999769896799668958869464854575446585434637564676
|
||||
364747645336576587565657758877675688959786977998788886798766997696767666867669986699686998698989755758698855876979464485786565446476634357363
|
||||
764673654455638867657864677868688686876669689896868776679986866978666986986777787686788676788988756558765565677587548746675558674337566464735
|
||||
467553475334767444466644884457796887977895865685877786688968766788798869987667677976979679776875687896785677785585464887785478847566336676367
|
||||
754553573564374878888686745468795559998559558576899666976769996769969687868797787688689676689897687688897755999976676746558645464445673675377
|
||||
654645755747464485667558574456877887787569867679887798667687868677876778669689666779886968896876685659976676658686566557864768873645664376734
|
||||
445544646666653788765567845564557669976567696868566987669896966988769778889996997766998998877788995567766676565676856665458647445467373676373
|
||||
335345454544774365576884545776447679769795858986755876876678877988676979788677979897688799775658967569577968775874488767645745846353477357637
|
||||
366377754753734477674448744864875789898856866979656686786676967688978696879889689678998668967576985558585659776884567855454458533567566333343
|
||||
634577374346476446555445785448644766995595858979896666888979689876778998787897688787799698888955955598989698964778556874557885545653374555466
|
||||
677556475565736667777484485656567599957978799986798886767978668896669897777678898796786667657569787669575865654655784846475888734563453447733
|
||||
436473576775565774677876476556488659989779567768788785959799789889869898668776868679767999878696597975756768458548448585844656454736734654746
|
||||
547357337753544344646667465664866846685869885977886995876969889768689977867696698867687576899598699757796587666875856478644854555674435777546
|
||||
347756377665473476788767458886747667756788579676986758786598768688666796797777766975688995896569669597986656644477885868658863643356336436767
|
||||
435655633356663457687474657867868586557857757898656955676959979987699988668797969575679668986989599968778575744456465555448545746745553656636
|
||||
232735335633336435364776478856564678779895856986785956779795856697686755768967786866756967879579989575999767445845658488464367745456563766652
|
||||
365534555754666343356858854544586845478695766698595578657657699589559657775566978578796968698978756676686864564748787854774355466336575533356
|
||||
332456745574334636435755766547766858677477558867578676869797997655556578565658577689657675777885779856545854766587588785885553755574346447734
|
||||
642637766374645667576784676645584544887786985679965689779986669967558768898687899778796895789897896869675566888667844764866335475676646746344
|
||||
446266775465654344746545588648865455558567795956557678858587988789596567768697587755599776658585659584746544448586656576843675434737573434342
|
||||
224663653636375747635334754667777785765845587767875669699965575665656696965569779879659798977576858957685655475765764488774657635437473366356
|
||||
625426436574367576377455445457768877844667877696677657787998676675855585695556989557695768975657585787668568586645766544775754777736377573643
|
||||
254365447437365344543734686478587446577464478577858696676989769786995956675995686669859566789766667744858454484774566846375675636477476676335
|
||||
422222654656766733456576778578576885587687484547879668859979585659755658767565669789967569955759486556587466846657846867463337773463345653456
|
||||
222663564645657663455455778578554485465786786857688856768877956578786888557568998985866787655554855578544846755487777674735775777464734622546
|
||||
254425667467346335477743536684857855446886765847878588867978695556586758898799875967867665697587665575484878864786575464647575364434365244232
|
||||
545624253753775647574566377467768786547854476484446767697887679959597569976686666989776986887485646865745586658564643373645345733746736652366
|
||||
445252323737357543544335573665464678448566785686457785666686788888585959758897989777867765544747588555474847478855647656665644764466453436244
|
||||
624334552663634667443673377457587668454844544466745588644789865859879759688676686967574556546474878564576746445776434547637734437356426553336
|
||||
646342663527575634777653454344647768685555578668685585747484849669788588997988769574756864788445847464484765785557365333564764664464523466625
|
||||
433646226555554733443535333646458856474776865656467548576566554476676858654688585874478857475648667678875678885646635637756557467755533632524
|
||||
524224632242777744344347444334366578578575877467887886555676854678445574565875655468577574858767577688754564753666644467764676465333565552463
|
||||
332524536526246557754755777633656654474784458587665548686487884874566865658745654485687757788578847456445876553653343573443456766725335256642
|
||||
232554544665423736756756355734633455656467675747788778876765845585468587877455867666855787577686557854444777576433354455347456475525443524464
|
||||
442536554246245356477665466553537546467888677788466877467686486657667685476657657467447667888766845477874466347633375765374567555252355555234
|
||||
466244246525246247457757744364447343554644867457546676778874586655685744567645544464686645886845556867444547446577475333544476334534663633245
|
||||
256564536546536663747336555334445355353685446444654655484676486875548856554568564566857447765885764477666734375743576475547457262563335256256
|
||||
422666323232323265733677534764557654535733767547847748648476454756566877767566745674454856755477854786445654433454543465347365665232624666552
|
||||
424322552553422235336774436334655656753464566788846587546678666644787566484885754665684866448466644745643776645476477537765745622326366565354
|
||||
345543454253666434265365537663576573436433745778877446564777478457575846747454774548745457745447684757344355355745445557775262543464556444634
|
||||
336332264656464436433635346557737336357437635546658478488856868457865746755647874844656478545747333465337573563736436377474556263642424323626
|
||||
522645624243565434556446456664775367336437757757366675878887787775687654585666655745655846458333674745667336355753654677662464322345536366444
|
||||
555355255625526523556533365744375654336575555355636447444755865586587665788476558447664564566644433656467374766543333653256234262433543666243
|
||||
352442235334564446432432343454456456335337663466436474364547647547857775677445776846844647434465354643576547346346673562543352236432233355555
|
||||
513442263654563562566354553554666563746565354466655433636643784876456456474465676577343673465465554337444354653537646325625464335245434545645
|
||||
412166442223555666442324255746337746664773367543767373733737677365555364633674664745736555765655345666573457674453644222662456622244462436234
|
||||
335154546633442632244453333547453533644646357535376775746533656673644367657346633466673535437637674353457475533764463643233554553226563253531
|
||||
344355262636555362325466655254444447336435574534775754465675544754737373636474353733766573766355474364665466456367352423244564562442343664431
|
||||
311413135435554264436263252552354346437465375467563776374733477357475637647547553646677354774353547337664736454445366643346246333553342424441
|
||||
535433415243554224545433322662227453333764757337343766763564757456745673733566554346344364757363656755345357754222664244523544535662564243331
|
||||
134111534364445323222623622364552434633767676433737455655363547774354473747466434563657563745543347455674446543443655424426366324335634323325
|
||||
351255341465626465234256523662254632653447333533467334465363354667336765477454734657366335356637333466453444525332662564422333455463641114144
|
||||
552341443344524565642265436465366522436473534654637564453564353534556774457633576376544536465446545333744663365656323344662535233245324445313
|
||||
221252532115466236652623632522433654526676365575647434775344354564367573777346436744774454673664564335344245253635255564364626663532252232132
|
||||
144524115433215643653323636235532663522464736374347774777656443757553555345734367444567773663755546434263345354363654655245244254515334312415
|
738
2023/aoc_puzzle_cache/day_18
Normal file
738
2023/aoc_puzzle_cache/day_18
Normal file
|
@ -0,0 +1,738 @@
|
|||
L 4 (#3db750)
|
||||
U 10 (#0e0433)
|
||||
L 5 (#526490)
|
||||
U 6 (#3e9193)
|
||||
L 4 (#526492)
|
||||
U 5 (#4418e3)
|
||||
L 5 (#3ad2e0)
|
||||
U 5 (#579f63)
|
||||
L 4 (#118202)
|
||||
D 5 (#411263)
|
||||
L 5 (#135ac2)
|
||||
U 4 (#1196f3)
|
||||
L 4 (#5df7d2)
|
||||
U 5 (#22e353)
|
||||
L 4 (#1615c2)
|
||||
U 5 (#17bc73)
|
||||
L 9 (#038720)
|
||||
U 6 (#16cff3)
|
||||
L 7 (#57beb0)
|
||||
U 4 (#16cff1)
|
||||
L 6 (#3da480)
|
||||
U 8 (#43bb73)
|
||||
R 4 (#2c2540)
|
||||
U 8 (#374033)
|
||||
R 9 (#4f95d0)
|
||||
U 7 (#374031)
|
||||
L 9 (#0ff0e0)
|
||||
U 8 (#12b433)
|
||||
L 3 (#29b7c0)
|
||||
U 5 (#57fa93)
|
||||
L 4 (#3b4d90)
|
||||
U 5 (#175463)
|
||||
L 7 (#2945d0)
|
||||
U 3 (#151b23)
|
||||
R 6 (#34c720)
|
||||
U 2 (#1f0a03)
|
||||
R 8 (#3d8772)
|
||||
U 4 (#3eba93)
|
||||
R 7 (#0e4442)
|
||||
U 2 (#012851)
|
||||
R 2 (#2618e2)
|
||||
U 8 (#5ca961)
|
||||
L 3 (#0a2972)
|
||||
U 3 (#5980f3)
|
||||
L 4 (#43a0a2)
|
||||
U 2 (#0450c3)
|
||||
L 8 (#09fae2)
|
||||
U 3 (#320053)
|
||||
R 4 (#52e1a0)
|
||||
U 4 (#03ce91)
|
||||
R 8 (#330070)
|
||||
U 3 (#03ce93)
|
||||
L 5 (#43c770)
|
||||
U 3 (#3d18a3)
|
||||
L 8 (#488e60)
|
||||
U 5 (#2d0d63)
|
||||
L 7 (#1e78d0)
|
||||
D 4 (#1680c3)
|
||||
L 9 (#31ee60)
|
||||
D 3 (#483563)
|
||||
L 4 (#0c6710)
|
||||
D 3 (#467ed3)
|
||||
R 3 (#02df40)
|
||||
D 2 (#1e2ad3)
|
||||
R 10 (#3f20c2)
|
||||
D 4 (#447ef3)
|
||||
L 5 (#3f20c0)
|
||||
D 7 (#07f723)
|
||||
L 6 (#1a71e2)
|
||||
D 7 (#23f173)
|
||||
L 2 (#079be2)
|
||||
D 2 (#5cd243)
|
||||
L 7 (#3d9fc2)
|
||||
D 3 (#107ee3)
|
||||
L 3 (#165230)
|
||||
D 4 (#69e463)
|
||||
L 9 (#2159c0)
|
||||
D 2 (#1dd863)
|
||||
L 4 (#47e9a0)
|
||||
D 4 (#1bff13)
|
||||
R 10 (#12df90)
|
||||
D 3 (#364e23)
|
||||
R 3 (#517e12)
|
||||
D 3 (#0a71a3)
|
||||
L 8 (#2edfe2)
|
||||
D 8 (#339f93)
|
||||
L 5 (#27d7e0)
|
||||
D 8 (#4a91f3)
|
||||
L 8 (#44e320)
|
||||
D 9 (#0ea943)
|
||||
L 4 (#13a2f0)
|
||||
D 5 (#6356e3)
|
||||
R 10 (#05f220)
|
||||
D 4 (#2644a3)
|
||||
R 8 (#65bb92)
|
||||
D 4 (#2ae573)
|
||||
R 10 (#65bb90)
|
||||
D 4 (#312573)
|
||||
L 8 (#3b10c0)
|
||||
D 6 (#154f21)
|
||||
L 5 (#018462)
|
||||
D 5 (#552bb1)
|
||||
L 7 (#018460)
|
||||
D 4 (#0a3be1)
|
||||
L 3 (#2efbf0)
|
||||
D 12 (#17a7c1)
|
||||
L 4 (#30d400)
|
||||
U 4 (#624c61)
|
||||
L 7 (#38d3f0)
|
||||
U 3 (#214351)
|
||||
L 11 (#027d02)
|
||||
U 4 (#3bdac1)
|
||||
L 7 (#027d00)
|
||||
U 6 (#13f621)
|
||||
R 6 (#1c4f70)
|
||||
U 6 (#1c1f81)
|
||||
R 5 (#30ce40)
|
||||
D 6 (#149481)
|
||||
R 7 (#0d93b0)
|
||||
U 5 (#491791)
|
||||
R 7 (#50ae60)
|
||||
U 5 (#128a91)
|
||||
L 4 (#1f7990)
|
||||
U 7 (#010331)
|
||||
L 6 (#253e60)
|
||||
U 6 (#1f2643)
|
||||
L 3 (#232c10)
|
||||
U 5 (#3d8083)
|
||||
L 6 (#294c32)
|
||||
U 10 (#3fcf53)
|
||||
L 3 (#294c30)
|
||||
U 7 (#1c9cd3)
|
||||
L 8 (#26b342)
|
||||
U 2 (#2107e3)
|
||||
L 6 (#26b340)
|
||||
U 6 (#3a17c3)
|
||||
L 8 (#232c12)
|
||||
D 6 (#3199c3)
|
||||
L 7 (#34c162)
|
||||
U 9 (#0a6463)
|
||||
L 4 (#2f5132)
|
||||
U 9 (#1ef1c3)
|
||||
R 6 (#2318c0)
|
||||
U 3 (#21b8f3)
|
||||
R 3 (#40f9d0)
|
||||
D 7 (#1a5473)
|
||||
R 4 (#28adf0)
|
||||
D 2 (#2e6181)
|
||||
R 7 (#00d3f2)
|
||||
U 9 (#355a41)
|
||||
R 3 (#00d3f0)
|
||||
D 10 (#1b04c1)
|
||||
R 2 (#0ddf40)
|
||||
D 3 (#298111)
|
||||
R 4 (#42a8e0)
|
||||
U 2 (#5b93c1)
|
||||
R 4 (#4282b0)
|
||||
U 11 (#25af91)
|
||||
R 3 (#0ff3e0)
|
||||
U 7 (#002661)
|
||||
R 5 (#365a20)
|
||||
U 10 (#3382c1)
|
||||
R 6 (#3a83a0)
|
||||
U 3 (#376591)
|
||||
R 7 (#0894a0)
|
||||
U 6 (#379891)
|
||||
R 5 (#44e3d0)
|
||||
U 3 (#41e791)
|
||||
R 6 (#0133c0)
|
||||
U 4 (#070071)
|
||||
R 4 (#0627e0)
|
||||
U 4 (#33bea1)
|
||||
R 7 (#456812)
|
||||
U 5 (#5ac051)
|
||||
R 7 (#4254e2)
|
||||
U 7 (#49a231)
|
||||
R 5 (#0e82b2)
|
||||
U 3 (#14b5a1)
|
||||
R 4 (#320942)
|
||||
D 8 (#126031)
|
||||
R 8 (#103262)
|
||||
U 7 (#3b7aa1)
|
||||
R 4 (#103260)
|
||||
U 5 (#30f9c1)
|
||||
R 5 (#29ced2)
|
||||
D 8 (#1ac681)
|
||||
R 7 (#62bf32)
|
||||
D 4 (#1a4041)
|
||||
R 4 (#14df02)
|
||||
U 8 (#443071)
|
||||
R 4 (#47db32)
|
||||
D 10 (#1b21b3)
|
||||
R 4 (#129c02)
|
||||
D 2 (#3e68b3)
|
||||
R 11 (#533d52)
|
||||
D 3 (#09d713)
|
||||
R 3 (#058242)
|
||||
D 6 (#52db63)
|
||||
L 7 (#1c7002)
|
||||
D 5 (#65d703)
|
||||
L 4 (#1c7000)
|
||||
D 7 (#0965f3)
|
||||
R 6 (#1c20e2)
|
||||
D 7 (#1d2273)
|
||||
R 5 (#4389b2)
|
||||
D 5 (#044e11)
|
||||
R 4 (#27a040)
|
||||
D 2 (#1178a1)
|
||||
R 6 (#120170)
|
||||
D 9 (#44ebc1)
|
||||
R 3 (#120172)
|
||||
D 9 (#152cc1)
|
||||
R 4 (#27a042)
|
||||
U 3 (#1f7081)
|
||||
R 12 (#2fcb02)
|
||||
U 2 (#1d0f31)
|
||||
R 8 (#42cb20)
|
||||
U 4 (#43ab11)
|
||||
L 4 (#42cb22)
|
||||
U 2 (#377091)
|
||||
L 9 (#3b2d12)
|
||||
U 3 (#1b21b1)
|
||||
L 7 (#51b2b2)
|
||||
U 6 (#3caf91)
|
||||
R 10 (#4018c2)
|
||||
U 5 (#2d7c51)
|
||||
L 5 (#525612)
|
||||
U 4 (#0c3071)
|
||||
L 4 (#16b6f2)
|
||||
D 6 (#400511)
|
||||
L 7 (#263730)
|
||||
U 6 (#13acb1)
|
||||
L 4 (#42d5d0)
|
||||
U 3 (#47f3a1)
|
||||
R 9 (#4018c0)
|
||||
U 7 (#154771)
|
||||
R 2 (#2fbd52)
|
||||
U 3 (#3a1df1)
|
||||
L 8 (#51aed2)
|
||||
U 7 (#4edb11)
|
||||
L 3 (#120e82)
|
||||
U 7 (#64c5f1)
|
||||
R 9 (#0937d2)
|
||||
U 4 (#1c4f21)
|
||||
R 7 (#4551f2)
|
||||
U 5 (#5a5493)
|
||||
R 4 (#1edfb2)
|
||||
U 5 (#169093)
|
||||
R 10 (#37eac2)
|
||||
D 3 (#188731)
|
||||
R 5 (#0f1a82)
|
||||
D 5 (#585df1)
|
||||
R 3 (#120232)
|
||||
D 2 (#2ae331)
|
||||
R 8 (#2287d2)
|
||||
D 5 (#103e81)
|
||||
R 6 (#4690b0)
|
||||
D 4 (#0772d3)
|
||||
R 7 (#3305c0)
|
||||
D 3 (#0772d1)
|
||||
L 10 (#38f400)
|
||||
D 6 (#380261)
|
||||
L 6 (#29e240)
|
||||
D 6 (#06f581)
|
||||
L 5 (#439b60)
|
||||
U 12 (#201da1)
|
||||
L 3 (#402420)
|
||||
D 6 (#144c91)
|
||||
L 9 (#22f100)
|
||||
D 4 (#3870e1)
|
||||
R 6 (#0c31f2)
|
||||
D 2 (#03ac33)
|
||||
R 3 (#5bc432)
|
||||
D 9 (#137063)
|
||||
R 3 (#26ea62)
|
||||
U 4 (#137061)
|
||||
R 6 (#450eb2)
|
||||
D 9 (#03ac31)
|
||||
R 5 (#43b222)
|
||||
U 9 (#05c961)
|
||||
R 5 (#4055d0)
|
||||
D 4 (#20af11)
|
||||
R 7 (#1c10f0)
|
||||
D 5 (#3943c1)
|
||||
R 2 (#26e682)
|
||||
D 4 (#1129c1)
|
||||
R 8 (#358042)
|
||||
D 4 (#070c01)
|
||||
R 5 (#2956d2)
|
||||
U 7 (#191821)
|
||||
R 3 (#224300)
|
||||
U 3 (#2af351)
|
||||
R 2 (#0feeb0)
|
||||
U 6 (#23cac1)
|
||||
L 5 (#5dfd50)
|
||||
U 5 (#2a7f41)
|
||||
L 3 (#527870)
|
||||
U 5 (#2a7f43)
|
||||
L 8 (#4aaf60)
|
||||
U 9 (#287f01)
|
||||
L 2 (#13a150)
|
||||
U 4 (#269d21)
|
||||
R 10 (#35e962)
|
||||
U 7 (#281351)
|
||||
R 8 (#35e982)
|
||||
U 4 (#281353)
|
||||
R 9 (#15be82)
|
||||
U 3 (#14d581)
|
||||
R 3 (#251f22)
|
||||
D 3 (#42a4e1)
|
||||
R 4 (#04bf90)
|
||||
D 9 (#1f56e3)
|
||||
R 6 (#3438d0)
|
||||
D 10 (#1f56e1)
|
||||
R 4 (#36fdd0)
|
||||
D 9 (#0cd891)
|
||||
L 4 (#38caa0)
|
||||
D 6 (#0cd893)
|
||||
R 6 (#11cc20)
|
||||
D 7 (#2ca3a1)
|
||||
L 6 (#3e7d60)
|
||||
D 7 (#271f11)
|
||||
R 4 (#20ba00)
|
||||
D 6 (#53c2b3)
|
||||
R 3 (#11a9f0)
|
||||
D 7 (#34ada3)
|
||||
R 8 (#567fe2)
|
||||
D 7 (#1f43f3)
|
||||
R 7 (#10e032)
|
||||
D 3 (#515b63)
|
||||
R 7 (#1a0d52)
|
||||
D 2 (#06c953)
|
||||
R 3 (#1bd910)
|
||||
D 8 (#339df3)
|
||||
R 6 (#483b90)
|
||||
D 8 (#2b9943)
|
||||
R 5 (#040ff0)
|
||||
D 8 (#249a13)
|
||||
R 2 (#4a2a82)
|
||||
D 2 (#2be7b3)
|
||||
R 10 (#1dfa12)
|
||||
U 4 (#23ec53)
|
||||
R 4 (#4e4080)
|
||||
U 4 (#431f73)
|
||||
R 7 (#332ce0)
|
||||
U 7 (#151433)
|
||||
L 6 (#532250)
|
||||
U 6 (#281c83)
|
||||
R 6 (#3b2fa0)
|
||||
U 3 (#580361)
|
||||
R 2 (#381920)
|
||||
U 4 (#423571)
|
||||
R 3 (#365c20)
|
||||
D 10 (#357b83)
|
||||
R 4 (#2bc910)
|
||||
U 10 (#17cef1)
|
||||
R 6 (#0d2f50)
|
||||
U 2 (#496f61)
|
||||
R 5 (#0d2f52)
|
||||
U 4 (#0a78e1)
|
||||
L 5 (#0db930)
|
||||
U 6 (#057ac3)
|
||||
L 5 (#065930)
|
||||
D 6 (#4034b3)
|
||||
L 5 (#065932)
|
||||
U 5 (#2607c3)
|
||||
L 3 (#3772f0)
|
||||
U 6 (#260ff3)
|
||||
R 6 (#0a16c2)
|
||||
U 5 (#0984c3)
|
||||
L 6 (#4ebf82)
|
||||
U 5 (#0984c1)
|
||||
L 4 (#181ef2)
|
||||
U 9 (#1d1d53)
|
||||
R 4 (#384730)
|
||||
U 2 (#219013)
|
||||
R 6 (#065250)
|
||||
U 6 (#2232b1)
|
||||
R 5 (#3f4030)
|
||||
U 5 (#471ca1)
|
||||
R 6 (#33c210)
|
||||
U 3 (#37cbe1)
|
||||
L 7 (#53b020)
|
||||
U 6 (#070661)
|
||||
R 6 (#2199f0)
|
||||
U 9 (#1d8d61)
|
||||
L 6 (#35c702)
|
||||
U 4 (#13cc81)
|
||||
R 7 (#22f592)
|
||||
U 3 (#36f1d1)
|
||||
R 6 (#17d3d2)
|
||||
D 7 (#4a1db1)
|
||||
R 4 (#161810)
|
||||
D 12 (#019c31)
|
||||
R 4 (#46b5a0)
|
||||
U 9 (#4bc491)
|
||||
R 4 (#13c2b0)
|
||||
U 2 (#07bdd1)
|
||||
R 4 (#1bce00)
|
||||
U 8 (#48c791)
|
||||
R 5 (#54aa00)
|
||||
U 3 (#079a91)
|
||||
R 5 (#19b550)
|
||||
D 4 (#2ff601)
|
||||
R 7 (#1560c2)
|
||||
D 10 (#3afde1)
|
||||
R 5 (#1560c0)
|
||||
D 5 (#19b1e1)
|
||||
R 4 (#29d140)
|
||||
D 2 (#1c83b3)
|
||||
R 6 (#274ae0)
|
||||
D 9 (#4f3ae3)
|
||||
R 4 (#2e2280)
|
||||
U 7 (#12aea3)
|
||||
R 3 (#121630)
|
||||
U 9 (#590343)
|
||||
R 5 (#121632)
|
||||
D 8 (#0f1813)
|
||||
R 8 (#2e2282)
|
||||
D 5 (#01f683)
|
||||
R 4 (#0b3350)
|
||||
D 8 (#2582f3)
|
||||
R 2 (#358bc0)
|
||||
D 8 (#495e93)
|
||||
R 2 (#2b6380)
|
||||
D 6 (#202a83)
|
||||
R 2 (#025d40)
|
||||
D 4 (#0600f1)
|
||||
R 6 (#492c30)
|
||||
D 9 (#310791)
|
||||
L 8 (#06d2c0)
|
||||
D 4 (#328091)
|
||||
L 2 (#060230)
|
||||
D 6 (#1d2163)
|
||||
R 10 (#04a2c0)
|
||||
D 4 (#201cc1)
|
||||
R 5 (#047b62)
|
||||
D 4 (#0e0ec1)
|
||||
R 4 (#17bd32)
|
||||
D 7 (#560041)
|
||||
R 3 (#41b672)
|
||||
D 5 (#1c40b1)
|
||||
R 9 (#01fea2)
|
||||
D 4 (#018691)
|
||||
L 7 (#13d742)
|
||||
D 4 (#56c211)
|
||||
L 5 (#2f7662)
|
||||
U 4 (#0e8e01)
|
||||
L 3 (#46d980)
|
||||
D 5 (#402761)
|
||||
L 7 (#1e38e0)
|
||||
D 8 (#402763)
|
||||
R 3 (#3e28e0)
|
||||
D 8 (#075c91)
|
||||
R 3 (#4cd990)
|
||||
D 2 (#1c83b1)
|
||||
R 6 (#0df200)
|
||||
U 6 (#4877c3)
|
||||
R 2 (#0ab900)
|
||||
U 4 (#5d14b3)
|
||||
R 8 (#3f7a60)
|
||||
D 5 (#061dd3)
|
||||
R 6 (#265810)
|
||||
U 3 (#4d7453)
|
||||
R 4 (#113c80)
|
||||
U 4 (#300853)
|
||||
L 6 (#45ab00)
|
||||
U 2 (#1ced03)
|
||||
L 6 (#0eace0)
|
||||
U 5 (#264f53)
|
||||
R 12 (#41dc40)
|
||||
U 3 (#199863)
|
||||
R 5 (#3b2dc2)
|
||||
U 10 (#0f4223)
|
||||
R 4 (#482cf2)
|
||||
D 5 (#1face3)
|
||||
R 8 (#321642)
|
||||
U 4 (#56f7a3)
|
||||
R 4 (#321640)
|
||||
U 10 (#2b6ef3)
|
||||
R 5 (#325182)
|
||||
D 5 (#4040a1)
|
||||
R 5 (#02d5b2)
|
||||
D 9 (#61d2d1)
|
||||
R 8 (#3d5d32)
|
||||
D 4 (#0f4221)
|
||||
L 7 (#176402)
|
||||
D 4 (#03b113)
|
||||
L 8 (#01d860)
|
||||
D 3 (#136273)
|
||||
L 7 (#206090)
|
||||
D 9 (#0ed183)
|
||||
R 3 (#21eee0)
|
||||
D 3 (#4b9c73)
|
||||
R 4 (#27e9e2)
|
||||
D 5 (#097b83)
|
||||
R 5 (#27e9e0)
|
||||
U 5 (#50f633)
|
||||
R 5 (#16b820)
|
||||
D 4 (#138331)
|
||||
R 5 (#34b750)
|
||||
D 8 (#5413f1)
|
||||
R 7 (#134940)
|
||||
D 7 (#4d4881)
|
||||
L 6 (#53aa40)
|
||||
D 7 (#00d6d1)
|
||||
L 5 (#0a3520)
|
||||
U 12 (#3c9a03)
|
||||
L 3 (#4c3bd0)
|
||||
U 5 (#3c9a01)
|
||||
L 7 (#24a000)
|
||||
D 10 (#0fb971)
|
||||
R 5 (#4631b2)
|
||||
D 3 (#3f5441)
|
||||
L 8 (#01d1e0)
|
||||
D 6 (#46ff21)
|
||||
R 8 (#3ee970)
|
||||
D 6 (#00a091)
|
||||
L 5 (#51a350)
|
||||
D 4 (#00a093)
|
||||
L 8 (#46c180)
|
||||
U 4 (#365041)
|
||||
L 2 (#47fbe2)
|
||||
U 4 (#226d01)
|
||||
R 4 (#67b392)
|
||||
U 10 (#226d03)
|
||||
L 4 (#191b92)
|
||||
U 4 (#416111)
|
||||
L 2 (#105522)
|
||||
U 7 (#5b2ce1)
|
||||
L 7 (#4631b0)
|
||||
D 8 (#334d41)
|
||||
L 7 (#1e4350)
|
||||
D 6 (#3021b1)
|
||||
L 3 (#299130)
|
||||
D 3 (#2b4123)
|
||||
L 3 (#414a00)
|
||||
U 5 (#2b4121)
|
||||
L 8 (#0fafb0)
|
||||
U 2 (#254f91)
|
||||
L 4 (#3b0f82)
|
||||
U 4 (#070d61)
|
||||
L 4 (#0a6292)
|
||||
U 6 (#070d63)
|
||||
L 6 (#3518d2)
|
||||
D 7 (#2b8b01)
|
||||
L 7 (#1a4b62)
|
||||
D 3 (#27a0c1)
|
||||
L 5 (#66c7d2)
|
||||
D 6 (#37f161)
|
||||
R 3 (#482732)
|
||||
D 5 (#1baa01)
|
||||
R 9 (#45b112)
|
||||
D 2 (#1baa03)
|
||||
R 6 (#07fad2)
|
||||
D 4 (#2f35a1)
|
||||
R 5 (#4d0002)
|
||||
D 6 (#1fa731)
|
||||
L 8 (#696b42)
|
||||
D 6 (#31c791)
|
||||
L 9 (#08fd42)
|
||||
D 2 (#0052f1)
|
||||
L 3 (#065eb2)
|
||||
D 5 (#2418b1)
|
||||
L 5 (#3dbd92)
|
||||
D 9 (#10bcf1)
|
||||
L 5 (#09a212)
|
||||
D 7 (#4ac071)
|
||||
L 2 (#0c2842)
|
||||
D 4 (#0299a1)
|
||||
L 6 (#39aa72)
|
||||
D 5 (#1eaff1)
|
||||
L 3 (#302492)
|
||||
U 4 (#4588d1)
|
||||
L 8 (#13af62)
|
||||
D 4 (#35a861)
|
||||
L 7 (#4c5b02)
|
||||
U 5 (#2dd353)
|
||||
L 3 (#0077d2)
|
||||
D 5 (#0ba793)
|
||||
L 12 (#38e632)
|
||||
D 5 (#476a13)
|
||||
L 5 (#35f252)
|
||||
U 7 (#5311a1)
|
||||
L 2 (#047cf2)
|
||||
U 8 (#267d63)
|
||||
R 4 (#0affa2)
|
||||
U 9 (#6a7183)
|
||||
R 4 (#25b702)
|
||||
U 7 (#0ab9d3)
|
||||
L 11 (#1dd902)
|
||||
U 2 (#0f0bd3)
|
||||
R 11 (#17dea2)
|
||||
U 6 (#0c2d03)
|
||||
R 5 (#18de02)
|
||||
D 11 (#52bf93)
|
||||
R 4 (#18de00)
|
||||
D 4 (#1199a3)
|
||||
R 4 (#0ddee2)
|
||||
U 3 (#063403)
|
||||
R 6 (#46dcc2)
|
||||
U 5 (#11b683)
|
||||
R 7 (#0f98c2)
|
||||
U 3 (#610763)
|
||||
R 6 (#17f292)
|
||||
U 6 (#312333)
|
||||
R 4 (#2fd3e2)
|
||||
U 4 (#083981)
|
||||
L 6 (#4b2332)
|
||||
U 5 (#083983)
|
||||
L 7 (#161f42)
|
||||
U 3 (#097733)
|
||||
R 8 (#079502)
|
||||
U 5 (#28a1b1)
|
||||
R 5 (#60e982)
|
||||
U 5 (#174aa1)
|
||||
L 4 (#60e980)
|
||||
U 7 (#2d1801)
|
||||
L 5 (#3a7fc2)
|
||||
U 6 (#267c01)
|
||||
L 8 (#10ae32)
|
||||
U 5 (#64c141)
|
||||
L 3 (#39bea2)
|
||||
U 4 (#0061e1)
|
||||
L 2 (#03c742)
|
||||
U 9 (#00fa21)
|
||||
L 5 (#3f4a42)
|
||||
D 13 (#0048e1)
|
||||
L 3 (#21f600)
|
||||
U 5 (#13e0d1)
|
||||
L 5 (#57fcf0)
|
||||
D 5 (#13e0d3)
|
||||
L 9 (#4e0b20)
|
||||
U 5 (#2fbea1)
|
||||
L 10 (#1d7ee2)
|
||||
D 6 (#5a3821)
|
||||
L 4 (#187d12)
|
||||
D 6 (#02da81)
|
||||
L 5 (#39b022)
|
||||
D 6 (#1e48d1)
|
||||
L 5 (#0a01a2)
|
||||
D 3 (#4f90e1)
|
||||
L 7 (#0b91d2)
|
||||
D 6 (#269903)
|
||||
L 4 (#322902)
|
||||
U 5 (#412583)
|
||||
L 10 (#322900)
|
||||
D 5 (#07dcc3)
|
||||
L 4 (#416db2)
|
||||
D 2 (#0118f3)
|
||||
L 6 (#002942)
|
||||
D 3 (#46c203)
|
||||
R 10 (#1ec1c2)
|
||||
D 7 (#0b31d1)
|
||||
L 10 (#48d2b2)
|
||||
D 6 (#499a71)
|
||||
L 4 (#00dc22)
|
||||
D 3 (#1adf01)
|
||||
R 10 (#20c8b2)
|
||||
D 8 (#2376b3)
|
||||
L 10 (#34ebc2)
|
||||
D 8 (#119bd3)
|
||||
R 4 (#393252)
|
||||
D 12 (#3a98c3)
|
||||
L 3 (#6119f2)
|
||||
D 10 (#22a903)
|
||||
L 8 (#0f5442)
|
||||
U 9 (#4466f1)
|
||||
L 6 (#32ebf2)
|
||||
U 6 (#291b41)
|
||||
L 8 (#089fc2)
|
||||
U 3 (#171d13)
|
||||
L 6 (#4607a2)
|
||||
U 6 (#3a53d3)
|
||||
L 3 (#4607a0)
|
||||
D 4 (#1c1153)
|
||||
L 5 (#3aa062)
|
||||
D 3 (#07ed63)
|
||||
L 10 (#285362)
|
||||
D 3 (#2033d3)
|
||||
R 8 (#053532)
|
||||
D 7 (#550e63)
|
||||
R 7 (#233902)
|
||||
D 7 (#159493)
|
||||
L 3 (#428bc2)
|
||||
D 3 (#4d6bc3)
|
||||
R 10 (#434cf2)
|
||||
D 2 (#220413)
|
||||
R 5 (#3b8d52)
|
||||
D 5 (#2d9a53)
|
||||
L 6 (#24c242)
|
||||
D 6 (#192663)
|
||||
R 4 (#084250)
|
||||
D 5 (#42e773)
|
||||
L 4 (#580d40)
|
||||
D 3 (#221923)
|
||||
L 3 (#2c4a70)
|
||||
U 5 (#1955e3)
|
||||
L 2 (#22aa00)
|
||||
U 9 (#325ae3)
|
||||
L 4 (#45a220)
|
||||
D 5 (#1b6af3)
|
||||
L 5 (#2e7230)
|
||||
U 7 (#47b843)
|
||||
L 6 (#4786f0)
|
||||
U 8 (#004a03)
|
||||
L 8 (#25caa0)
|
||||
D 4 (#2857e3)
|
||||
L 6 (#2bc040)
|
||||
D 7 (#216fc3)
|
||||
L 5 (#28ac22)
|
||||
D 4 (#0c70e1)
|
||||
L 4 (#27c792)
|
||||
D 9 (#0c70e3)
|
||||
L 8 (#3ccc22)
|
||||
U 10 (#236703)
|
||||
L 5 (#248f22)
|
||||
U 5 (#351f23)
|
||||
L 8 (#1cdae2)
|
||||
U 9 (#196223)
|
||||
L 4 (#262512)
|
||||
U 5 (#18a9e1)
|
||||
L 6 (#374d42)
|
||||
U 9 (#35d761)
|
||||
L 3 (#1a1ad2)
|
||||
U 2 (#357863)
|
||||
L 5 (#124822)
|
||||
U 5 (#02f933)
|
||||
L 3 (#09dcf2)
|
||||
U 3 (#51fde3)
|
||||
L 8 (#09dcf0)
|
||||
U 7 (#41c033)
|
||||
L 6 (#1ddaf2)
|
||||
U 7 (#15c193)
|
||||
L 3 (#609412)
|
||||
U 7 (#0a4e23)
|
||||
L 8 (#2d99f2)
|
||||
U 5 (#01ac13)
|
753
2023/aoc_puzzle_cache/day_19
Normal file
753
2023/aoc_puzzle_cache/day_19
Normal file
|
@ -0,0 +1,753 @@
|
|||
vhh{m<1253:R,R}
|
||||
fz{x<607:hgz,A}
|
||||
nt{s>1658:A,m>2167:R,x<1701:A,knr}
|
||||
sk{m<662:R,R}
|
||||
jmf{a>994:A,x>2248:A,s<202:R,A}
|
||||
vkg{m>304:sv,m<201:lqf,gc}
|
||||
pd{a>714:R,s<705:R,A}
|
||||
drf{a<743:jhr,s<2525:bq,jtz}
|
||||
dnc{x<2550:A,x<2871:A,s<3255:A,R}
|
||||
sdd{m<3059:R,x>1469:grz,a>643:A,bcm}
|
||||
bcd{s>1882:ctg,s<1552:sbv,mz}
|
||||
qlc{m<1024:qvh,vx}
|
||||
pgt{s<871:R,A}
|
||||
ss{s<2152:R,jq}
|
||||
xlv{m<863:gdq,jm}
|
||||
vf{s>3033:R,s<2916:R,A}
|
||||
qb{a>1142:lg,m>792:R,A}
|
||||
hbj{s>1495:R,m<3875:R,R}
|
||||
lb{a<977:gg,x>674:fxn,zzp}
|
||||
jjp{a>1402:jzd,a<903:xf,bgp}
|
||||
xz{s<2053:nn,m<819:jbc,m<1387:rrq,zl}
|
||||
jl{s>2490:A,x<1531:A,A}
|
||||
glc{s<861:A,m>625:R,A}
|
||||
sz{s>3282:dk,x>3252:qjx,vfv}
|
||||
bn{s>789:A,m>376:A,A}
|
||||
bk{a<3606:lpk,a>3817:fv,mxd}
|
||||
xcm{a<1300:A,A}
|
||||
tqs{a>1227:lzv,s<1984:ql,btm}
|
||||
qlh{s<1420:R,R}
|
||||
jfg{m<757:A,a<1311:A,m<1268:A,R}
|
||||
rpc{m<1054:R,A}
|
||||
ctn{m>2884:npp,s>1983:R,m>2664:bbl,vq}
|
||||
zkr{x<918:R,a<2882:A,A}
|
||||
rfl{s>3583:R,a>353:R,A}
|
||||
fxn{a<1011:A,m<634:kpz,m<1226:R,R}
|
||||
lbs{x>2854:R,a>785:R,A}
|
||||
zr{x<978:A,R}
|
||||
zc{x<3640:R,m>631:R,A}
|
||||
vqc{s<3350:R,R}
|
||||
sq{m>1329:R,R}
|
||||
hqz{m<3697:ngb,x>892:xhv,R}
|
||||
gxx{m>968:sn,a<126:qm,x<3104:rtz,zm}
|
||||
jfp{s<1597:R,R}
|
||||
rgx{x>3360:hd,rdn}
|
||||
zx{a>2698:xls,zp}
|
||||
bhm{x>3186:A,s>2907:js,lt}
|
||||
sn{a<138:qfp,s>1828:kkb,nc}
|
||||
hnj{x>401:A,R}
|
||||
hq{a<2585:vbp,x<1122:zkr,m<3897:A,lff}
|
||||
plb{x<3671:A,a<921:R,A}
|
||||
xvn{a<3364:A,R}
|
||||
hpj{a>519:A,a>315:A,A}
|
||||
hn{m<1115:A,x<2632:R,x>2764:R,A}
|
||||
gg{x>897:zhq,s>1653:qs,R}
|
||||
ck{m<2051:R,x<901:R,A}
|
||||
qfd{s<3141:A,m>1998:A,m>1909:A,A}
|
||||
vc{s<409:bv,xs}
|
||||
rd{s>1755:nq,qrp}
|
||||
gc{s<2493:mmv,m<256:nk,kdx}
|
||||
td{x<2197:R,x>2608:A,A}
|
||||
qpx{x>1028:A,R}
|
||||
cb{m<785:cjn,s>2054:dnc,xm}
|
||||
bgn{s>3068:A,R}
|
||||
rh{s>2433:A,a<651:A,x<3472:R,A}
|
||||
tdc{s<3243:R,a<2939:R,a>3382:R,A}
|
||||
smk{x<3796:lq,x<3880:R,s<1792:zs,R}
|
||||
mkn{a>2659:A,a>2628:A,a>2621:R,A}
|
||||
tz{s>2615:R,R}
|
||||
qqn{s>995:A,a>56:R,R}
|
||||
jlq{s>1442:pnl,a<2722:mkn,s>645:dhd,mcg}
|
||||
cjn{x>2243:R,m<709:R,x>1956:R,R}
|
||||
zjf{s<2605:ts,x>3507:fr,kr}
|
||||
vfv{a<444:zmb,R}
|
||||
pht{s>1905:ck,m>2063:R,s>991:A,A}
|
||||
hj{a>3369:R,x>255:A,A}
|
||||
rlb{a<2239:R,x>3333:A,A}
|
||||
cls{x>651:R,m<3664:A,R}
|
||||
dh{m<3872:R,s>2643:A,s<1996:A,A}
|
||||
zs{a>1056:A,R}
|
||||
hd{x<3618:bf,s>1990:R,s<805:pb,A}
|
||||
rch{x>274:R,x>136:R,bs}
|
||||
xt{m>958:gp,x>1443:tqt,x>713:mh,A}
|
||||
mv{s>754:R,m>997:R,s>359:A,R}
|
||||
ht{x<2088:A,R}
|
||||
ts{s<1514:R,a>1255:xc,s>2161:R,zc}
|
||||
hlp{s<3320:R,m<2175:A,a<3517:dlb,qh}
|
||||
bt{x<324:A,A}
|
||||
vr{s<299:R,x<1347:A,A}
|
||||
kkz{m>607:R,R}
|
||||
gz{x>1177:A,s>3045:gcd,a<748:xj,lv}
|
||||
ptn{a>1251:R,A}
|
||||
crf{s>2533:bqq,m>3663:R,s<2209:A,A}
|
||||
pdk{s>2676:vlq,m>386:jkj,dn}
|
||||
ptb{s<557:A,x<970:R,A}
|
||||
rsr{m>3073:jhn,rct}
|
||||
bbc{a>3016:prh,a<2607:zhz,a>2815:fjx,jlq}
|
||||
sbv{a<1373:A,x<1473:R,R}
|
||||
jhn{s>2149:tdc,a<2796:cgr,A}
|
||||
lt{x>2928:A,x<2780:R,A}
|
||||
hlj{s<492:R,x>1589:A,R}
|
||||
lbx{m>2195:rt,a>3305:xbd,pht}
|
||||
zl{x<3098:vjg,s>3015:A,s>2644:R,A}
|
||||
zmb{m<3304:R,A}
|
||||
cv{a>2201:A,R}
|
||||
bqf{x<1277:R,R}
|
||||
rg{a<3585:ljp,m<2211:A,x<3630:A,R}
|
||||
mg{s>2602:fn,A}
|
||||
hc{m>464:A,R}
|
||||
qj{m<1135:bqf,m>1244:R,sj}
|
||||
mkg{s<2420:R,R}
|
||||
kt{m>2215:R,x>3386:A,x<3107:R,R}
|
||||
jpj{x>1211:A,x<1089:R,A}
|
||||
sb{a>1109:A,m<1078:R,A}
|
||||
sc{a>803:A,A}
|
||||
dtt{m>334:R,R}
|
||||
sj{m<1177:R,m>1213:R,A}
|
||||
jv{s<2957:A,a<689:zz,xqx}
|
||||
nz{a<3414:R,a>3627:A,R}
|
||||
hm{m<1514:A,s<1415:A,x<439:A,A}
|
||||
rdn{m<863:A,A}
|
||||
nx{s>817:A,m>738:A,m<651:R,A}
|
||||
zhq{s<1894:R,A}
|
||||
gs{m<2619:xn,mf}
|
||||
fhq{x>1057:vrs,s<2274:R,R}
|
||||
vx{s>2163:dzp,m<1317:qj,m>1518:bnf,ffv}
|
||||
kj{s<2020:jp,s>2358:pm,x<1307:jkp,hv}
|
||||
tj{s>710:A,A}
|
||||
dzp{a<1315:R,a>1344:A,x<1344:R,A}
|
||||
ffd{x>853:A,s<3210:A,x<366:A,qv}
|
||||
xvv{a<599:R,a>844:A,A}
|
||||
vj{a>50:A,R}
|
||||
mnq{a<1168:A,x<2692:A,s<612:A,A}
|
||||
zzs{s>821:R,x>588:R,A}
|
||||
lz{m>3378:A,s>1821:A,A}
|
||||
fm{x>1486:R,m<2571:A,a>1309:R,A}
|
||||
ll{s<553:R,R}
|
||||
crl{m>2478:ctn,s<2428:rg,hlp}
|
||||
tr{a>520:rgf,a>486:fnq,kk}
|
||||
xh{m<3422:A,A}
|
||||
ng{a<779:R,s<926:A,R}
|
||||
kgp{a>1024:R,a<983:A,A}
|
||||
hpl{s>904:A,a<1300:R,s>558:R,A}
|
||||
lfr{s>877:hs,a>360:cbs,R}
|
||||
lxk{s<851:prx,s>1176:tp,s>1014:R,dhp}
|
||||
md{s<799:qt,x<620:vml,a>3124:nm,hq}
|
||||
nc{x>2858:A,dj}
|
||||
zm{m<352:vb,x>3441:cc,m>578:vvj,sl}
|
||||
kdx{m>282:R,m>268:R,R}
|
||||
jd{a<2886:R,A}
|
||||
gp{x>1532:A,m>1022:A,m>999:A,A}
|
||||
mc{a<869:R,x>960:R,x>546:R,R}
|
||||
mqs{a>473:R,R}
|
||||
rcq{m>3330:ffd,sdd}
|
||||
xrq{m>785:A,x<416:hj,m>700:A,nz}
|
||||
lhd{s<2000:A,x>376:R,R}
|
||||
jf{s<1662:R,s>2786:lj,m<244:pvz,A}
|
||||
vjg{x<2497:R,x<2749:A,m>1548:A,A}
|
||||
pk{m<3621:R,A}
|
||||
njz{s<1939:A,A}
|
||||
zvq{m<230:R,A}
|
||||
hhj{x>2664:R,x<2502:A,R}
|
||||
vbp{x>1084:A,s>1181:A,R}
|
||||
npt{a>1293:klr,mxh}
|
||||
spt{a>406:R,A}
|
||||
ffg{a>298:A,s>1625:A,R}
|
||||
xf{a>559:fg,x<1682:pf,a<362:gxx,qqm}
|
||||
czb{x<2169:vd,m>579:hsk,a<735:gm,jf}
|
||||
cq{m>605:A,x<937:A,R}
|
||||
mxd{s<2598:A,a<3726:xl,m<3903:A,bgn}
|
||||
zh{x>1813:R,R}
|
||||
srn{m<1000:fsx,R}
|
||||
tb{x<2314:tts,s<1629:gzg,x>2644:kz,mg}
|
||||
bdt{m>340:A,s>3192:R,A}
|
||||
kp{x<931:kxg,x>1022:R,m>1257:mzl,sb}
|
||||
zpt{m<699:A,a>1194:A,s>3079:R,A}
|
||||
fk{m>759:R,s<803:A,qlh}
|
||||
tcf{a<205:A,m>292:A,a>410:A,R}
|
||||
grr{a>2840:A,s<3459:R,m>3809:R,A}
|
||||
hg{s<2052:R,m<2485:R,m>2555:A,A}
|
||||
nkb{s>1347:zr,x<734:gkt,s<583:pj,lfr}
|
||||
mzl{a>1112:A,m<1575:A,x<965:A,R}
|
||||
jbc{a<396:cmx,a>419:hc,R}
|
||||
fx{a<3812:A,m>3924:R,m<3887:R,R}
|
||||
pmb{a<3384:R,a>3487:R,s>3022:A,R}
|
||||
gm{m<364:R,m<438:R,R}
|
||||
bs{s>1109:R,A}
|
||||
dc{x<1435:bqk,m>419:glc,m<242:hlj,hpl}
|
||||
ctg{x<1283:A,a>1373:A,m<566:R,R}
|
||||
bvp{s<2372:A,A}
|
||||
zp{a>2648:A,A}
|
||||
hr{x<2598:R,R}
|
||||
mxh{m>1096:A,a>1255:R,vqc}
|
||||
vg{s>1216:A,x>102:A,a>3158:R,R}
|
||||
qv{x>561:R,m<3759:R,R}
|
||||
jhr{a<662:ch,A}
|
||||
smh{s<2163:A,x<1409:A,R}
|
||||
kks{m<591:vkg,m<885:tg,s>1503:hvj,rr}
|
||||
rtv{m>768:cdv,dtt}
|
||||
bqq{m>3706:A,m>3640:R,R}
|
||||
fck{a>3188:kps,A}
|
||||
mkj{s<1719:A,s>3137:R,A}
|
||||
cdv{m<1246:R,a<1145:A,hlx}
|
||||
qp{a>3555:A,x<1837:A,x<2044:ndg,vl}
|
||||
txd{s>1260:R,a>2410:A,R}
|
||||
bd{a>322:A,x>1042:A,qtn}
|
||||
qt{s<292:qds,m<3916:ptb,s<524:ns,scg}
|
||||
zzc{s>3127:R,hn}
|
||||
rnk{a<347:R,R}
|
||||
kkb{a<234:hr,m>1487:bcr,gk}
|
||||
rqd{a<1012:R,s>2272:A,s<804:R,R}
|
||||
brn{a>1086:A,a<935:A,A}
|
||||
mzb{a<185:R,m<2294:A,A}
|
||||
rgb{s<1147:R,x<2534:A,A}
|
||||
dd{x>667:bd,m>1103:jhc,x<384:qk,vn}
|
||||
xdb{x>3728:A,a<1566:R,a<1677:R,A}
|
||||
sdv{m<931:R,A}
|
||||
pt{m<3631:R,R}
|
||||
cx{a<1042:lb,s<1432:rtv,x<745:qvv,bvk}
|
||||
prx{m<3771:A,s<430:R,x>860:R,R}
|
||||
vp{s>3461:A,A}
|
||||
rqj{a<2350:lls,m>2129:kt,a>2428:A,A}
|
||||
sx{a<1357:kkz,fj}
|
||||
dsk{s>1588:mhb,gd}
|
||||
ns{a<3061:R,a>3401:R,s<433:A,A}
|
||||
tg{a<3036:bz,s>2191:fcv,x>825:qp,xrq}
|
||||
lbz{a<210:A,x<3371:R,A}
|
||||
jb{x>3055:kd,m<1445:dm,lbs}
|
||||
qfp{a<80:mq,x>2922:A,R}
|
||||
zsv{a>2555:grr,A}
|
||||
ljp{s>1204:A,a>3115:A,A}
|
||||
bv{a<2458:R,m<3711:pt,m>3773:zhl,dkz}
|
||||
slk{a<847:kn,m<2666:nt,x<1985:mt,cmg}
|
||||
qgp{m>263:R,m>115:R,m<72:R,A}
|
||||
gtb{a<1533:A,R}
|
||||
vml{x<209:vg,m>3897:R,A}
|
||||
bf{a>510:R,s>2009:A,R}
|
||||
qm{m>606:xqg,zvq}
|
||||
cl{s>1521:tz,rzj}
|
||||
gr{x<1904:A,m>372:R,A}
|
||||
zz{m<1467:A,A}
|
||||
qvv{s>2314:fcd,qb}
|
||||
zj{a>706:R,s<398:A,R}
|
||||
fcv{a<3531:tf,m<761:A,vdq}
|
||||
bgp{x>1724:rhh,a<1212:cx,x<1026:gtg,qlc}
|
||||
mrk{a<3128:A,A}
|
||||
dzr{a<3025:ctx,m>3794:bk,pcj}
|
||||
qz{m<3561:nj,x>1738:mj,s<1525:lp,dzr}
|
||||
rm{x>3171:R,x>2793:A,R}
|
||||
fr{a>1217:jfg,m>1190:lm,R}
|
||||
klr{x>863:sdv,R}
|
||||
qcr{x>1610:R,m<2179:R,R}
|
||||
kkj{s>2614:R,x<2010:A,s<2264:R,A}
|
||||
lj{s>3244:A,m<382:A,R}
|
||||
fhj{s<1885:A,a>824:A,m<558:R,R}
|
||||
pf{m<624:xgc,s<2448:nkb,dd}
|
||||
vn{m<929:R,a>324:mqs,A}
|
||||
bq{m<1220:A,s>975:njz,A}
|
||||
cxp{s<1911:R,A}
|
||||
cbs{a<459:R,x>1291:R,m<1391:R,R}
|
||||
vl{x>2211:R,a<3304:A,s<878:A,R}
|
||||
lm{s>3149:A,R}
|
||||
xl{s<3195:A,s<3503:A,R}
|
||||
tk{x<220:bvp,m<802:bt,gqh}
|
||||
bh{a>851:R,x<3238:A,m>3147:R,A}
|
||||
jss{s>1416:snm,x>461:A,ph}
|
||||
rk{m>322:A,A}
|
||||
gqh{a<1303:ptn,a>1347:A,A}
|
||||
rct{m>2928:R,A}
|
||||
bz{x>1564:A,s<2021:A,x<851:A,R}
|
||||
ckf{x<3624:A,x>3804:A,s>3001:A,R}
|
||||
pkp{m<2215:R,m<2460:R,A}
|
||||
vd{a<682:dx,s<1565:ng,s>2392:R,fhj}
|
||||
rvs{a>1298:sx,xlv}
|
||||
qjx{x>3570:xvv,s>2626:R,A}
|
||||
rn{x>2616:R,s>3454:A,m<1978:R,A}
|
||||
xbd{s<1931:R,a<3678:qfd,m>1997:A,R}
|
||||
pm{s>2579:R,x<1132:A,s>2434:A,R}
|
||||
zpx{m<3773:R,s>816:A,R}
|
||||
tjp{x<3526:A,s<504:A,A}
|
||||
bp{x>3649:R,m<1264:A,R}
|
||||
bqk{m<375:R,R}
|
||||
vrs{s<1841:R,x<1291:R,a>2903:R,A}
|
||||
xqx{s>3582:R,A}
|
||||
tf{a<3254:A,a<3353:A,x>1084:A,A}
|
||||
mj{m<3800:mzg,lvz}
|
||||
pnl{x<2813:R,A}
|
||||
fxb{m<2661:R,x<2111:A,A}
|
||||
ctx{s>3156:zsv,hth}
|
||||
hsk{a>697:gq,x>2818:rh,sbz}
|
||||
vdq{x<1197:R,m>835:A,a>3752:A,R}
|
||||
rc{m>3702:R,R}
|
||||
mmp{s>3446:R,m>1291:A,s>3242:A,R}
|
||||
nj{x>1965:bbc,gfp}
|
||||
jh{a<2753:svc,m>974:hjh,a<3488:R,R}
|
||||
qds{x>878:A,m>3885:R,m>3846:R,R}
|
||||
hrf{x<442:A,x<669:A,x>848:R,A}
|
||||
glm{a>2786:hpn,ht}
|
||||
gkt{s>885:R,a<349:rpc,rsx}
|
||||
zt{s>1459:qtx,fkk}
|
||||
tq{x<3396:R,s>1507:kgp,x<3427:jgt,sq}
|
||||
xls{a>2741:R,a>2721:A,m<2100:R,R}
|
||||
sl{x>3321:lbz,A}
|
||||
pvz{m<108:A,s>2235:A,R}
|
||||
drg{s<532:R,R}
|
||||
lqf{s>1779:A,a<2366:A,x<1301:R,jx}
|
||||
ph{a>1933:R,m<1747:R,R}
|
||||
spb{s<896:A,m<660:R,s<1276:A,A}
|
||||
vq{x>3791:R,m<2600:R,A}
|
||||
dkz{m>3737:A,x<802:A,R}
|
||||
jq{m<586:R,a<1256:A,a>1282:A,R}
|
||||
mzg{s<1564:gnv,a>3269:crf,mqc}
|
||||
vvj{x<3300:R,m>790:sh,R}
|
||||
xqg{s>1662:xg,x<2774:vj,m>755:qqn,spb}
|
||||
zhz{m<3445:lz,cxp}
|
||||
dk{s>3679:hpj,a<567:R,m<3407:bh,rm}
|
||||
xc{a>1310:A,x>3386:R,a<1287:R,R}
|
||||
grz{a>678:A,m<3206:R,x>1960:R,A}
|
||||
xn{a>564:pkp,a<217:zh,R}
|
||||
rr{x<1350:hjg,x<1851:jh,mv}
|
||||
dj{a>220:R,s<1186:A,R}
|
||||
vhd{x>581:A,crm}
|
||||
hlx{m<1509:A,A}
|
||||
kxg{x>855:R,x<791:A,A}
|
||||
tc{s<2245:R,mrk}
|
||||
ldq{m>3720:lxk,a>3288:sr,ll}
|
||||
gdq{s<1090:R,m>376:A,A}
|
||||
xpz{a<3808:R,a>3872:A,R}
|
||||
jhc{x>275:rnk,s<3378:A,m<1341:xzs,A}
|
||||
xgc{s<2067:pcx,s>3152:zg,pdk}
|
||||
vb{x<3555:R,x<3725:R,jnp}
|
||||
snm{x<725:R,m<1713:A,x<879:A,R}
|
||||
qg{m<687:mzm,x<3206:vhh,x<3319:rqd,tq}
|
||||
lzv{a>1600:zt,qd}
|
||||
qx{a<312:A,a>412:A,R}
|
||||
fnq{a<503:R,a>510:sm,x>2449:A,pr}
|
||||
vt{x>2628:kvq,dzs}
|
||||
xks{m<3949:A,s<2950:R,R}
|
||||
blv{a<3304:hrf,A}
|
||||
np{a<775:A,dcb}
|
||||
nk{x>863:R,s<3306:A,m<223:A,A}
|
||||
sdp{x<1476:R,m>3890:R,a<3451:A,A}
|
||||
nhl{m<2352:R,x>2923:dp,jk}
|
||||
gnv{m>3707:rrv,m>3637:A,A}
|
||||
jk{x>2815:A,m<2839:A,R}
|
||||
gjq{m>2997:qr,R}
|
||||
mf{s>433:pd,a>622:jmf,hck}
|
||||
zbl{s<880:zj,R}
|
||||
qtx{a<1800:fxb,x<1831:dhk,dnz}
|
||||
hgz{a>1320:A,m>785:A,x<536:R,A}
|
||||
cmg{x<2985:brn,x>3380:R,x>3241:zn,R}
|
||||
dlb{x<3684:A,a>3277:R,m<2362:R,R}
|
||||
cgr{s<1023:R,m<3177:A,m>3227:A,A}
|
||||
hvj{s>2773:xt,kj}
|
||||
xvh{m<735:A,m>1413:mkj,a>931:A,plb}
|
||||
pb{x>3849:R,A}
|
||||
fv{m<3880:A,x<619:jvb,s>2354:R,hjq}
|
||||
rrq{x<2862:R,R}
|
||||
jkp{x<816:R,x>1084:A,a<2935:A,R}
|
||||
lkx{s>2236:R,x<2351:A,a>2888:A,A}
|
||||
fg{m<1099:czb,x>2564:nhj,m>1409:qvt,drf}
|
||||
dv{x<1599:R,m<1517:A,m<1555:R,A}
|
||||
hb{x>884:A,a<875:A,m>1324:R,A}
|
||||
npp{s<1927:R,m<3037:A,A}
|
||||
hth{m<3818:cls,m>3880:R,a<2449:qbx,R}
|
||||
db{a>172:R,a>87:A,R}
|
||||
jn{m<1606:dv,R}
|
||||
lpk{x<587:pmb,a<3274:dh,m<3889:R,xks}
|
||||
qk{m>849:R,x<242:R,m<753:A,jln}
|
||||
cd{a>3197:A,R}
|
||||
pj{m<1029:lqj,m>1387:vr,R}
|
||||
gkc{a<988:xvh,smk}
|
||||
ghh{m<1731:A,m>1765:A,R}
|
||||
rhk{x<3091:R,a>3563:xpz,R}
|
||||
jtz{m<1294:qjb,a<848:sc,m<1356:hb,mc}
|
||||
dn{s<2289:R,R}
|
||||
lff{a<2877:A,a>2976:A,A}
|
||||
rzj{m<1228:R,s<713:R,R}
|
||||
ch{s<2218:A,R}
|
||||
lk{x>1968:A,a>1002:R,x>1816:A,R}
|
||||
dm{x<2832:A,a>753:A,A}
|
||||
tts{a<1115:lk,A}
|
||||
cxn{s>1043:txd,m>3720:zpx,A}
|
||||
rt{m<2296:A,jl}
|
||||
sr{a>3689:zzs,pk}
|
||||
gd{x>2473:A,a>331:spt,db}
|
||||
tqt{x>1763:R,a<2539:R,R}
|
||||
xm{x<2530:R,a>175:R,R}
|
||||
kd{s<708:A,a>788:R,s<1456:A,A}
|
||||
mzm{s>2314:bdt,s<1540:A,x<3283:A,pg}
|
||||
knr{s<1390:A,A}
|
||||
rq{s<541:R,x<674:R,A}
|
||||
qhs{m<2705:R,a>3248:R,R}
|
||||
qqm{a<445:xz,x>2962:rgx,tr}
|
||||
qtn{m<1288:A,x<908:R,a>152:A,R}
|
||||
pcj{a>3615:vhd,hqz}
|
||||
xhv{a>3291:R,m<3743:A,A}
|
||||
nzd{m<3103:A,R}
|
||||
dzs{m<2395:lbx,m<2840:pbz,x<1544:rsr,glm}
|
||||
xcv{a>534:R,mzb}
|
||||
svc{x>1649:R,a<2028:R,s<549:A,A}
|
||||
bg{m>732:A,x<2224:R,A}
|
||||
nb{a>2519:R,s>1151:R,a<1781:xdb,R}
|
||||
xjs{s<3128:qcr,x<2113:xcv,x<2755:qvq,kg}
|
||||
nck{a>2589:rv,nvd}
|
||||
rgf{m<688:A,s>2496:bfp,A}
|
||||
kz{m>1079:A,a>1082:zpt,R}
|
||||
fsh{m>2354:mqg,s>1339:bhm,a>2579:zx,rqj}
|
||||
ql{s<1034:gs,a>496:slk,dsk}
|
||||
css{x>776:cxn,m<3711:rch,hnj}
|
||||
qvq{x<2502:smc,m>2182:R,rn}
|
||||
mqg{a>2380:R,s<2169:rlb,a<2245:cv,R}
|
||||
mz{x<1370:R,s<1734:A,A}
|
||||
bvk{x>1121:klk,m>764:kp,fp}
|
||||
mcg{a<2768:R,m<3382:R,A}
|
||||
jvb{a<3938:A,a>3977:A,m>3920:A,A}
|
||||
hjg{s<649:fh,R}
|
||||
rrv{m<3751:R,R}
|
||||
sd{m>3738:R,R}
|
||||
sv{m>492:gsq,x>1070:R,a>2386:A,mk}
|
||||
fp{m>471:cq,R}
|
||||
hjq{x>1174:A,A}
|
||||
lq{x<3568:R,s>1780:R,m>696:A,R}
|
||||
crm{a<3752:A,m>3702:R,m<3609:A,A}
|
||||
pph{s>3586:A,A}
|
||||
in{m<1799:jjp,bdz}
|
||||
lvz{a>3026:rhk,hbj}
|
||||
fkk{m<2575:pgt,x>1787:R,x<902:tj,R}
|
||||
mk{m<406:R,R}
|
||||
hck{m<3321:A,A}
|
||||
btm{m<2792:xjs,x<2487:rcq,sz}
|
||||
pbd{a>720:A,a<613:A,R}
|
||||
bnf{x<1385:A,m>1657:ghh,A}
|
||||
kr{x<3292:R,m>701:A,x<3394:R,qgp}
|
||||
dhk{a<1975:R,m<2911:A,s>2707:A,R}
|
||||
fcd{a<1130:R,s<3191:R,A}
|
||||
xg{x>2740:A,m<754:R,a>47:A,A}
|
||||
bcm{s<3214:R,x<764:R,A}
|
||||
kpz{a>1024:R,a>1016:R,A}
|
||||
rhn{x<963:R,s<2257:R,A}
|
||||
bcr{s<2914:R,s>3566:A,a<296:A,R}
|
||||
gcd{a>690:R,m>1502:R,a<637:R,R}
|
||||
mq{a<48:A,R}
|
||||
qh{x<3604:A,A}
|
||||
jln{x>325:R,s>3443:R,a<210:A,R}
|
||||
fh{a<2968:A,x>527:A,A}
|
||||
rv{x<977:blv,tc}
|
||||
kn{x<1718:zpb,x>2652:A,pbd}
|
||||
lp{m>3819:md,a>2795:ldq,s<702:vc,css}
|
||||
gfp{m>3428:zxd,kqq}
|
||||
pbz{x<1645:fhq,m<2636:hg,x<2254:fck,pss}
|
||||
lqj{x<1273:R,A}
|
||||
hhg{x<448:A,x<622:R,R}
|
||||
lls{m>1995:A,m<1923:A,R}
|
||||
lv{s<2619:R,s>2894:R,R}
|
||||
rhh{x<2975:tb,a>1112:zjf,x<3446:qg,gkc}
|
||||
lr{s<2659:R,R}
|
||||
scg{s<618:A,R}
|
||||
fcl{m<651:A,x<3400:R,s<3038:bp,mmp}
|
||||
kg{a>780:vp,R}
|
||||
rtz{a>209:df,m>639:cb,mnj}
|
||||
jx{m>122:R,A}
|
||||
cr{a<1417:fm,gtb}
|
||||
mhb{x>1851:R,qx}
|
||||
hjh{x>1552:A,s<907:A,s>1256:A,R}
|
||||
xzs{m<1253:R,A}
|
||||
smc{a>464:R,A}
|
||||
kvq{a<2814:fsh,x<3395:gvm,crl}
|
||||
gtg{x<433:tk,x<769:bsc,s>2477:npt,rvs}
|
||||
fsx{a<2621:A,a<3519:R,R}
|
||||
nn{m<915:rk,A}
|
||||
xj{s<2545:A,A}
|
||||
ffv{m>1422:A,x<1363:jpj,m>1361:R,lmx}
|
||||
bm{m>982:R,bn}
|
||||
bfp{s>3213:R,R}
|
||||
bdz{a<2137:tqs,m<3266:vt,qz}
|
||||
sbz{a>644:R,A}
|
||||
qrp{x>3233:nb,x>2759:bm,srn}
|
||||
mqc{x>2751:R,s<2721:lkx,s<3203:vf,rc}
|
||||
qvt{m>1626:np,s>2238:gz,x<907:tbj,zbl}
|
||||
dcb{m>1700:A,R}
|
||||
dp{x>3217:A,m>2662:A,x>3064:A,A}
|
||||
cmx{x<3034:A,a<375:R,m>508:R,A}
|
||||
gq{s<1476:A,a<786:R,a>840:R,R}
|
||||
mmv{m<262:R,x>1311:A,x<449:R,A}
|
||||
ndg{x<1971:R,a<3265:R,R}
|
||||
zpb{x<745:R,R}
|
||||
ngb{x<798:A,m<3645:R,s<2497:R,A}
|
||||
pss{s>1672:cd,qhs}
|
||||
jm{m<1177:A,A}
|
||||
jp{m>961:A,s>1784:A,A}
|
||||
bbl{m<2805:R,x>3597:R,m<2849:A,A}
|
||||
qr{m>3524:R,R}
|
||||
kps{a>3665:A,R}
|
||||
dhp{a>3587:R,R}
|
||||
sm{m<821:R,A}
|
||||
dnz{x>2559:A,s>2597:A,A}
|
||||
zg{a<203:pph,x<973:R,x<1362:rfl,A}
|
||||
prh{s>2052:xvn,x<2877:rgb,s<1031:tjp,xh}
|
||||
rj{m>3917:R,R}
|
||||
qvh{s>2604:xcm,s<1359:dc,a<1332:ss,bcd}
|
||||
qjb{s<3285:A,A}
|
||||
df{x>2352:R,m<538:ffg,s>1850:kkj,nx}
|
||||
dx{s>2250:A,R}
|
||||
klk{s<2623:smh,a>1109:dvl,x>1432:sk,A}
|
||||
vlq{m<400:R,R}
|
||||
gk{a>283:R,x>2989:R,A}
|
||||
kk{m<1175:bg,td}
|
||||
gvm{s<1760:nhl,hp}
|
||||
qs{s<2928:A,m>783:R,s<3382:A,R}
|
||||
nvd{m<1411:cl,x>1123:jn,m<1659:lr,jss}
|
||||
jkj{m>473:A,x<637:R,a>261:A,A}
|
||||
kqq{a>3249:rhn,s<1835:R,A}
|
||||
tbj{s<1246:A,s>1711:hhg,a<755:R,hm}
|
||||
tp{a>3324:A,m<3763:R,a<3097:R,A}
|
||||
pmr{s>1708:A,m<3460:A,A}
|
||||
dhd{s>990:R,m<3426:R,R}
|
||||
fjx{x<3231:pmr,s>2189:ckf,m<3402:R,jd}
|
||||
mh{x>1109:R,R}
|
||||
hpn{s>1992:nzd,A}
|
||||
lg{x<274:R,R}
|
||||
hv{s<2197:R,x<1939:R,R}
|
||||
rsx{s<436:R,A}
|
||||
sh{a>243:R,m<886:A,R}
|
||||
nq{x>2986:fcl,zzc}
|
||||
zxd{a<2811:A,mkg}
|
||||
bsc{s<1824:fk,fz}
|
||||
fj{x>928:R,m>1085:R,A}
|
||||
zhl{m>3798:A,R}
|
||||
fn{s<3288:R,x<2433:R,x>2525:A,R}
|
||||
nhj{s<1867:jb,jv}
|
||||
mnj{x>2286:hhj,s>1392:gr,R}
|
||||
qbx{m>3852:R,A}
|
||||
pg{m>390:A,R}
|
||||
hs{s<1082:A,x>1329:R,a>320:A,A}
|
||||
xs{m<3677:rq,m<3749:R,a<2400:drg,R}
|
||||
pcx{s>1363:A,tcf}
|
||||
lmx{m>1337:R,a<1276:A,R}
|
||||
cc{m<734:A,R}
|
||||
hp{s<3126:A,R}
|
||||
mt{m<3297:jfp,sd}
|
||||
nm{x>1332:sdp,a>3454:fx,a<3290:qpx,rj}
|
||||
qd{x>2236:gjq,cr}
|
||||
zn{m>3552:R,s>1435:A,s>1267:A,A}
|
||||
gzg{s>1066:R,mnq}
|
||||
zzp{m<1020:lhd,A}
|
||||
jzd{x>2390:rd,m<1069:kks,nck}
|
||||
pr{x>1956:R,s>1500:A,m>843:R,A}
|
||||
dvl{s<3137:R,m>605:R,A}
|
||||
js{m<2084:R,x<2870:R,R}
|
||||
jgt{m<1321:R,x<3410:R,A}
|
||||
jnp{a<233:A,s>2408:R,x<3862:R,R}
|
||||
gsq{a>3028:A,a<1961:R,a>2431:A,A}
|
||||
|
||||
{x=1637,m=1909,a=2036,s=1546}
|
||||
{x=1501,m=118,a=732,s=800}
|
||||
{x=3014,m=1069,a=3167,s=1318}
|
||||
{x=435,m=1750,a=41,s=1563}
|
||||
{x=477,m=185,a=1838,s=193}
|
||||
{x=1347,m=244,a=2415,s=2626}
|
||||
{x=578,m=553,a=2510,s=136}
|
||||
{x=249,m=166,a=762,s=23}
|
||||
{x=1172,m=489,a=2321,s=1040}
|
||||
{x=23,m=3874,a=1228,s=980}
|
||||
{x=2831,m=20,a=2235,s=205}
|
||||
{x=2087,m=29,a=534,s=1455}
|
||||
{x=2118,m=229,a=421,s=19}
|
||||
{x=2014,m=2489,a=99,s=1385}
|
||||
{x=1211,m=2963,a=1943,s=25}
|
||||
{x=1342,m=1735,a=1478,s=6}
|
||||
{x=1991,m=252,a=3415,s=83}
|
||||
{x=246,m=151,a=321,s=1155}
|
||||
{x=8,m=2267,a=3,s=2530}
|
||||
{x=3159,m=558,a=805,s=1871}
|
||||
{x=2923,m=465,a=1305,s=2882}
|
||||
{x=1688,m=201,a=257,s=218}
|
||||
{x=884,m=2083,a=864,s=119}
|
||||
{x=143,m=2435,a=3623,s=2019}
|
||||
{x=1667,m=481,a=1905,s=188}
|
||||
{x=268,m=1858,a=1079,s=913}
|
||||
{x=860,m=214,a=487,s=143}
|
||||
{x=558,m=3198,a=2,s=42}
|
||||
{x=2090,m=92,a=308,s=1373}
|
||||
{x=767,m=2710,a=362,s=3}
|
||||
{x=272,m=55,a=189,s=231}
|
||||
{x=1359,m=87,a=90,s=11}
|
||||
{x=124,m=42,a=3276,s=1632}
|
||||
{x=2899,m=2442,a=220,s=3152}
|
||||
{x=475,m=1049,a=1608,s=683}
|
||||
{x=2820,m=385,a=266,s=1844}
|
||||
{x=169,m=2898,a=150,s=179}
|
||||
{x=44,m=224,a=1315,s=1709}
|
||||
{x=35,m=45,a=99,s=87}
|
||||
{x=12,m=338,a=823,s=301}
|
||||
{x=436,m=2035,a=107,s=822}
|
||||
{x=1512,m=38,a=469,s=549}
|
||||
{x=1415,m=15,a=692,s=1507}
|
||||
{x=1571,m=527,a=439,s=813}
|
||||
{x=712,m=397,a=380,s=3369}
|
||||
{x=68,m=958,a=350,s=1372}
|
||||
{x=1040,m=1452,a=1976,s=526}
|
||||
{x=2126,m=89,a=115,s=257}
|
||||
{x=1320,m=534,a=2419,s=2958}
|
||||
{x=1503,m=855,a=876,s=4}
|
||||
{x=1448,m=793,a=253,s=1391}
|
||||
{x=1590,m=569,a=110,s=1817}
|
||||
{x=1880,m=936,a=322,s=252}
|
||||
{x=13,m=520,a=1705,s=73}
|
||||
{x=1668,m=2834,a=2717,s=1858}
|
||||
{x=1186,m=1567,a=237,s=183}
|
||||
{x=632,m=113,a=2854,s=342}
|
||||
{x=1734,m=64,a=530,s=2831}
|
||||
{x=1282,m=1059,a=213,s=14}
|
||||
{x=42,m=34,a=2780,s=1054}
|
||||
{x=662,m=824,a=441,s=39}
|
||||
{x=728,m=881,a=1238,s=2748}
|
||||
{x=732,m=742,a=978,s=2641}
|
||||
{x=132,m=843,a=849,s=1306}
|
||||
{x=1577,m=586,a=543,s=3118}
|
||||
{x=4,m=490,a=114,s=990}
|
||||
{x=3110,m=1960,a=703,s=608}
|
||||
{x=808,m=1548,a=485,s=352}
|
||||
{x=739,m=534,a=1613,s=51}
|
||||
{x=1019,m=2004,a=1847,s=2174}
|
||||
{x=2984,m=1413,a=169,s=2552}
|
||||
{x=2762,m=23,a=1118,s=625}
|
||||
{x=717,m=827,a=909,s=109}
|
||||
{x=337,m=1378,a=1303,s=578}
|
||||
{x=1069,m=1421,a=804,s=224}
|
||||
{x=234,m=581,a=931,s=410}
|
||||
{x=316,m=570,a=821,s=742}
|
||||
{x=768,m=1915,a=737,s=281}
|
||||
{x=9,m=80,a=1088,s=1711}
|
||||
{x=101,m=37,a=719,s=2625}
|
||||
{x=1354,m=15,a=395,s=833}
|
||||
{x=504,m=2989,a=29,s=1744}
|
||||
{x=1040,m=141,a=2771,s=186}
|
||||
{x=396,m=947,a=473,s=1942}
|
||||
{x=1364,m=173,a=15,s=2680}
|
||||
{x=1823,m=872,a=600,s=367}
|
||||
{x=717,m=1298,a=1419,s=685}
|
||||
{x=2922,m=367,a=311,s=95}
|
||||
{x=405,m=1169,a=272,s=574}
|
||||
{x=2209,m=8,a=56,s=615}
|
||||
{x=892,m=39,a=508,s=775}
|
||||
{x=403,m=868,a=22,s=1485}
|
||||
{x=17,m=834,a=191,s=612}
|
||||
{x=30,m=718,a=659,s=199}
|
||||
{x=1238,m=733,a=169,s=1232}
|
||||
{x=538,m=66,a=434,s=1821}
|
||||
{x=1328,m=2134,a=982,s=507}
|
||||
{x=13,m=1934,a=498,s=3765}
|
||||
{x=1806,m=445,a=551,s=70}
|
||||
{x=178,m=540,a=1321,s=412}
|
||||
{x=2363,m=1979,a=988,s=1604}
|
||||
{x=61,m=52,a=2250,s=772}
|
||||
{x=887,m=1865,a=2985,s=23}
|
||||
{x=1805,m=1366,a=808,s=314}
|
||||
{x=1542,m=649,a=1405,s=3211}
|
||||
{x=1685,m=1393,a=359,s=1961}
|
||||
{x=2482,m=1943,a=1461,s=2809}
|
||||
{x=879,m=784,a=639,s=860}
|
||||
{x=2039,m=105,a=659,s=812}
|
||||
{x=626,m=1428,a=16,s=227}
|
||||
{x=879,m=1455,a=2669,s=296}
|
||||
{x=1373,m=1976,a=577,s=1808}
|
||||
{x=387,m=2,a=2139,s=592}
|
||||
{x=1127,m=443,a=1010,s=444}
|
||||
{x=599,m=157,a=217,s=2041}
|
||||
{x=1626,m=2839,a=388,s=365}
|
||||
{x=648,m=884,a=2314,s=1900}
|
||||
{x=1625,m=414,a=1168,s=723}
|
||||
{x=1019,m=1323,a=715,s=784}
|
||||
{x=2298,m=2611,a=513,s=383}
|
||||
{x=222,m=189,a=150,s=1935}
|
||||
{x=3557,m=122,a=320,s=2309}
|
||||
{x=138,m=425,a=17,s=170}
|
||||
{x=696,m=55,a=1910,s=869}
|
||||
{x=571,m=5,a=1293,s=504}
|
||||
{x=1024,m=492,a=2218,s=151}
|
||||
{x=1412,m=1357,a=824,s=1767}
|
||||
{x=501,m=752,a=243,s=488}
|
||||
{x=506,m=2264,a=2049,s=1313}
|
||||
{x=299,m=27,a=1827,s=188}
|
||||
{x=9,m=2130,a=62,s=375}
|
||||
{x=599,m=1968,a=1951,s=3584}
|
||||
{x=162,m=1317,a=177,s=396}
|
||||
{x=122,m=986,a=16,s=2061}
|
||||
{x=281,m=79,a=1002,s=105}
|
||||
{x=3,m=1686,a=830,s=1580}
|
||||
{x=504,m=378,a=383,s=1149}
|
||||
{x=763,m=37,a=364,s=808}
|
||||
{x=146,m=142,a=189,s=1164}
|
||||
{x=1365,m=1172,a=264,s=360}
|
||||
{x=118,m=663,a=4,s=1059}
|
||||
{x=1301,m=2155,a=1253,s=2866}
|
||||
{x=1517,m=2329,a=366,s=95}
|
||||
{x=339,m=1735,a=1898,s=1340}
|
||||
{x=1261,m=2655,a=524,s=1216}
|
||||
{x=79,m=3221,a=636,s=203}
|
||||
{x=140,m=38,a=2493,s=733}
|
||||
{x=1876,m=521,a=766,s=110}
|
||||
{x=788,m=1326,a=257,s=527}
|
||||
{x=556,m=58,a=384,s=123}
|
||||
{x=1766,m=630,a=1054,s=17}
|
||||
{x=419,m=851,a=190,s=122}
|
||||
{x=180,m=2229,a=172,s=2138}
|
||||
{x=29,m=73,a=394,s=53}
|
||||
{x=785,m=2429,a=259,s=1174}
|
||||
{x=2157,m=903,a=814,s=2252}
|
||||
{x=311,m=441,a=158,s=1279}
|
||||
{x=2662,m=1791,a=836,s=2162}
|
||||
{x=513,m=536,a=331,s=1346}
|
||||
{x=223,m=955,a=489,s=386}
|
||||
{x=2017,m=362,a=931,s=1133}
|
||||
{x=539,m=409,a=120,s=41}
|
||||
{x=1686,m=587,a=1738,s=52}
|
||||
{x=1056,m=552,a=59,s=146}
|
||||
{x=2807,m=1088,a=88,s=2894}
|
||||
{x=613,m=253,a=1044,s=1219}
|
||||
{x=341,m=82,a=349,s=222}
|
||||
{x=402,m=577,a=1059,s=739}
|
||||
{x=217,m=3325,a=54,s=1457}
|
||||
{x=144,m=82,a=951,s=1934}
|
||||
{x=2731,m=33,a=2289,s=163}
|
||||
{x=2556,m=873,a=281,s=2512}
|
||||
{x=1805,m=124,a=2139,s=33}
|
||||
{x=550,m=2530,a=2411,s=65}
|
||||
{x=492,m=820,a=625,s=2324}
|
||||
{x=864,m=377,a=1377,s=2620}
|
||||
{x=2147,m=1173,a=151,s=116}
|
||||
{x=201,m=143,a=2566,s=106}
|
||||
{x=195,m=2048,a=305,s=2786}
|
||||
{x=37,m=882,a=3088,s=100}
|
||||
{x=421,m=277,a=2090,s=167}
|
||||
{x=2032,m=1263,a=1288,s=658}
|
||||
{x=2244,m=76,a=519,s=455}
|
||||
{x=23,m=2544,a=699,s=22}
|
||||
{x=2404,m=1411,a=1417,s=272}
|
||||
{x=574,m=2109,a=507,s=865}
|
||||
{x=354,m=471,a=38,s=1162}
|
||||
{x=865,m=135,a=434,s=391}
|
||||
{x=205,m=1244,a=942,s=961}
|
||||
{x=791,m=2963,a=127,s=1359}
|
||||
{x=3493,m=460,a=906,s=325}
|
||||
{x=1312,m=237,a=393,s=7}
|
||||
{x=819,m=1996,a=1259,s=387}
|
||||
{x=133,m=911,a=161,s=362}
|
||||
{x=534,m=1999,a=1237,s=114}
|
||||
{x=62,m=70,a=1019,s=290}
|
||||
{x=80,m=226,a=78,s=416}
|
||||
{x=372,m=429,a=134,s=747}
|
||||
{x=702,m=1387,a=3614,s=2657}
|
||||
{x=1392,m=101,a=713,s=20}
|
1004
2023/new.out
Normal file
1004
2023/new.out
Normal file
File diff suppressed because it is too large
Load diff
1004
2023/old.out
Normal file
1004
2023/old.out
Normal file
File diff suppressed because it is too large
Load diff
3
2023/readme.md
Normal file
3
2023/readme.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
# AOC 23
|
||||
|
||||
Complete all of AoC 2023 in Rust. No specific constraints, not going for any kind of high speed or clean code.
|
104
2023/src/bin/day01.rs
Normal file
104
2023/src/bin/day01.rs
Normal file
|
@ -0,0 +1,104 @@
|
|||
use aoc23::prelude::*;
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
let mut sum = 0;
|
||||
for line in input.lines().into_iter() {
|
||||
let chars = line.chars();
|
||||
let first_num: usize = chars
|
||||
.clone()
|
||||
.into_iter()
|
||||
.skip_while(|c| !c.is_digit(10))
|
||||
.take(1)
|
||||
// This would get continuous digits: .take_while(|c| c.is_digit(10))
|
||||
.collect::<String>()
|
||||
.parse()?;
|
||||
let last_num: usize = chars
|
||||
.into_iter()
|
||||
.rev()
|
||||
.skip_while(|c| !c.is_digit(10))
|
||||
.take(1)
|
||||
.collect::<String>()
|
||||
.parse()?;
|
||||
let value = first_num * 10 + last_num;
|
||||
sum += value;
|
||||
}
|
||||
|
||||
// println!("Answer: {}", sum);
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
fn num_to_word(num: u32) -> Option<&'static str> {
|
||||
match num {
|
||||
1 => Some("one"),
|
||||
2 => Some("two"),
|
||||
3 => Some("three"),
|
||||
4 => Some("four"),
|
||||
5 => Some("five"),
|
||||
6 => Some("six"),
|
||||
7 => Some("seven"),
|
||||
8 => Some("eight"),
|
||||
9 => Some("nine"),
|
||||
_ => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn first_occurrence(str: &str, reversed: bool) -> Option<u32> {
|
||||
if reversed {
|
||||
for (i, char) in str.chars().rev().enumerate() {
|
||||
let digit = char.to_digit(10).or_else(|| {
|
||||
for num in 1..=9 {
|
||||
if let Some(num_word) = num_to_word(num) {
|
||||
if i + 1 >= num_word.len()
|
||||
&& &str[str.len() - i - 1..str.len()][..num_word.len()] == num_word
|
||||
{
|
||||
return Some(num);
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
});
|
||||
if digit.is_some() {
|
||||
return digit;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
for (i, char) in str.chars().enumerate() {
|
||||
let digit = char.to_digit(10).or_else(|| {
|
||||
for num in 1..=9 {
|
||||
if let Some(num_word) = num_to_word(num) {
|
||||
if i + 1 >= num_word.len() && &str[i + 1 - num_word.len()..=i] == num_word {
|
||||
return Some(num);
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
});
|
||||
if digit.is_some() {
|
||||
return digit;
|
||||
}
|
||||
}
|
||||
}
|
||||
None
|
||||
}
|
||||
|
||||
fn part_2(input: String) -> Result<u32> {
|
||||
let mut sum = 0;
|
||||
for line in input.lines().into_iter() {
|
||||
let first_num = first_occurrence(line, false).ok_or("No number found in line")?;
|
||||
let last_num = first_occurrence(line, true).ok_or("No number found in line reversed")?;
|
||||
let value = first_num * 10 + last_num;
|
||||
sum += value;
|
||||
println!("Line {line}: a:{first_num}|b:{last_num} = {value} ++ {sum}");
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day 1");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(1).await?;
|
||||
println!("part 1: {}", part1(input.clone())?);
|
||||
println!("part 2: {}", part_2(input.clone())?);
|
||||
Ok(())
|
||||
}
|
144
2023/src/bin/day01_revised.rs
Normal file
144
2023/src/bin/day01_revised.rs
Normal file
|
@ -0,0 +1,144 @@
|
|||
use aoc23::prelude::*;
|
||||
|
||||
fn part_1(input: String) -> Result<usize> {
|
||||
let mut sum = 0;
|
||||
for line in input.lines().into_iter() {
|
||||
let chars = line.chars();
|
||||
let first_num: usize = chars
|
||||
.clone()
|
||||
.into_iter()
|
||||
.skip_while(|c| !c.is_digit(10))
|
||||
.take(1)
|
||||
// This would get continuous digits: .take_while(|c| c.is_digit(10))
|
||||
.collect::<String>()
|
||||
.parse()?;
|
||||
let last_num: usize = chars
|
||||
.into_iter()
|
||||
.rev()
|
||||
.skip_while(|c| !c.is_digit(10))
|
||||
.take(1)
|
||||
.collect::<String>()
|
||||
.parse()?;
|
||||
let value = first_num * 10 + last_num;
|
||||
sum += value;
|
||||
}
|
||||
|
||||
// println!("Answer: {}", sum);
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
fn part_2(input: String) -> Result<u32> {
|
||||
let numbers: [(&'static str, u32); 9] = [
|
||||
("one", 1),
|
||||
("two", 2),
|
||||
("three", 3),
|
||||
("four", 4),
|
||||
("five", 5),
|
||||
("six", 6),
|
||||
("seven", 7),
|
||||
("eight", 8),
|
||||
("nine", 9),
|
||||
];
|
||||
let mut sum = 0;
|
||||
for line in input.lines().into_iter() {
|
||||
let mut chars = line.chars();
|
||||
let mut peek_index = 0;
|
||||
let first_num = loop {
|
||||
// I wanted this to work but peek advances the iterator anyways despite saying it
|
||||
// doesn't. I don't understand
|
||||
//
|
||||
// ```
|
||||
// if let Some(Some(peek_digit)) = chars.by_ref().peekable().peek().map(|c| c.to_digit(10))
|
||||
// ```
|
||||
if let Some(Some(peek_digit)) = line.chars().nth(peek_index).map(|c| c.to_digit(10)) {
|
||||
break peek_digit;
|
||||
}
|
||||
if let Some((_, digit)) = numbers.iter().find(|num| chars.as_str().starts_with(num.0)) {
|
||||
break *digit;
|
||||
}
|
||||
if chars.next().is_none() {
|
||||
break 0;
|
||||
}
|
||||
peek_index += 1;
|
||||
};
|
||||
let last_num = loop {
|
||||
if let Some((_, digit)) = numbers.iter().find(|num| chars.as_str().ends_with(num.0)) {
|
||||
break *digit;
|
||||
}
|
||||
if let Some(last_char) = chars.next_back() {
|
||||
if let Some(digit) = last_char.to_digit(10) {
|
||||
break digit;
|
||||
}
|
||||
} else {
|
||||
break first_num;
|
||||
}
|
||||
};
|
||||
let value = first_num * 10 + last_num;
|
||||
sum += value;
|
||||
// println!("Line {line}: a:{first_num}|b:{last_num} = {value} ++ {sum}");
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
fn part_2_no_peek(input: String) -> Result<u32> {
|
||||
// We can just add the text versions of the number as well and this removes the
|
||||
// need to peek at the digit like in the above method. Idk what I like better...
|
||||
let numbers: [(&'static str, u32); 18] = [
|
||||
("one", 1),
|
||||
("1", 1),
|
||||
("two", 2),
|
||||
("2", 2),
|
||||
("three", 3),
|
||||
("3", 3),
|
||||
("four", 4),
|
||||
("4", 4),
|
||||
("five", 5),
|
||||
("5", 5),
|
||||
("six", 6),
|
||||
("6", 6),
|
||||
("seven", 7),
|
||||
("7", 7),
|
||||
("eight", 8),
|
||||
("8", 8),
|
||||
("nine", 9),
|
||||
("9", 9),
|
||||
];
|
||||
let mut sum = 0;
|
||||
for line in input.lines().into_iter() {
|
||||
let mut chars = line.chars();
|
||||
let first_num = loop {
|
||||
if let Some((_, digit)) = numbers.iter().find(|num| chars.as_str().starts_with(num.0)) {
|
||||
break *digit;
|
||||
}
|
||||
if chars.next().is_none() {
|
||||
break 0;
|
||||
}
|
||||
};
|
||||
let last_num = loop {
|
||||
if let Some((_, digit)) = numbers.iter().find(|num| chars.as_str().ends_with(num.0)) {
|
||||
break *digit;
|
||||
}
|
||||
if chars.next_back().is_none() {
|
||||
break first_num;
|
||||
}
|
||||
};
|
||||
let value = first_num * 10 + last_num;
|
||||
sum += value;
|
||||
// println!("Line {line}: a:{first_num}|b:{last_num} = {value} ++ {sum}");
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day 1");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(1).await?;
|
||||
println!("part 1: {}", part_1(input.clone())?);
|
||||
println!("part 2: {}\t[peek method]", part_2(input.clone())?);
|
||||
println!(
|
||||
"part 2: {}\t[no peek method]",
|
||||
part_2_no_peek(input.clone())?
|
||||
);
|
||||
Ok(())
|
||||
}
|
134
2023/src/bin/day02.rs
Normal file
134
2023/src/bin/day02.rs
Normal file
|
@ -0,0 +1,134 @@
|
|||
use aoc23::prelude::*;
|
||||
use std::{collections::HashMap, fmt::Display, str::FromStr};
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Clone, Hash)]
|
||||
enum Cube {
|
||||
Blue,
|
||||
Red,
|
||||
Green,
|
||||
}
|
||||
|
||||
impl FromStr for Cube {
|
||||
type Err = String;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
match s {
|
||||
"blue" => Ok(Cube::Blue),
|
||||
"red" => Ok(Cube::Red),
|
||||
"green" => Ok(Cube::Green),
|
||||
_ => Err("asd".into()),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Clone)]
|
||||
struct Game {
|
||||
id: u32,
|
||||
sets: Vec<HashMap<Cube, u32>>,
|
||||
}
|
||||
|
||||
impl FromStr for Game {
|
||||
type Err = String;
|
||||
|
||||
// Game 1: 7 green, 4 blue, 3 red; 4 blue, 10 red, 1 green; 1 blue, 9 red Game 2:
|
||||
// 2 red, 4 blue, 3 green; 5 green, 3 red, 1 blue; 3 green, 5 blue, 3 red Game 3:
|
||||
// 12 red, 1 blue; 6 red, 2 green, 3 blue; 2 blue, 5 red, 3 green
|
||||
fn from_str(line: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let parts: Vec<&str> = line.split(':').collect();
|
||||
let id = parts[0]
|
||||
.trim()
|
||||
.split_whitespace()
|
||||
.last()
|
||||
.ok_or("no id")?
|
||||
.parse::<u32>()
|
||||
.ok()
|
||||
.ok_or("not a number")?;
|
||||
let sets = parts[1]
|
||||
.split(';')
|
||||
.map(|set| {
|
||||
set.split(',')
|
||||
.filter_map(|part| {
|
||||
let mut iter = part.trim().split_whitespace();
|
||||
let count = iter.next().unwrap().parse::<u32>().unwrap();
|
||||
let color = iter.next().unwrap().parse::<Cube>().ok()?;
|
||||
Some((color, count))
|
||||
})
|
||||
.collect()
|
||||
})
|
||||
.collect();
|
||||
Ok(Game { id, sets })
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<impl Display> {
|
||||
let games: Vec<Game> = input
|
||||
.lines()
|
||||
.into_iter()
|
||||
.map(|l| l.parse().expect("failed to parse line"))
|
||||
.collect();
|
||||
let mut possible_game_id_sum = 0;
|
||||
let limit_red = 12;
|
||||
let limit_green = 13;
|
||||
let limit_blue = 14;
|
||||
for game in games {
|
||||
let out_of_bounds = game.sets.iter().any(|set| match set.get(&Cube::Red) {
|
||||
Some(red) => red > &limit_red,
|
||||
None => false,
|
||||
} || match set.get(&Cube::Green) {
|
||||
Some(green) => green > &limit_green,
|
||||
None => false,
|
||||
} || match set.get(&Cube::Blue) {
|
||||
Some(blue) => blue > &limit_blue,
|
||||
None => false,
|
||||
});
|
||||
if !out_of_bounds {
|
||||
// println!("Valid game id, {:?}", game);
|
||||
possible_game_id_sum += game.id;
|
||||
} else {
|
||||
// println!("INVALID game {:?}", game);
|
||||
}
|
||||
}
|
||||
Ok(possible_game_id_sum)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<impl Display> {
|
||||
let games: Vec<Game> = input
|
||||
.lines()
|
||||
.into_iter()
|
||||
.map(|l| l.parse().expect("failed to parse line"))
|
||||
.collect();
|
||||
let mut power_sum = 0;
|
||||
for game in games {
|
||||
let mut maxes: HashMap<Cube, u32> = [(Cube::Red, 1), (Cube::Green, 1), (Cube::Blue, 1)]
|
||||
.into_iter()
|
||||
.collect();
|
||||
for set in game.sets.iter() {
|
||||
for (cube, &count) in set {
|
||||
let max_count = maxes.get_mut(cube).ok_or("default missing")?;
|
||||
*max_count = u32::max(*max_count, count);
|
||||
}
|
||||
}
|
||||
let power = maxes.values().into_iter().fold(1u32, |acc, v| acc * v);
|
||||
power_sum += power;
|
||||
}
|
||||
Ok(power_sum)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day 1");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(2).await?;
|
||||
|
||||
// ```
|
||||
// let input = "Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
|
||||
// Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
|
||||
// Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
|
||||
// Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
|
||||
// Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green"
|
||||
// .to_owned();
|
||||
// ```
|
||||
println!("part 1: {}", part1(input.clone())?);
|
||||
println!("part 2: {}", part2(input.clone())?);
|
||||
Ok(())
|
||||
}
|
189
2023/src/bin/day03.rs
Normal file
189
2023/src/bin/day03.rs
Normal file
|
@ -0,0 +1,189 @@
|
|||
use aoc23::prelude::*;
|
||||
use std::str::FromStr;
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Item {
|
||||
Digit(u32),
|
||||
Symbol(bool),
|
||||
None,
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct Number {
|
||||
pub value: usize,
|
||||
pub row_index: usize,
|
||||
pub char_start: usize,
|
||||
pub char_end: usize,
|
||||
}
|
||||
|
||||
struct Grid {
|
||||
pub rows: Vec<Vec<Item>>,
|
||||
pub numbers: Vec<Number>,
|
||||
}
|
||||
|
||||
impl Grid {
|
||||
fn get_item(&self, row: usize, col: usize) -> Option<&Item> {
|
||||
match self.rows.get(row) {
|
||||
Some(row) => row.get(col),
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
|
||||
fn get_adjacent_items(
|
||||
&self,
|
||||
row: usize,
|
||||
start: usize,
|
||||
end: usize,
|
||||
) -> Vec<(&Item, usize, usize)> {
|
||||
let row_start = if row > 0 { row - 1 } else { 0 };
|
||||
let col_start = if start > 0 { start - 1 } else { 0 };
|
||||
let mut items: Vec<(&Item, usize, usize)> = vec![];
|
||||
for row_i in row_start..=row + 1 {
|
||||
for col_i in col_start..=end + 1 {
|
||||
if row_i != row || col_i < start || col_i > end {
|
||||
let item = self.get_item(row_i, col_i);
|
||||
if let Some(item) = item {
|
||||
items.push((item, row_i, col_i));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return items;
|
||||
}
|
||||
|
||||
fn get_adjacent_numbers(&self, row: usize, col: usize) -> Vec<&Number> {
|
||||
let mut unique_numbers: Vec<&Number> = vec![];
|
||||
for item in self.get_adjacent_items(row, col, col) {
|
||||
match item {
|
||||
(Item::Digit(_), r, c) => {
|
||||
if let Some(number_at) = self
|
||||
.numbers
|
||||
.iter()
|
||||
.find(|n| n.row_index == r && c >= n.char_start && c <= n.char_end)
|
||||
{
|
||||
if unique_numbers.iter().all(|n| n.value != number_at.value) {
|
||||
unique_numbers.push(number_at);
|
||||
}
|
||||
}
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
unique_numbers
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Grid {
|
||||
type Err = BoxE;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut grid = Grid {
|
||||
rows: vec![],
|
||||
numbers: vec![],
|
||||
};
|
||||
for (row_index, line) in s.lines().enumerate() {
|
||||
let mut row: Vec<Item> = vec![];
|
||||
let mut num: Option<usize> = None;
|
||||
let mut char_start = 0;
|
||||
for (char_index, char) in line.trim().chars().enumerate() {
|
||||
if let Some(digit) = char.to_digit(10) {
|
||||
row.push(Item::Digit(digit));
|
||||
num = if let Some(existing_num) = num {
|
||||
Some(existing_num * 10 + digit as usize)
|
||||
} else {
|
||||
char_start = char_index;
|
||||
Some(digit as usize)
|
||||
};
|
||||
} else {
|
||||
if char == '.' {
|
||||
row.push(Item::None);
|
||||
} else {
|
||||
row.push(Item::Symbol(char == '*'))
|
||||
}
|
||||
if let Some(value) = num {
|
||||
grid.numbers.push(Number {
|
||||
value,
|
||||
row_index,
|
||||
char_start,
|
||||
char_end: char_index - 1,
|
||||
});
|
||||
num = None;
|
||||
char_start = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// This killed me, I forgot to add a check after the end of the line to see if I
|
||||
// was still "scanning" for a number and adding it. There was 1 single number not
|
||||
// getting parsed that was on the right edge of the grid and I could not figure it
|
||||
// out for a while.
|
||||
if let Some(value) = num {
|
||||
grid.numbers.push(Number {
|
||||
value,
|
||||
row_index,
|
||||
char_start,
|
||||
char_end: line.len() - 1,
|
||||
});
|
||||
}
|
||||
grid.rows.push(row);
|
||||
}
|
||||
Ok(grid)
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
let grid: Grid = input.parse()?;
|
||||
let mut sum = 0;
|
||||
for number in grid.numbers.iter() {
|
||||
let adjacent =
|
||||
grid.get_adjacent_items(number.row_index, number.char_start, number.char_end);
|
||||
let is_part_no = adjacent
|
||||
.iter()
|
||||
.any(|item| matches!(item, (Item::Symbol(_), _, _)));
|
||||
if is_part_no {
|
||||
sum += number.value;
|
||||
}
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
let grid: Grid = input.parse()?;
|
||||
let mut sum = 0;
|
||||
let mut used: Vec<(usize, usize)> = vec![];
|
||||
for number in grid.numbers.iter() {
|
||||
let is_used = used
|
||||
.iter()
|
||||
.any(|(row, char_start)| number.row_index == *row && number.char_start == *char_start);
|
||||
if !is_used {
|
||||
let adjacent =
|
||||
grid.get_adjacent_items(number.row_index, number.char_start, number.char_end);
|
||||
if let Some((_, row, col)) = adjacent
|
||||
.iter()
|
||||
.find(|item| matches!(item.0, Item::Symbol(true)))
|
||||
{
|
||||
let gear_nums = grid.get_adjacent_numbers(*row, *col);
|
||||
if gear_nums.len() >= 2 {
|
||||
// this is lazy.. adds duplicates but w/e
|
||||
let power = gear_nums.iter().fold(1, |pow, gear| pow * gear.value);
|
||||
gear_nums
|
||||
.iter()
|
||||
.for_each(|g| used.push((g.row_index, g.char_start)));
|
||||
sum += power;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day 3");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(3).await?;
|
||||
let part_1 = part1(input.clone())?;
|
||||
println!("part 1: {}", part_1);
|
||||
println!("part 2: {}", part2(input.clone())?);
|
||||
Ok(())
|
||||
}
|
124
2023/src/bin/day04.rs
Normal file
124
2023/src/bin/day04.rs
Normal file
|
@ -0,0 +1,124 @@
|
|||
use aoc23::prelude::*;
|
||||
use itertools::Itertools;
|
||||
use std::{collections::VecDeque, str::FromStr, time::Instant};
|
||||
|
||||
#[derive(Debug, Eq, PartialEq, Hash, Clone)]
|
||||
struct Card {
|
||||
id: usize,
|
||||
part_1_score: usize,
|
||||
part_2_matches: usize,
|
||||
part_2_count: usize,
|
||||
}
|
||||
|
||||
impl FromStr for Card {
|
||||
type Err = BoxE;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut id: Option<usize> = None;
|
||||
let mut winning_numbers: Vec<usize> = vec![];
|
||||
let mut score = 0;
|
||||
let mut matches = 0;
|
||||
for part in s.split(':') {
|
||||
if id.is_some() {
|
||||
for (num_mode, wins_or_nums) in part.split('|').enumerate() {
|
||||
wins_or_nums
|
||||
.trim()
|
||||
.split_whitespace()
|
||||
.into_iter()
|
||||
.map(|num| {
|
||||
num.parse::<usize>()
|
||||
.expect(&format!("could not parse number: {}", num))
|
||||
})
|
||||
.for_each(|num| {
|
||||
if num_mode == 0 {
|
||||
winning_numbers.push(num);
|
||||
} else {
|
||||
if winning_numbers.iter().any(|winner| winner == &num) {
|
||||
matches += 1;
|
||||
score = if score == 0 { 1 } else { score * 2 };
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
id = Some(
|
||||
part.split_whitespace()
|
||||
.last()
|
||||
.ok_or("Failed to get last item")?
|
||||
.parse()?,
|
||||
)
|
||||
}
|
||||
}
|
||||
Ok(Card {
|
||||
id: id.ok_or("no id found")?,
|
||||
part_1_score: score,
|
||||
part_2_matches: matches,
|
||||
part_2_count: 1,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
Ok(input
|
||||
.lines()
|
||||
.map(|line| line.parse::<Card>())
|
||||
.filter_map(|card| card.ok())
|
||||
.fold(0, |sum, card| sum + card.part_1_score))
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
let mut sum = 0;
|
||||
let cards = input
|
||||
.lines()
|
||||
.map(|line| line.parse::<Card>())
|
||||
.filter_map(|card| card.ok())
|
||||
.collect_vec();
|
||||
let mut queue: VecDeque<&Card> = cards.iter().collect();
|
||||
while let Some(card) = queue.pop_front() {
|
||||
sum += 1;
|
||||
for card_index in card.id..card.id + card.part_2_matches {
|
||||
cards.get(card_index).map(|c| queue.push_back(&c));
|
||||
}
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
fn part2_revised(input: String) -> Result<usize> {
|
||||
let mut sum = 0;
|
||||
let mut cards = input
|
||||
.lines()
|
||||
.map(|line| line.parse::<Card>())
|
||||
.filter_map(|card| card.ok())
|
||||
.collect_vec();
|
||||
for i in 0..cards.len() {
|
||||
let (count, matches) = {
|
||||
let card = cards.get(i).ok_or("card not found")?;
|
||||
sum += card.part_2_count;
|
||||
(card.part_2_count, card.part_2_matches)
|
||||
};
|
||||
for card_index in 1..=matches {
|
||||
cards.get_mut(i + card_index).map(|card_below| {
|
||||
card_below.part_2_count += count;
|
||||
});
|
||||
}
|
||||
}
|
||||
Ok(sum)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day 4");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(4).await?;
|
||||
let start = Instant::now();
|
||||
println!("part 1: {}\t[{:?}]", part1(input.clone())?, start.elapsed());
|
||||
let start = Instant::now();
|
||||
println!("part 2: {}\t[{:?}]", part2(input.clone())?, start.elapsed());
|
||||
let start = Instant::now();
|
||||
println!(
|
||||
"part 2: {}\t[{:?}]\t[revised]",
|
||||
part2_revised(input.clone())?,
|
||||
start.elapsed()
|
||||
);
|
||||
Ok(())
|
||||
}
|
253
2023/src/bin/day05.rs
Normal file
253
2023/src/bin/day05.rs
Normal file
|
@ -0,0 +1,253 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{str::FromStr, time::Instant};
|
||||
|
||||
#[derive(Debug, Builder, Clone)]
|
||||
struct Map {
|
||||
destination_start: usize,
|
||||
source_start: usize,
|
||||
length: usize,
|
||||
}
|
||||
|
||||
impl FromStr for Map {
|
||||
type Err = BoxE;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut parts = s
|
||||
.trim()
|
||||
.split_whitespace()
|
||||
.map(|s| s.parse::<usize>().expect("failed to parse"));
|
||||
Ok(MapBuilder::default()
|
||||
.destination_start(parts.next().expect("no dest"))
|
||||
.source_start(parts.next().expect("no start"))
|
||||
.length(parts.next().expect("no length"))
|
||||
.build()?)
|
||||
}
|
||||
}
|
||||
|
||||
impl Map {
|
||||
fn includes_source(&self, source: usize) -> bool {
|
||||
source >= self.source_start && source < self.source_start + self.length
|
||||
}
|
||||
|
||||
fn apply(&self, source: usize) -> Option<usize> {
|
||||
if self.includes_source(source) {
|
||||
let diff = source - self.source_start;
|
||||
Some(self.destination_start + diff)
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Builder, Clone)]
|
||||
struct Mapper {
|
||||
source: String,
|
||||
destination: String,
|
||||
maps: Vec<Map>,
|
||||
}
|
||||
|
||||
impl FromStr for Mapper {
|
||||
type Err = BoxE;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut mapper = MapperBuilder::default();
|
||||
mapper.maps(vec![]);
|
||||
for line in s.trim().lines() {
|
||||
if mapper.source.is_none() {
|
||||
let mut keys = line
|
||||
.split_whitespace()
|
||||
.next()
|
||||
.expect("no source-dest")
|
||||
.split("-to-");
|
||||
mapper.source(keys.next().expect("no source key").to_owned());
|
||||
mapper.destination(keys.next().expect("no destination key").to_owned());
|
||||
} else if let Some(maps) = &mut mapper.maps {
|
||||
maps.push(line.parse()?);
|
||||
}
|
||||
}
|
||||
Ok(mapper.build()?)
|
||||
}
|
||||
}
|
||||
|
||||
impl Mapper {
|
||||
fn apply(&self, source: usize) -> usize {
|
||||
self.maps
|
||||
.iter()
|
||||
.find_map(|map| map.apply(source))
|
||||
.unwrap_or(source)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Builder, Clone)]
|
||||
struct Seeds {
|
||||
source: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Builder)]
|
||||
struct Almanac {
|
||||
seeds: Seeds,
|
||||
mappers: Vec<Mapper>,
|
||||
}
|
||||
|
||||
impl Almanac {
|
||||
fn map_source(&self, source: usize, start_key: &str, end_key: &str) -> usize {
|
||||
let mut current_key = start_key;
|
||||
let mut current_value = source;
|
||||
while current_key != end_key {
|
||||
let mapper = self
|
||||
.mappers
|
||||
.iter()
|
||||
.find(|mapper| mapper.source == current_key)
|
||||
.expect("could not find mapper");
|
||||
current_value = mapper.apply(current_value);
|
||||
current_key = &mapper.destination;
|
||||
}
|
||||
current_value
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Almanac {
|
||||
type Err = BoxE;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut almanac = AlmanacBuilder::default();
|
||||
let mut parts = s.trim().split("\n\n");
|
||||
almanac.seeds(Seeds {
|
||||
source: parts.next().expect("seed line missing").to_string(),
|
||||
});
|
||||
almanac.mappers(vec![]);
|
||||
while let Some(mapper_section) = parts.next() {
|
||||
if let Some(mappers) = &mut almanac.mappers {
|
||||
mappers.push(mapper_section.parse()?);
|
||||
}
|
||||
}
|
||||
Ok(almanac.build()?)
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let almanac: Almanac = input.parse()?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let start = Instant::now();
|
||||
let answer = almanac
|
||||
.seeds
|
||||
.source
|
||||
.split(":")
|
||||
.nth(1)
|
||||
.expect("seeds missing")
|
||||
.trim()
|
||||
.split_whitespace()
|
||||
.map(|s| s.parse::<usize>().expect("failed to parse seed as number"))
|
||||
.map(|source| almanac.map_source(source, "seed", "location"))
|
||||
.min()
|
||||
.ok_or("failed to get min location")?;
|
||||
let algo_time = start.elapsed();
|
||||
|
||||
// output
|
||||
println!("Day 5, part 1: {answer}");
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let almanac: Almanac = input.parse()?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let start = Instant::now();
|
||||
let answer = almanac
|
||||
.seeds
|
||||
.source
|
||||
.split(":")
|
||||
.nth(1)
|
||||
.expect("seeds missing")
|
||||
.trim()
|
||||
.split_whitespace()
|
||||
.map(|s| s.parse::<usize>().expect("failed to parse seed as number"))
|
||||
.tuples()
|
||||
.flat_map(|(start, length)| start..start + length)
|
||||
.take(3000)
|
||||
// Squeeze with rayon for brute force approach
|
||||
.par_bridge()
|
||||
.map(|source| almanac.map_source(source, "seed", "location"))
|
||||
.min()
|
||||
.ok_or("failed to get min location")?;
|
||||
let algo_time = start.elapsed();
|
||||
|
||||
// output
|
||||
println!("Day 5, part 2: {answer}");
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
// TODO come back and revise for a faster solution
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
let input = utils::aoc::get_puzzle_input(5).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "seeds: 79 14 55 13
|
||||
|
||||
seed-to-soil map:
|
||||
50 98 2
|
||||
52 50 48
|
||||
|
||||
soil-to-fertilizer map:
|
||||
0 15 37
|
||||
37 52 2
|
||||
39 0 15
|
||||
|
||||
fertilizer-to-water map:
|
||||
49 53 8
|
||||
0 11 42
|
||||
42 0 7
|
||||
57 7 4
|
||||
|
||||
water-to-light map:
|
||||
88 18 7
|
||||
18 25 70
|
||||
|
||||
light-to-temperature map:
|
||||
45 77 23
|
||||
81 45 19
|
||||
68 64 13
|
||||
|
||||
temperature-to-humidity map:
|
||||
0 69 1
|
||||
1 0 69
|
||||
|
||||
humidity-to-location map:
|
||||
60 56 37
|
||||
56 93 4
|
||||
";
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1(DATA.to_owned())?, 35);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2(DATA.to_owned())?, 46);
|
||||
Ok(())
|
||||
}
|
||||
}
|
109
2023/src/bin/day06.rs
Normal file
109
2023/src/bin/day06.rs
Normal file
|
@ -0,0 +1,109 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
|
||||
static DAY: u8 = 6;
|
||||
|
||||
#[derive(Debug, Builder, Clone)]
|
||||
struct Race {
|
||||
time: usize,
|
||||
record_distance: usize,
|
||||
}
|
||||
|
||||
impl Race {
|
||||
fn get_roots(&self) -> (usize, usize) {
|
||||
let a = -1.0;
|
||||
let b = self.time as f64;
|
||||
let c = -(self.record_distance as f64);
|
||||
let n1 = (-b + f64::sqrt(b * b - (4.0 * a * c))) / (2.0 * a);
|
||||
let n2 = (-b - f64::sqrt(b * b - (4.0 * a * c))) / (2.0 * a);
|
||||
if n1 < n2 {
|
||||
// floor and round up to ensure we win
|
||||
let n1 = f64::floor(n1) as usize + 1;
|
||||
|
||||
// ceil and round down to ensure we don't exceed time cap
|
||||
let n2 = f64::ceil(n2) as usize - 1;
|
||||
(n1, n2)
|
||||
} else {
|
||||
let n1 = f64::ceil(n1) as usize - 1;
|
||||
let n2 = f64::floor(n2) as usize + 1;
|
||||
(n2, n1)
|
||||
}
|
||||
}
|
||||
|
||||
fn get_ways_to_beat_count(&self) -> usize {
|
||||
let (n1, n2) = self.get_roots();
|
||||
if self.time < n1 {
|
||||
0
|
||||
} else {
|
||||
let n2 = usize::min(self.time, n2);
|
||||
n2 - n1 + 1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn get_ways_to_beat_in_all_races(races: &[Race]) -> Result<usize> {
|
||||
let mut answer = 1;
|
||||
for race in races {
|
||||
let ways_to_beat = race.get_ways_to_beat_count();
|
||||
answer *= ways_to_beat;
|
||||
}
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
// let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let races: [Race; 3] = [
|
||||
Race {
|
||||
time: 7,
|
||||
record_distance: 9,
|
||||
},
|
||||
Race {
|
||||
time: 15,
|
||||
record_distance: 40,
|
||||
},
|
||||
Race {
|
||||
time: 30,
|
||||
record_distance: 200,
|
||||
},
|
||||
];
|
||||
println!(
|
||||
"part 1, example: {}",
|
||||
get_ways_to_beat_in_all_races(&races)?
|
||||
);
|
||||
let races: [Race; 4] = [
|
||||
Race {
|
||||
time: 53,
|
||||
record_distance: 250,
|
||||
},
|
||||
Race {
|
||||
time: 91,
|
||||
record_distance: 1330,
|
||||
},
|
||||
Race {
|
||||
time: 67,
|
||||
record_distance: 1081,
|
||||
},
|
||||
Race {
|
||||
time: 68,
|
||||
record_distance: 1025,
|
||||
},
|
||||
];
|
||||
println!("part 1, real: {}", get_ways_to_beat_in_all_races(&races)?);
|
||||
let races: [Race; 1] = [Race {
|
||||
time: 71530,
|
||||
record_distance: 940200,
|
||||
}];
|
||||
println!(
|
||||
"part 2, example: {}",
|
||||
get_ways_to_beat_in_all_races(&races)?
|
||||
);
|
||||
let races: [Race; 1] = [Race {
|
||||
time: 53916768,
|
||||
record_distance: 250133010811025,
|
||||
}];
|
||||
println!("part 2, real: {}", get_ways_to_beat_in_all_races(&races)?);
|
||||
Ok(())
|
||||
}
|
207
2023/src/bin/day07.rs
Normal file
207
2023/src/bin/day07.rs
Normal file
|
@ -0,0 +1,207 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use std::{cmp::Ordering, str::FromStr, time::Instant};
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, PartialOrd, Ord)]
|
||||
enum Strength {
|
||||
HighCard,
|
||||
OnePair,
|
||||
TwoPair,
|
||||
ThreeOfAKind,
|
||||
FullHouse,
|
||||
FourOfAKind,
|
||||
FiveOfAKind,
|
||||
}
|
||||
|
||||
impl Strength {
|
||||
#[cfg(feature = "part2")]
|
||||
fn for_hand(hand: &Hand) -> Self {
|
||||
let mut counts = [0; 15];
|
||||
let mut jokers = 0;
|
||||
for card in hand.cards.iter() {
|
||||
if card == &1 {
|
||||
jokers += 1;
|
||||
} else {
|
||||
counts[*card as usize - 2] += 1;
|
||||
}
|
||||
}
|
||||
let mut strength = counts
|
||||
.iter()
|
||||
.fold(Strength::HighCard, |strength, &count| match count {
|
||||
5 => Strength::FiveOfAKind,
|
||||
4 => Strength::FourOfAKind,
|
||||
3 => match strength {
|
||||
Strength::TwoPair => Strength::FullHouse,
|
||||
Strength::OnePair => Strength::FullHouse,
|
||||
_ => Strength::ThreeOfAKind,
|
||||
},
|
||||
2 => match strength {
|
||||
Strength::ThreeOfAKind => Strength::FullHouse,
|
||||
Strength::OnePair => Strength::TwoPair,
|
||||
_ => Strength::OnePair,
|
||||
},
|
||||
_ => strength,
|
||||
});
|
||||
while jokers > 0 {
|
||||
strength = match strength {
|
||||
Strength::HighCard => Strength::OnePair,
|
||||
Strength::OnePair => Strength::ThreeOfAKind,
|
||||
Strength::TwoPair => Strength::FullHouse,
|
||||
Strength::ThreeOfAKind => Strength::FourOfAKind,
|
||||
Strength::FullHouse => Strength::FourOfAKind,
|
||||
Strength::FourOfAKind => Strength::FiveOfAKind,
|
||||
Strength::FiveOfAKind => Strength::FiveOfAKind,
|
||||
};
|
||||
jokers -= 1;
|
||||
}
|
||||
strength
|
||||
}
|
||||
|
||||
#[cfg(feature = "part1")]
|
||||
fn for_hand(hand: &Hand) -> Self {
|
||||
let mut counts = [0; 15];
|
||||
for card in hand.cards.iter() {
|
||||
counts[*card as usize - 2] += 1;
|
||||
}
|
||||
counts
|
||||
.iter()
|
||||
.fold(Strength::HighCard, |strength, &count| match count {
|
||||
5 => Strength::FiveOfAKind,
|
||||
4 => Strength::FourOfAKind,
|
||||
3 => match strength {
|
||||
Strength::TwoPair => Strength::FullHouse,
|
||||
Strength::OnePair => Strength::FullHouse,
|
||||
_ => Strength::ThreeOfAKind,
|
||||
},
|
||||
2 => match strength {
|
||||
Strength::ThreeOfAKind => Strength::FullHouse,
|
||||
Strength::OnePair => Strength::TwoPair,
|
||||
_ => Strength::OnePair,
|
||||
},
|
||||
_ => strength,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Builder, Clone, PartialEq, Eq)]
|
||||
struct Hand {
|
||||
cards: Vec<u32>,
|
||||
bid: usize,
|
||||
}
|
||||
|
||||
impl Ord for Hand {
|
||||
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
|
||||
let self_strength = Strength::for_hand(self);
|
||||
let other_strength = Strength::for_hand(other);
|
||||
match self_strength.cmp(&other_strength) {
|
||||
Ordering::Equal => self
|
||||
.cards
|
||||
.iter()
|
||||
.zip(other.cards.iter())
|
||||
.map(|(s, o)| s.cmp(o))
|
||||
.skip_while(|ord| matches!(ord, Ordering::Equal))
|
||||
.next()
|
||||
.unwrap_or(Ordering::Equal),
|
||||
Ordering::Less => Ordering::Less,
|
||||
Ordering::Greater => Ordering::Greater,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for Hand {
|
||||
fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
|
||||
Some(self.cmp(other))
|
||||
}
|
||||
}
|
||||
|
||||
impl FromStr for Hand {
|
||||
type Err = BoxE;
|
||||
|
||||
fn from_str(s: &str) -> std::result::Result<Self, Self::Err> {
|
||||
let mut splits = s.trim().split_whitespace();
|
||||
Ok(HandBuilder::default()
|
||||
.cards(
|
||||
splits
|
||||
.next()
|
||||
.unwrap()
|
||||
.chars()
|
||||
.map(|c| {
|
||||
if let Some(digit) = c.to_digit(10) {
|
||||
digit
|
||||
} else {
|
||||
match c {
|
||||
#[cfg(feature = "part1")]
|
||||
'A' => 14,
|
||||
#[cfg(feature = "part2")]
|
||||
'A' => 13,
|
||||
#[cfg(feature = "part1")]
|
||||
'K' => 13,
|
||||
#[cfg(feature = "part2")]
|
||||
'K' => 12,
|
||||
#[cfg(feature = "part1")]
|
||||
'Q' => 12,
|
||||
#[cfg(feature = "part2")]
|
||||
'Q' => 11,
|
||||
#[cfg(feature = "part1")]
|
||||
'J' => 11,
|
||||
#[cfg(feature = "part2")]
|
||||
'J' => 1,
|
||||
'T' => 10,
|
||||
_ => panic!("invalid card: {}", c),
|
||||
}
|
||||
}
|
||||
})
|
||||
.collect(),
|
||||
)
|
||||
.bid(splits.next().unwrap().parse()?)
|
||||
.build()?)
|
||||
}
|
||||
}
|
||||
|
||||
fn calculate(input: String) -> Result<usize> {
|
||||
let start = Instant::now();
|
||||
let answer = input
|
||||
.lines()
|
||||
.map(|line| line.parse::<Hand>().unwrap())
|
||||
.sorted()
|
||||
.enumerate()
|
||||
.map(|(idx, hand)| hand.bid * (idx + 1))
|
||||
.sum();
|
||||
let algo_time = start.elapsed();
|
||||
println!("Day {DAY}: {answer}");
|
||||
println!("\t{algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
// TODO come back and revise for a faster solution
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
calculate(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
static DAY: u8 = 7;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "32T3K 765
|
||||
T55J5 684
|
||||
KK677 28
|
||||
KTJJT 220
|
||||
QQQJA 483";
|
||||
|
||||
#[test]
|
||||
fn test() -> Result<()> {
|
||||
#[cfg(feature = "part1")]
|
||||
assert_eq!(calculate(DATA.to_owned())?, 6440);
|
||||
#[cfg(feature = "part2")]
|
||||
assert_eq!(calculate(DATA.to_owned())?, 5905);
|
||||
Ok(())
|
||||
}
|
||||
}
|
212
2023/src/bin/day08.rs
Normal file
212
2023/src/bin/day08.rs
Normal file
|
@ -0,0 +1,212 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{collections::HashMap, time::Instant};
|
||||
|
||||
extern crate regex;
|
||||
|
||||
use regex::Regex;
|
||||
use static_init::dynamic;
|
||||
|
||||
// Regex is slow to compile, don't do it in the parse loop, pull it out here and
|
||||
// compile it once and reuse below.
|
||||
#[dynamic]
|
||||
static RE_PARSE_NODE: Regex =
|
||||
Regex::new(r"(?<id>\w{3}).*?(?<left>\w{3}).*?(?<right>\w{3})").expect("re_parse_node invalid");
|
||||
|
||||
#[derive(Debug, Builder, Clone)]
|
||||
struct Node<'a> {
|
||||
id: &'a str,
|
||||
left: &'a str,
|
||||
right: &'a str,
|
||||
}
|
||||
|
||||
impl<'a> Node<'a> {
|
||||
fn new(s: &'a str) -> Result<Self> {
|
||||
let re = RE_PARSE_NODE.captures(s).expect("No match for regex");
|
||||
Ok(NodeBuilder::default()
|
||||
.id(re.name("id").expect("no id").as_str())
|
||||
.left(re.name("left").expect("no left").as_str())
|
||||
.right(re.name("right").expect("no right").as_str())
|
||||
.build()?)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum Dir {
|
||||
Left,
|
||||
Right,
|
||||
}
|
||||
|
||||
impl Dir {
|
||||
fn from_char(c: &char) -> Self {
|
||||
match c {
|
||||
'L' => Self::Left,
|
||||
'R' => Self::Right,
|
||||
_ => panic!("Not valid dir"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Builder, Clone)]
|
||||
struct Map<'a> {
|
||||
dirs: Vec<Dir>,
|
||||
nodes: HashMap<&'a str, Node<'a>>,
|
||||
}
|
||||
|
||||
impl<'a> Map<'a> {
|
||||
fn new(s: &'a str) -> Result<Self> {
|
||||
let mut splits = s.trim().split("\n\n");
|
||||
Ok(MapBuilder::default()
|
||||
.dirs(
|
||||
splits
|
||||
.next()
|
||||
.unwrap()
|
||||
.trim()
|
||||
.chars()
|
||||
.map(|c| Dir::from_char(&c))
|
||||
.collect(),
|
||||
)
|
||||
.nodes(
|
||||
splits
|
||||
.next()
|
||||
.unwrap()
|
||||
.trim()
|
||||
.lines()
|
||||
.map(|a| Node::new(a.trim()).map(|n| (n.id, n)))
|
||||
.try_collect()?,
|
||||
)
|
||||
.build()?)
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let map: Map = Map::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let start = Instant::now();
|
||||
let mut answer = 0;
|
||||
let mut current = map.nodes.get("AAA").expect("no start node");
|
||||
let mut dir = map.dirs.iter().cycle();
|
||||
while !current.id.eq("ZZZ") {
|
||||
match dir.next().unwrap() {
|
||||
Dir::Left => current = map.nodes.get(current.left).expect("no left node"),
|
||||
Dir::Right => current = map.nodes.get(current.right).expect("no right node"),
|
||||
}
|
||||
answer += 1;
|
||||
}
|
||||
let algo_time = start.elapsed();
|
||||
|
||||
// output
|
||||
println!("Day {DAY}, part 1: {answer}");
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<u64> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let map: Map = Map::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let start = Instant::now();
|
||||
let currents: Vec<&Node> = map.nodes.values().filter(|n| n.id.ends_with("A")).collect();
|
||||
let steps: Vec<u64> = currents
|
||||
.par_iter()
|
||||
.map(|node| {
|
||||
let mut dir = map.dirs.iter().cycle();
|
||||
let mut steps = 0;
|
||||
let mut current = *node;
|
||||
while !current.id.ends_with("Z") {
|
||||
match dir.next().unwrap() {
|
||||
Dir::Left => current = map.nodes.get(current.left).expect("no left node"),
|
||||
Dir::Right => current = map.nodes.get(current.right).expect("no right node"),
|
||||
}
|
||||
steps += 1;
|
||||
// println!("Step: {answer}"); let _ = std::io::stdout().flush();
|
||||
}
|
||||
steps
|
||||
})
|
||||
.collect();
|
||||
let answer = utils::math::find_lcm(&steps[..]);
|
||||
let algo_time = start.elapsed();
|
||||
|
||||
// output
|
||||
println!("Day {DAY}, part 2: {answer}");
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
// TODO come back and revise for a faster solution
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
static DAY: u8 = 8;
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1(
|
||||
"RL
|
||||
|
||||
AAA = (BBB, CCC)
|
||||
BBB = (DDD, EEE)
|
||||
CCC = (ZZZ, GGG)
|
||||
DDD = (DDD, DDD)
|
||||
EEE = (EEE, EEE)
|
||||
GGG = (GGG, GGG)
|
||||
ZZZ = (ZZZ, ZZZ)"
|
||||
.to_owned(),
|
||||
)?,
|
||||
2
|
||||
);
|
||||
assert_eq!(
|
||||
part1(
|
||||
"LLR
|
||||
|
||||
AAA = (BBB, BBB)
|
||||
BBB = (AAA, ZZZ)
|
||||
ZZZ = (ZZZ, ZZZ)"
|
||||
.to_owned()
|
||||
)?,
|
||||
6
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
part2(
|
||||
"LR
|
||||
|
||||
11A = (11B, XXX)
|
||||
11B = (XXX, 11Z)
|
||||
11Z = (11B, XXX)
|
||||
22A = (22B, XXX)
|
||||
22B = (22C, 22C)
|
||||
22C = (22Z, 22Z)
|
||||
22Z = (22B, 22B)
|
||||
XXX = (XXX, XXX)"
|
||||
.to_owned(),
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
131
2023/src/bin/day09.rs
Normal file
131
2023/src/bin/day09.rs
Normal file
|
@ -0,0 +1,131 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{arch::x86_64::_MM_FROUND_CUR_DIRECTION, str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 9;
|
||||
|
||||
fn part1(input: String) -> Result<i64> {
|
||||
let start = Instant::now();
|
||||
let answer: i64 = input
|
||||
.lines()
|
||||
.par_bridge()
|
||||
.map(|line| {
|
||||
let mut sequences: Vec<Vec<i64>> = vec![];
|
||||
line.trim()
|
||||
.split_whitespace()
|
||||
.map(|s| s.parse::<i64>().expect("Failed to parse number in input"))
|
||||
.enumerate()
|
||||
.for_each(|(idx, num)| {
|
||||
// every new number of primary history can result in a new row of depth
|
||||
sequences.push(vec![]);
|
||||
for depth in 0..sequences.len() {
|
||||
if depth == 0 {
|
||||
sequences
|
||||
.get_mut(depth)
|
||||
.expect("top history expected")
|
||||
.push(num);
|
||||
} else {
|
||||
let len = sequences[depth].len();
|
||||
let above = &sequences[depth - 1];
|
||||
let left = *above.get(len).expect("expected value left");
|
||||
let right = *above.get(len + 1).expect("expected value right");
|
||||
sequences
|
||||
.get_mut(depth)
|
||||
.expect("seq current depth expect")
|
||||
.push(right - left);
|
||||
}
|
||||
}
|
||||
});
|
||||
sequences
|
||||
.iter()
|
||||
.rev()
|
||||
.skip_while(|seq| seq.iter().all(|n| n == &0))
|
||||
.fold(0, |acc, seq| seq.last().expect("expected last value") + acc)
|
||||
})
|
||||
.sum();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
// algo
|
||||
fn part2(input: String) -> Result<i64> {
|
||||
let start = Instant::now();
|
||||
let answer: i64 = input
|
||||
.lines()
|
||||
.par_bridge()
|
||||
.map(|line| {
|
||||
let mut sequences: Vec<Vec<i64>> = vec![];
|
||||
line.trim()
|
||||
.split_whitespace()
|
||||
.map(|s| s.parse::<i64>().expect("Failed to parse number in input"))
|
||||
.enumerate()
|
||||
.for_each(|(idx, num)| {
|
||||
// every new number of primary history can result in a new row of depth
|
||||
sequences.push(vec![]);
|
||||
for depth in 0..sequences.len() {
|
||||
if depth == 0 {
|
||||
sequences
|
||||
.get_mut(depth)
|
||||
.expect("top history expected")
|
||||
.push(num);
|
||||
} else {
|
||||
let len = sequences[depth].len();
|
||||
let above = &sequences[depth - 1];
|
||||
let left = *above.get(len).expect("expected value left");
|
||||
let right = *above.get(len + 1).expect("expected value right");
|
||||
sequences
|
||||
.get_mut(depth)
|
||||
.expect("seq current depth expect")
|
||||
.push(right - left);
|
||||
}
|
||||
}
|
||||
});
|
||||
sequences
|
||||
.iter()
|
||||
.rev()
|
||||
.skip_while(|seq| seq.iter().all(|n| n == &0))
|
||||
.fold(0, |acc, seq| {
|
||||
seq.first().expect("expected last value") - acc
|
||||
})
|
||||
})
|
||||
.sum();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "0 3 6 9 12 15
|
||||
1 3 6 10 15 21
|
||||
10 13 16 21 30 45";
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1(DATA.to_owned())?, 114);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2(DATA.to_owned())?, 2);
|
||||
Ok(())
|
||||
}
|
||||
}
|
428
2023/src/bin/day10.rs
Normal file
428
2023/src/bin/day10.rs
Normal file
|
@ -0,0 +1,428 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{collections::HashSet, str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 10;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum PipeDirection {
|
||||
Vertical,
|
||||
Horizontal,
|
||||
NorthEast,
|
||||
NorthWest,
|
||||
SouthWest,
|
||||
SouthEast,
|
||||
Start,
|
||||
Ground,
|
||||
}
|
||||
|
||||
impl PipeDirection {
|
||||
fn is_north(&self) -> bool {
|
||||
matches!(self, PipeDirection::NorthEast | PipeDirection::NorthWest)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Pipe {
|
||||
position: (usize, usize),
|
||||
direction: PipeDirection,
|
||||
}
|
||||
|
||||
impl Eq for Pipe {}
|
||||
|
||||
impl PartialEq for Pipe {
|
||||
fn eq(&self, other: &Self) -> bool {
|
||||
self.position == other.position
|
||||
}
|
||||
}
|
||||
|
||||
impl Pipe {
|
||||
fn for_char(c: char, position: (usize, usize)) -> Self {
|
||||
match c {
|
||||
'|' => Self {
|
||||
position,
|
||||
direction: PipeDirection::Vertical,
|
||||
},
|
||||
'-' => Self {
|
||||
position,
|
||||
direction: PipeDirection::Horizontal,
|
||||
},
|
||||
'L' => Self {
|
||||
position,
|
||||
direction: PipeDirection::NorthEast,
|
||||
},
|
||||
'J' => Self {
|
||||
position,
|
||||
direction: PipeDirection::NorthWest,
|
||||
},
|
||||
'7' => Self {
|
||||
position,
|
||||
direction: PipeDirection::SouthWest,
|
||||
},
|
||||
'F' => Self {
|
||||
position,
|
||||
direction: PipeDirection::SouthEast,
|
||||
},
|
||||
'.' => Self {
|
||||
position,
|
||||
direction: PipeDirection::Ground,
|
||||
},
|
||||
'S' => Self {
|
||||
position,
|
||||
direction: PipeDirection::Start,
|
||||
},
|
||||
_ => panic!("invalid pipe char"),
|
||||
}
|
||||
}
|
||||
|
||||
fn connects_to(&self) -> Vec<(usize, usize)> {
|
||||
let deltas = match self.direction {
|
||||
PipeDirection::Vertical => Some([(-1i64, 0i64), (1, 0)]),
|
||||
PipeDirection::Horizontal => Some([(0, -1), (0, 1)]),
|
||||
PipeDirection::NorthEast => Some([(-1, 0), (0, 1)]),
|
||||
PipeDirection::NorthWest => Some([(-1, 0), (0, -1)]),
|
||||
PipeDirection::SouthWest => Some([(1, 0), (0, -1)]),
|
||||
PipeDirection::SouthEast => Some([(1, 0), (0, 1)]),
|
||||
_ => None,
|
||||
};
|
||||
match deltas {
|
||||
Some(deltas) => {
|
||||
let mut to = vec![];
|
||||
for delta in deltas {
|
||||
let (row_delta, col_delta) = delta;
|
||||
let (row, col) = self.position;
|
||||
if row == 0 && row_delta < 0 {
|
||||
continue;
|
||||
}
|
||||
if col == 0 && col_delta < 0 {
|
||||
continue;
|
||||
}
|
||||
to.push((
|
||||
(row as i64 + row_delta).try_into().unwrap(),
|
||||
(col as i64 + col_delta).try_into().unwrap(),
|
||||
));
|
||||
}
|
||||
to
|
||||
}
|
||||
None => vec![],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Pipes {
|
||||
grid: Vec<Vec<Pipe>>,
|
||||
start: Pipe,
|
||||
}
|
||||
|
||||
impl Pipes {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
let mut start = None;
|
||||
let mut grid = vec![];
|
||||
for (row_index, line) in s.trim().lines().enumerate() {
|
||||
let mut row = vec![];
|
||||
for (col_index, char) in line.trim().chars().enumerate() {
|
||||
row.push(Pipe::for_char(char, (row_index, col_index)));
|
||||
if char == 'S' {
|
||||
start = Some((row_index, col_index))
|
||||
}
|
||||
}
|
||||
grid.push(row);
|
||||
}
|
||||
|
||||
// Get actual start pipe variant for easier code on the rest of the walking code
|
||||
// later
|
||||
let start = start
|
||||
.map(|position| {
|
||||
let mut up = true;
|
||||
let mut left = true;
|
||||
|
||||
// We assume start always has two connections by definition of the problem. Will
|
||||
// assume it is up and left and swap to the opposite after checking those.
|
||||
let (row, col) = position;
|
||||
if let Some(down) = grid.get(row + 1) {
|
||||
match down[col].direction {
|
||||
PipeDirection::Vertical
|
||||
| PipeDirection::NorthEast
|
||||
| PipeDirection::NorthWest => {
|
||||
up = false;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
if let Some(right) = grid[row].get(col + 1) {
|
||||
match right.direction {
|
||||
PipeDirection::Horizontal
|
||||
| PipeDirection::NorthWest
|
||||
| PipeDirection::SouthWest => {
|
||||
left = false;
|
||||
}
|
||||
_ => {}
|
||||
}
|
||||
}
|
||||
if up && left {
|
||||
Pipe {
|
||||
position,
|
||||
direction: PipeDirection::NorthWest,
|
||||
}
|
||||
} else if up && !left {
|
||||
Pipe {
|
||||
position,
|
||||
direction: PipeDirection::NorthEast,
|
||||
}
|
||||
} else if !up && left {
|
||||
Pipe {
|
||||
position,
|
||||
direction: PipeDirection::SouthWest,
|
||||
}
|
||||
} else {
|
||||
Pipe {
|
||||
position,
|
||||
direction: PipeDirection::SouthEast,
|
||||
}
|
||||
}
|
||||
})
|
||||
.expect("start");
|
||||
Ok(Self { grid, start })
|
||||
}
|
||||
|
||||
fn get(&self, position: &(usize, usize)) -> &Pipe {
|
||||
&self.grid[position.0][position.1]
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let pipes = Pipes::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut answer = 1;
|
||||
let mut starters = pipes.start.connects_to().into_iter();
|
||||
let mut paths: [(&Pipe, &Pipe); 2] = [
|
||||
(&pipes.start, pipes.get(&starters.next().unwrap())),
|
||||
(&pipes.start, pipes.get(&starters.next().unwrap())),
|
||||
];
|
||||
loop {
|
||||
// reached end
|
||||
if paths[0].1.position.0 == paths[1].1.position.0
|
||||
&& paths[0].1.position.1 == paths[1].1.position.1
|
||||
{
|
||||
break;
|
||||
}
|
||||
answer += 1;
|
||||
for path in paths.iter_mut() {
|
||||
let next = path
|
||||
.1
|
||||
.connects_to()
|
||||
.into_iter()
|
||||
.filter(|pipe| pipe.0 != path.0.position.0 || pipe.1 != path.0.position.1)
|
||||
.next()
|
||||
.map(|pos| pipes.get(&pos))
|
||||
.unwrap();
|
||||
*path = (path.1, next);
|
||||
}
|
||||
}
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let pipes = Pipes::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut path = vec![
|
||||
&pipes.start,
|
||||
pipes
|
||||
.start
|
||||
.connects_to()
|
||||
.into_iter()
|
||||
.next()
|
||||
.map(|pos| pipes.get(&pos))
|
||||
.unwrap(),
|
||||
];
|
||||
loop {
|
||||
let previous = path.get(path.len() - 2).unwrap();
|
||||
let next = path
|
||||
.last()
|
||||
.unwrap()
|
||||
.connects_to()
|
||||
.into_iter()
|
||||
.filter(|pipe| pipe.0 != previous.position.0 || pipe.1 != previous.position.1)
|
||||
.next()
|
||||
.map(|pos| pipes.get(&pos))
|
||||
.unwrap();
|
||||
match next.direction {
|
||||
PipeDirection::Start => {
|
||||
break;
|
||||
}
|
||||
_ => {
|
||||
path.push(next);
|
||||
}
|
||||
};
|
||||
}
|
||||
let mut answer = 0;
|
||||
for (ri, row) in pipes.grid.iter().enumerate() {
|
||||
for (idx, pipe) in row.iter().enumerate() {
|
||||
if !path.contains(&pipe) {
|
||||
// println!("Pipe check, {}, {}", ri, idx);
|
||||
let (intersections, _) = row
|
||||
.iter()
|
||||
// Start at current non path pipe we are checking
|
||||
.skip(idx + 1)
|
||||
// Add fake pipe at the end so we can match on pipes on the right edge of the Grid
|
||||
// .chain(std::iter::once(&Pipe { position: (0, 0), direction:
|
||||
// PipeDirection::Ground, }))
|
||||
.fold(
|
||||
(0, None),
|
||||
|(i_count, intersecting_dir): (usize, Option<&PipeDirection>), pipe| {
|
||||
if path.contains(&pipe) {
|
||||
return match pipe.direction {
|
||||
PipeDirection::Vertical => (i_count + 1, None),
|
||||
PipeDirection::NorthWest
|
||||
| PipeDirection::NorthEast
|
||||
| PipeDirection::SouthEast
|
||||
| PipeDirection::SouthWest => match intersecting_dir {
|
||||
Some(last_direction) => {
|
||||
match (
|
||||
last_direction.is_north(),
|
||||
pipe.direction.is_north(),
|
||||
) {
|
||||
(true, true) | (false, false) => (i_count, None),
|
||||
(true, false) | (false, true) => {
|
||||
(i_count + 1, None)
|
||||
}
|
||||
}
|
||||
}
|
||||
None => (i_count, Some(&pipe.direction)),
|
||||
},
|
||||
PipeDirection::Horizontal => (i_count, intersecting_dir),
|
||||
_ => (i_count, None),
|
||||
};
|
||||
}
|
||||
return (i_count, None);
|
||||
},
|
||||
);
|
||||
|
||||
// println!( "\t\tPipe check, {}, {} intersections: {} | {}", ri, idx,
|
||||
// intersections, (intersections > 0 && intersections % 2 == 1) );
|
||||
if intersections > 0 && intersections % 2 == 1 {
|
||||
answer += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1(
|
||||
"..F7.
|
||||
.FJ|.
|
||||
SJ.L7
|
||||
|F--J
|
||||
LJ..."
|
||||
.to_owned()
|
||||
)?,
|
||||
8
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2_small() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
"...........
|
||||
.S-------7.
|
||||
.|F-----7|.
|
||||
.||.....||.
|
||||
.||.....||.
|
||||
.|L-7.F-J|.
|
||||
.|..|.|..|.
|
||||
.L--J.L--J.
|
||||
..........."
|
||||
.to_owned(),
|
||||
)?,
|
||||
4
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2_med() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
".F----7F7F7F7F-7....
|
||||
.|F--7||||||||FJ....
|
||||
.||.FJ||||||||L7....
|
||||
FJL7L7LJLJ||LJ.L-7..
|
||||
L--J.L7...LJS7F-7L7.
|
||||
....F-J..F7FJ|L7L7L7
|
||||
....L7.F7||L7|.L7L7|
|
||||
.....|FJLJ|FJ|F7|.LJ
|
||||
....FJL-7.||.||||...
|
||||
....L---J.LJ.LJLJ..."
|
||||
.to_owned(),
|
||||
)?,
|
||||
8
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2_hard() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
"FF7FSF7F7F7F7F7F---7
|
||||
L|LJ||||||||||||F--J
|
||||
FL-7LJLJ||||||LJL-77
|
||||
F--JF--7||LJLJ7F7FJ-
|
||||
L---JF-JLJ.||-FJLJJ7
|
||||
|F|F-JF---7F7-L7L|7|
|
||||
|FFJF7L7F-JF7|JL---7
|
||||
7-L-JL7||F7|L7F-7F7|
|
||||
L.L7LFJ|||||FJL7||LJ
|
||||
L7JLJL-JLJLJL--JLJ.L"
|
||||
.to_owned(),
|
||||
)?,
|
||||
10
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
173
2023/src/bin/day11.rs
Normal file
173
2023/src/bin/day11.rs
Normal file
|
@ -0,0 +1,173 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 11;
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||
struct Vec2D {
|
||||
x: usize,
|
||||
y: usize,
|
||||
}
|
||||
|
||||
impl From<(usize, usize)> for Vec2D {
|
||||
fn from(value: (usize, usize)) -> Self {
|
||||
Self {
|
||||
x: value.0,
|
||||
y: value.1,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Space {
|
||||
galaxies: Vec<Vec2D>,
|
||||
x_max: usize,
|
||||
y_max: usize,
|
||||
}
|
||||
|
||||
impl Space {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
let mut x_max = 0;
|
||||
let mut y_max = 0;
|
||||
let mut galaxies = vec![];
|
||||
for (y, row) in s.trim().lines().enumerate() {
|
||||
for (x, col) in row.chars().enumerate() {
|
||||
if col == '#' {
|
||||
galaxies.push((x, y).into());
|
||||
}
|
||||
x_max = x;
|
||||
}
|
||||
y_max = y;
|
||||
}
|
||||
Ok(Space {
|
||||
galaxies,
|
||||
x_max,
|
||||
y_max,
|
||||
})
|
||||
}
|
||||
|
||||
fn expand(&mut self, by: usize) {
|
||||
for y in (0..=self.y_max).rev() {
|
||||
if self.galaxies.iter().filter(|g| g.y == y).count() == 0 {
|
||||
self.galaxies
|
||||
.iter_mut()
|
||||
.filter(|g| g.y > y)
|
||||
.for_each(|g| g.y += by);
|
||||
}
|
||||
}
|
||||
for x in (0..=self.x_max).rev() {
|
||||
if self.galaxies.iter().filter(|g| g.x == x).count() == 0 {
|
||||
self.galaxies
|
||||
.iter_mut()
|
||||
.filter(|g| g.x > x)
|
||||
.for_each(|g| g.x += by);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn galaxy_pairs(&self) -> Vec<(&Vec2D, &Vec2D)> {
|
||||
let mut galaxy_pairs = vec![];
|
||||
for i in 0..self.galaxies.len() {
|
||||
for i2 in i + 1..self.galaxies.len() {
|
||||
galaxy_pairs.push((&self.galaxies[i], &self.galaxies[i2]));
|
||||
}
|
||||
}
|
||||
galaxy_pairs
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let mut space = Space::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
let step_start = Instant::now();
|
||||
space.expand(1);
|
||||
let expansion_time = step_start.elapsed();
|
||||
|
||||
// algo
|
||||
let step_start = Instant::now();
|
||||
let mut answer = 0;
|
||||
for pair in space.galaxy_pairs() {
|
||||
let distance = pair.0.y.abs_diff(pair.1.y) + pair.0.x.abs_diff(pair.1.x);
|
||||
answer += distance;
|
||||
}
|
||||
let algo_time = step_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\texpansion: {expansion_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let mut space = Space::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
let step_start = Instant::now();
|
||||
space.expand(1000000 - 1);
|
||||
let expansion_time = step_start.elapsed();
|
||||
|
||||
// algo
|
||||
let step_start = Instant::now();
|
||||
let mut answer = 0;
|
||||
for pair in space.galaxy_pairs() {
|
||||
let distance = pair.0.y.abs_diff(pair.1.y) + pair.0.x.abs_diff(pair.1.x);
|
||||
answer += distance;
|
||||
}
|
||||
let algo_time = step_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\texpansion: {expansion_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
";
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1(DATA.to_owned())?, 374);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
// Must set the space.expand(1000000 - 1); to (100 - 1) instead for this test
|
||||
#[ignore]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2(DATA.to_owned())?, 8410);
|
||||
Ok(())
|
||||
}
|
||||
}
|
164
2023/src/bin/day12.rs
Normal file
164
2023/src/bin/day12.rs
Normal file
|
@ -0,0 +1,164 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{collections::HashMap, str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 12;
|
||||
|
||||
fn count_possibilities(
|
||||
layout: &str,
|
||||
contiguous: &[usize],
|
||||
cache: &mut HashMap<(String, Vec<usize>), usize>,
|
||||
) -> usize {
|
||||
if layout.chars().count() == 0 {
|
||||
return if contiguous.len() == 0 {
|
||||
// println!("\tLine is variant: {layout}");
|
||||
1
|
||||
} else {
|
||||
0
|
||||
};
|
||||
}
|
||||
let cache_key = (layout.to_owned(), contiguous.to_vec());
|
||||
if let Some(&result) = cache.get(&cache_key) {
|
||||
return result;
|
||||
}
|
||||
|
||||
// Remove leading dots
|
||||
let result = if layout.starts_with('.') {
|
||||
count_possibilities(layout.to_owned().trim_matches('.'), contiguous, cache)
|
||||
// Try both options for ?
|
||||
} else if layout.starts_with('?') {
|
||||
count_possibilities(&layout.to_owned().replacen('?', &".", 1), contiguous, cache)
|
||||
+ count_possibilities(&layout.to_owned().replacen('?', &"#", 1), contiguous, cache)
|
||||
// If group, check if it matches
|
||||
} else if layout.starts_with("#") {
|
||||
// no groups left to match || not enough # to make the group || not all of this
|
||||
// group are #
|
||||
if contiguous.len() == 0
|
||||
|| layout.chars().count() < contiguous[0]
|
||||
|| layout.chars().take(contiguous[0]).any(|c| c == '.')
|
||||
{
|
||||
0
|
||||
} else if contiguous.len() > 1 {
|
||||
if layout.len() < contiguous[0] + 1
|
||||
|| layout.chars().skip(contiguous[0]).next().unwrap() == '#'
|
||||
{
|
||||
0
|
||||
} else {
|
||||
count_possibilities(
|
||||
&layout.chars().skip(contiguous[0] + 1).collect::<String>(),
|
||||
&contiguous[1..],
|
||||
cache,
|
||||
)
|
||||
}
|
||||
} else {
|
||||
count_possibilities(
|
||||
&layout.chars().skip(contiguous[0]).collect::<String>(),
|
||||
&contiguous[1..],
|
||||
cache,
|
||||
)
|
||||
}
|
||||
} else {
|
||||
panic!("Should not get here.")
|
||||
};
|
||||
cache.insert(cache_key, result);
|
||||
result
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let answer = input
|
||||
.trim()
|
||||
.lines()
|
||||
.enumerate()
|
||||
.par_bridge()
|
||||
.map(|(idx, line)| {
|
||||
let mut split = line.trim().split_whitespace();
|
||||
let layout = split.next().unwrap();
|
||||
let contiguous = split
|
||||
.next()
|
||||
.unwrap()
|
||||
.split(',')
|
||||
.map(|s| s.parse::<usize>().unwrap())
|
||||
.collect_vec();
|
||||
let count = count_possibilities(&layout, &contiguous, &mut HashMap::new());
|
||||
|
||||
// println!("Line {idx}: {line} = {count}");
|
||||
count
|
||||
})
|
||||
.sum();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let answer = input
|
||||
.trim()
|
||||
.lines()
|
||||
.enumerate()
|
||||
.par_bridge()
|
||||
.map(|(idx, line)| {
|
||||
let mut split = line.trim().split_whitespace();
|
||||
let layout = split.next().unwrap();
|
||||
let contiguous = split
|
||||
.next()
|
||||
.unwrap()
|
||||
.split(',')
|
||||
.map(|s| s.parse::<usize>().unwrap())
|
||||
.collect_vec();
|
||||
let layout = std::iter::repeat(layout).take(5).join("?");
|
||||
let contiguous = std::iter::repeat(contiguous)
|
||||
.take(5)
|
||||
.flatten()
|
||||
.collect_vec();
|
||||
let count = count_possibilities(&layout, &contiguous, &mut HashMap::new());
|
||||
|
||||
// println!("Line {idx}: {line} = {count}");
|
||||
count
|
||||
})
|
||||
.sum();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "???.### 1,1,3
|
||||
.??..??...?##. 1,1,3
|
||||
?#?#?#?#?#?#?#? 1,3,1,6
|
||||
????.#...#... 4,1,1
|
||||
????.######..#####. 1,6,5
|
||||
?###???????? 3,2,1";
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1(DATA.to_owned())?, 21);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2(DATA.to_owned())?, 525152);
|
||||
Ok(())
|
||||
}
|
||||
}
|
249
2023/src/bin/day13.rs
Normal file
249
2023/src/bin/day13.rs
Normal file
|
@ -0,0 +1,249 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{fmt::Debug, str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 13;
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Grid {
|
||||
cells: Vec<Vec<bool>>,
|
||||
}
|
||||
|
||||
impl Debug for Grid {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
for row in &self.cells {
|
||||
f.write_str("\t");
|
||||
for b in row {
|
||||
f.write_str(if *b { "#" } else { "." });
|
||||
}
|
||||
f.write_str("\n");
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
type Split<'a> = (&'a [Vec<bool>], &'a [Vec<bool>]);
|
||||
|
||||
impl Grid {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
Ok(Self {
|
||||
cells: s
|
||||
.trim()
|
||||
.lines()
|
||||
.map(|l| l.chars().map(|c| c == '#').collect_vec())
|
||||
.collect(),
|
||||
})
|
||||
}
|
||||
|
||||
fn all_vertical_splits(&self) -> Vec<Split> {
|
||||
let mut splits = vec![];
|
||||
for i in 1..self.cells.len() {
|
||||
splits.push(self.vertical_split(i));
|
||||
}
|
||||
splits
|
||||
}
|
||||
|
||||
fn vertical_split(&self, index: usize) -> Split {
|
||||
(&self.cells[0..index], &self.cells[index..])
|
||||
}
|
||||
|
||||
fn is_vertical_mirror(top: &[Vec<bool>], bot: &[Vec<bool>]) -> bool {
|
||||
let tl = top.len();
|
||||
let bl = bot.len();
|
||||
for i in 0..usize::min(tl, bl) {
|
||||
let t = &top[tl - 1 - i];
|
||||
let b = &bot[i];
|
||||
|
||||
// println!("\tChecking {i}: {t:?} <=> {b:?} || {}", t == b);
|
||||
if t != b {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
true
|
||||
}
|
||||
|
||||
fn is_vertical_mirror_with_smudge(top: &[Vec<bool>], bot: &[Vec<bool>]) -> bool {
|
||||
let tl = top.len();
|
||||
let bl = bot.len();
|
||||
let mut claimed_smudge = false;
|
||||
for i in 0..usize::min(tl, bl) {
|
||||
let t = &top[tl - 1 - i];
|
||||
let b = &bot[i];
|
||||
|
||||
// println!( "\tChecking {i}: {t:?} <=> {b:?} || {} || {}", t == b, claimed_smudge
|
||||
// );
|
||||
if t != b {
|
||||
if !claimed_smudge && t.iter().zip(b.iter()).filter(|(z, x)| z != x).count() == 1 {
|
||||
claimed_smudge = true
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// FFS I had `true` here but all mirrors have EXACTLY ONE smudge, not at most
|
||||
// one...
|
||||
claimed_smudge
|
||||
}
|
||||
|
||||
fn clone_and_rotate(&self) -> Self {
|
||||
Self {
|
||||
cells: (0..self.cells[0].len())
|
||||
.map(|i| self.cells.iter().map(|row| row[i]).collect())
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let grids = input
|
||||
.split("\n\n")
|
||||
.map(|g| Grid::new(g).unwrap())
|
||||
.collect_vec();
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer: usize = grids
|
||||
.iter()
|
||||
.map(|grid| {
|
||||
let mut vertical_mirror_at = None;
|
||||
for (idx, (top, bot)) in grid.all_vertical_splits().iter().enumerate() {
|
||||
if Grid::is_vertical_mirror(top, bot) {
|
||||
vertical_mirror_at = Some(idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
let mut horizontal_mirror_at = None;
|
||||
if vertical_mirror_at.is_none() {
|
||||
let rotated = grid.clone_and_rotate();
|
||||
for (idx, (top, bot)) in rotated.all_vertical_splits().iter().enumerate() {
|
||||
if Grid::is_vertical_mirror(top, bot) {
|
||||
horizontal_mirror_at = Some(idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// index + 1 = number of rows to the left or above the mirror index
|
||||
let value = horizontal_mirror_at
|
||||
.map(|h| h + 1)
|
||||
.or(vertical_mirror_at.map(|v| (v + 1) * 100))
|
||||
.unwrap_or(0);
|
||||
|
||||
// println!( "Grid: vertical mirror at: {vertical_mirror_at:?}\thorizontal at:
|
||||
// {horizontal_mirror_at:?} == {value}" );
|
||||
value
|
||||
})
|
||||
.sum();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let grids = input
|
||||
.split("\n\n")
|
||||
.map(|g| Grid::new(g).unwrap())
|
||||
.collect_vec();
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer: usize = grids
|
||||
.iter()
|
||||
.map(|grid| {
|
||||
// println!("GRID: {grid:?}");
|
||||
let mut vertical_mirror_at = None;
|
||||
for (idx, (top, bot)) in grid.all_vertical_splits().iter().enumerate() {
|
||||
if Grid::is_vertical_mirror_with_smudge(top, bot) {
|
||||
// println!("GOT VERT: {idx}");
|
||||
vertical_mirror_at = Some(idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
let mut horizontal_mirror_at = None;
|
||||
if vertical_mirror_at.is_none() {
|
||||
let rotated = grid.clone_and_rotate();
|
||||
|
||||
// println!("ROTATED: {grid:?}");
|
||||
for (idx, (top, bot)) in rotated.all_vertical_splits().iter().enumerate() {
|
||||
if Grid::is_vertical_mirror_with_smudge(top, bot) {
|
||||
horizontal_mirror_at = Some(idx);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// index + 1 = number of rows to the left or above the mirror index
|
||||
let value = horizontal_mirror_at
|
||||
.map(|h| h + 1)
|
||||
.or(vertical_mirror_at.map(|v| (v + 1) * 100))
|
||||
.unwrap_or(0);
|
||||
|
||||
// println!( "Grid: vertical mirror at: {vertical_mirror_at:?}\thorizontal at:
|
||||
// {horizontal_mirror_at:?} == {value}" );
|
||||
value
|
||||
})
|
||||
.sum();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer} == 31836\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "#.##..##.
|
||||
..#.##.#.
|
||||
##......#
|
||||
##......#
|
||||
..#.##.#.
|
||||
..##..##.
|
||||
#.#.##.#.
|
||||
|
||||
#...##..#
|
||||
#....#..#
|
||||
..##..###
|
||||
#####.##.
|
||||
#####.##.
|
||||
..##..###
|
||||
#....#..#";
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1(DATA.to_owned())?, 405);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2(DATA.to_owned())?, 400);
|
||||
Ok(())
|
||||
}
|
||||
}
|
234
2023/src/bin/day14.rs
Normal file
234
2023/src/bin/day14.rs
Normal file
|
@ -0,0 +1,234 @@
|
|||
use aoc23::prelude::*;
|
||||
use grid::Grid;
|
||||
use itertools::Itertools;
|
||||
use std::{collections::HashMap, fmt::Display, time::Instant};
|
||||
|
||||
static DAY: u8 = 14;
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
enum Rock {
|
||||
Round,
|
||||
Square,
|
||||
None,
|
||||
}
|
||||
|
||||
impl Rock {
|
||||
fn from_char(char: char) -> Self {
|
||||
match char {
|
||||
'O' => Rock::Round,
|
||||
'#' => Rock::Square,
|
||||
'.' => Rock::None,
|
||||
_ => panic!("unknown rock type"),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq)]
|
||||
struct Dish {
|
||||
grid: Grid<Rock>,
|
||||
}
|
||||
|
||||
impl std::hash::Hash for Dish {
|
||||
fn hash<H: std::hash::Hasher>(&self, state: &mut H) {
|
||||
for r in self.grid.iter() {
|
||||
r.hash(state);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Dish {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
let mut grid: Option<Grid<Rock>> = None;
|
||||
for line in s.trim().lines() {
|
||||
let rocks = line.chars().map(Rock::from_char).collect_vec();
|
||||
let len = rocks.len();
|
||||
match grid {
|
||||
Some(ref mut grid) => {
|
||||
grid.push_row(rocks);
|
||||
}
|
||||
None => {
|
||||
grid = Some(Grid::from_vec(rocks, len));
|
||||
}
|
||||
}
|
||||
}
|
||||
let grid = grid.unwrap();
|
||||
Ok(Dish { grid })
|
||||
}
|
||||
|
||||
fn tilt_north(mut self) -> Self {
|
||||
for col_idx in 0..self.grid.cols() {
|
||||
let column = self.grid.iter_col(col_idx);
|
||||
let column_length = column.len();
|
||||
|
||||
// start,end,round_count ranges for rolling zones
|
||||
let mut rolling_ranges: Vec<(usize, usize, usize)> = vec![];
|
||||
let mut in_range: Option<(usize, usize)> = None;
|
||||
for (row_idx, rock) in column
|
||||
.enumerate()
|
||||
// Add one at the end so we close out our range, it should be square so it is
|
||||
// treated as a wall
|
||||
.chain(std::iter::once((column_length, &Rock::Square)))
|
||||
{
|
||||
if let Rock::Square = rock {
|
||||
if let Some((start, round_count)) = in_range {
|
||||
// rolling range it only including round or none, not this wall.
|
||||
rolling_ranges.push((start, row_idx - 1, round_count));
|
||||
in_range = None;
|
||||
}
|
||||
} else {
|
||||
let is_round = matches!(rock, Rock::Round);
|
||||
if let Some((_, ref mut round_count)) = in_range {
|
||||
if is_round {
|
||||
*round_count += 1;
|
||||
}
|
||||
} else {
|
||||
in_range = Some((row_idx, if is_round { 1 } else { 0 }));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Go through ranges and set them to tilt north.
|
||||
rolling_ranges.iter().for_each(|(start, end, round_count)| {
|
||||
let mut round_remaining = *round_count;
|
||||
for i in *start..=*end {
|
||||
if let Some(rock) = self.grid.get_mut(i, col_idx) {
|
||||
if round_remaining > 0 {
|
||||
*rock = Rock::Round;
|
||||
round_remaining -= 1;
|
||||
} else {
|
||||
*rock = Rock::None;
|
||||
}
|
||||
} else {
|
||||
panic!("no rock");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
self
|
||||
}
|
||||
|
||||
fn calculate_north_load(&self) -> usize {
|
||||
let len = self.grid.rows();
|
||||
self.grid
|
||||
.iter_rows()
|
||||
.enumerate()
|
||||
.map(|(row_idx, row)| {
|
||||
let multiplier = len - row_idx;
|
||||
multiplier * row.filter(|rock| matches!(rock, Rock::Round)).count()
|
||||
})
|
||||
.sum()
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Dish {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
for row in self.grid.iter_rows() {
|
||||
for rock in row {
|
||||
match rock {
|
||||
Rock::Round => f.write_str("O"),
|
||||
Rock::Square => f.write_str("#"),
|
||||
Rock::None => f.write_str("."),
|
||||
}?;
|
||||
}
|
||||
f.write_str("\n")?;
|
||||
}
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let mut dish = Dish::new(&input)?;
|
||||
dish = dish.tilt_north();
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer = dish.calculate_north_load();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let mut dish = Dish::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let cycles = 1000000000;
|
||||
let mut seen = HashMap::new();
|
||||
let mut scores = vec![];
|
||||
let mut answer = 0;
|
||||
for i in 0..cycles {
|
||||
for _ in 0..4 {
|
||||
dish = dish.tilt_north();
|
||||
dish.grid.rotate_right();
|
||||
}
|
||||
scores.push(dish.calculate_north_load());
|
||||
if let Some(repeated_index) = seen.get(&dish) {
|
||||
// Figure out final score based on sliding window of known scores within the
|
||||
// repeated pattern:
|
||||
//
|
||||
// (cycles - repeated index) gives us the remaining times we need to run through.
|
||||
// We then get the remainder of that divided by the difference of the current
|
||||
// index minus all seen (total repeating count).
|
||||
answer = scores
|
||||
[repeated_index - 1 + (cycles - repeated_index) % (seen.len() - repeated_index)];
|
||||
break;
|
||||
}
|
||||
seen.insert(dish.clone(), i);
|
||||
}
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
static DATA: &'static str = "O....#....
|
||||
O.OO#....#
|
||||
.....##...
|
||||
OO.#O....O
|
||||
.O.....O#.
|
||||
O.#..O.#.#
|
||||
..O..#O..O
|
||||
.......O..
|
||||
#....###..
|
||||
#OO..#....";
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1(DATA.to_owned())?, 136);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2(DATA.to_owned())?, 64);
|
||||
Ok(())
|
||||
}
|
||||
}
|
190
2023/src/bin/day15.rs
Normal file
190
2023/src/bin/day15.rs
Normal file
|
@ -0,0 +1,190 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 15;
|
||||
|
||||
#[derive(Debug, Clone, Default, Eq, PartialEq)]
|
||||
struct Seq {
|
||||
chars: Vec<char>,
|
||||
}
|
||||
|
||||
impl Seq {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
Ok(Self {
|
||||
chars: s.trim().chars().filter(|c| !c.is_whitespace()).collect(),
|
||||
})
|
||||
}
|
||||
|
||||
fn hash(&self) -> usize {
|
||||
self.chars.iter().fold(0, |acc, char| {
|
||||
let mut value = acc;
|
||||
value += *char as usize;
|
||||
value *= 17;
|
||||
value = value % 256;
|
||||
value
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum Operation {
|
||||
Remove,
|
||||
// focal length
|
||||
Insert(usize),
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct LensOp {
|
||||
label: Seq,
|
||||
box_index: usize,
|
||||
operation: Operation,
|
||||
}
|
||||
|
||||
impl LensOp {
|
||||
fn new(value: &Seq) -> Self {
|
||||
let label = Seq {
|
||||
chars: value
|
||||
.chars
|
||||
.iter()
|
||||
.take_while(|c| c != &&'=' && c != &&'-')
|
||||
.map(|c| *c)
|
||||
.collect(),
|
||||
};
|
||||
let box_index = label.hash();
|
||||
let mut op = value.chars.iter().skip(label.chars.len());
|
||||
Self {
|
||||
label,
|
||||
box_index,
|
||||
operation: match op.next().unwrap() {
|
||||
'-' => Operation::Remove,
|
||||
'=' => Operation::Insert(op.next().unwrap().to_digit(10).unwrap() as usize),
|
||||
o => panic!("Unknown op {o}"),
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
struct LensBox {
|
||||
lenses: Vec<LensOp>,
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let sequences: Vec<Seq> = input.split(',').map(|seq| Seq::new(seq)).try_collect()?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer = sequences.par_iter().map(Seq::hash).sum();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let lens_ops: Vec<LensOp> = input
|
||||
.split(',')
|
||||
.map(|seq| Seq::new(seq).unwrap())
|
||||
.map(|s| LensOp::new(&s))
|
||||
.collect();
|
||||
let mut lens_boxes: Vec<LensBox> = std::iter::repeat_with(|| LensBox::default())
|
||||
.take(256)
|
||||
.collect();
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
for lens_op in lens_ops {
|
||||
if let Some(lens_box) = lens_boxes.get_mut(lens_op.box_index) {
|
||||
match lens_op.operation {
|
||||
Operation::Remove => lens_box.lenses.retain(|lop| lop.label != lens_op.label),
|
||||
Operation::Insert(_) => {
|
||||
if let Some(existing) = lens_box
|
||||
.lenses
|
||||
.iter_mut()
|
||||
.find(|lop| lop.label == lens_op.label)
|
||||
{
|
||||
*existing = lens_op;
|
||||
} else {
|
||||
lens_box.lenses.push(lens_op);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
let answer = lens_boxes
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(box_idx, lens_box)| {
|
||||
lens_box
|
||||
.lenses
|
||||
.iter()
|
||||
.enumerate()
|
||||
.map(|(lens_idx, lens)| {
|
||||
if let Operation::Insert(focal_length) = lens.operation {
|
||||
(box_idx + 1) * (lens_idx + 1) * focal_length
|
||||
} else {
|
||||
panic!("How did a removal lens get in there?");
|
||||
}
|
||||
})
|
||||
.sum::<usize>()
|
||||
})
|
||||
.sum();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1_a() -> Result<()> {
|
||||
assert_eq!(part1("HASH".to_owned())?, 52);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_1_b() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1("rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7".to_owned())?,
|
||||
1320
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2("rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7".to_owned())?,
|
||||
145
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
256
2023/src/bin/day16.rs
Normal file
256
2023/src/bin/day16.rs
Normal file
|
@ -0,0 +1,256 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use grid::Grid;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{collections::HashSet, ops::Add, str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 16;
|
||||
|
||||
#[derive(Debug, Clone, Default)]
|
||||
enum Tile {
|
||||
#[default]
|
||||
Empty,
|
||||
VerticalSplit,
|
||||
HorizontalSplit,
|
||||
RMirror,
|
||||
LMirror,
|
||||
}
|
||||
|
||||
impl Tile {
|
||||
fn new_tile_grid(input: &str) -> Grid<Self> {
|
||||
let mut grid = Grid::new(0, 0);
|
||||
for line in input.lines() {
|
||||
let tiles = line
|
||||
.trim()
|
||||
.chars()
|
||||
.map(|c| match c {
|
||||
'.' => Self::Empty,
|
||||
'|' => Self::VerticalSplit,
|
||||
'-' => Self::HorizontalSplit,
|
||||
'/' => Self::RMirror,
|
||||
'\\' => Self::LMirror,
|
||||
unknown => panic!("unknown tile: {unknown}"),
|
||||
})
|
||||
.collect_vec();
|
||||
grid.push_row(tiles);
|
||||
}
|
||||
grid
|
||||
}
|
||||
|
||||
fn direction_to(&self, direction: &Dir) -> Vec<Dir> {
|
||||
match self {
|
||||
Tile::Empty => vec![direction.clone()],
|
||||
Tile::VerticalSplit => match direction {
|
||||
Dir::Up | Dir::Down => vec![direction.clone()],
|
||||
Dir::Right | Dir::Left => vec![Dir::Up, Dir::Down],
|
||||
},
|
||||
Tile::HorizontalSplit => match direction {
|
||||
Dir::Right | Dir::Left => vec![direction.clone()],
|
||||
Dir::Up | Dir::Down => vec![Dir::Right, Dir::Left],
|
||||
},
|
||||
Tile::RMirror => vec![match direction {
|
||||
Dir::Up => Dir::Right,
|
||||
Dir::Right => Dir::Up,
|
||||
Dir::Down => Dir::Left,
|
||||
Dir::Left => Dir::Down,
|
||||
}],
|
||||
Tile::LMirror => vec![match direction {
|
||||
Dir::Up => Dir::Left,
|
||||
Dir::Right => Dir::Down,
|
||||
Dir::Down => Dir::Right,
|
||||
Dir::Left => Dir::Up,
|
||||
}],
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
enum Dir {
|
||||
Up,
|
||||
Right,
|
||||
Down,
|
||||
Left,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
|
||||
struct Beam(usize, usize, Dir);
|
||||
|
||||
impl Beam {
|
||||
fn add_dir(&self, dir: &Dir) -> Self {
|
||||
Self(
|
||||
match dir {
|
||||
Dir::Up => self.0.saturating_sub(1),
|
||||
Dir::Down => self.0.saturating_add(1),
|
||||
_ => self.0,
|
||||
},
|
||||
match dir {
|
||||
Dir::Left => self.1.saturating_sub(1),
|
||||
Dir::Right => self.1.saturating_add(1),
|
||||
_ => self.1,
|
||||
},
|
||||
dir.clone(),
|
||||
)
|
||||
}
|
||||
|
||||
fn next_path(&self, tiles: &Grid<Tile>) -> Vec<Beam> {
|
||||
tiles
|
||||
.get(self.0, self.1)
|
||||
.map(|tile| tile.direction_to(&self.2))
|
||||
.map(|dirs| {
|
||||
dirs.iter()
|
||||
.map(|dir| self.add_dir(dir))
|
||||
.filter(|beam| tiles.get(beam.0, beam.1).is_some())
|
||||
.collect_vec()
|
||||
})
|
||||
.unwrap_or(vec![])
|
||||
}
|
||||
|
||||
fn part2_starts(grid: &Grid<Tile>) -> Vec<Self> {
|
||||
let mut starts = vec![];
|
||||
let rows = grid.rows();
|
||||
let cols = grid.cols();
|
||||
starts.push(Beam(0, 0, Dir::Right));
|
||||
starts.push(Beam(0, 0, Dir::Down));
|
||||
starts.push(Beam(0, cols - 1, Dir::Down));
|
||||
starts.push(Beam(0, cols - 1, Dir::Left));
|
||||
starts.push(Beam(rows - 1, cols - 1, Dir::Left));
|
||||
starts.push(Beam(rows - 1, cols - 1, Dir::Up));
|
||||
starts.push(Beam(rows - 1, 0, Dir::Up));
|
||||
starts.push(Beam(rows - 1, 0, Dir::Right));
|
||||
for row in 1..rows - 2 {
|
||||
starts.push(Beam(row, 0, Dir::Right));
|
||||
starts.push(Beam(row, cols - 1, Dir::Left));
|
||||
}
|
||||
for col in 1..cols - 2 {
|
||||
starts.push(Beam(0, col, Dir::Down));
|
||||
starts.push(Beam(rows - 1, col, Dir::Up));
|
||||
}
|
||||
starts
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let grid = Tile::new_tile_grid(&input);
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut energized = HashSet::new();
|
||||
let mut full_beam = HashSet::new();
|
||||
let mut beam_path = vec![Beam(0, 0, Dir::Right)];
|
||||
while let Some(beam) = beam_path.pop() {
|
||||
energized.insert((beam.0, beam.1));
|
||||
full_beam.insert(beam.clone());
|
||||
beam.next_path(&grid)
|
||||
.into_iter()
|
||||
.filter(|b| !full_beam.contains(b))
|
||||
.for_each(|new_beam| {
|
||||
beam_path.push(new_beam);
|
||||
});
|
||||
}
|
||||
let answer = energized.len();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let grid = Tile::new_tile_grid(&input);
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer = Beam::part2_starts(&grid)
|
||||
.into_iter()
|
||||
.map(|start| {
|
||||
let mut energized = HashSet::new();
|
||||
let mut full_beam = HashSet::new();
|
||||
let mut beam_path = vec![start];
|
||||
while let Some(beam) = beam_path.pop() {
|
||||
energized.insert((beam.0, beam.1));
|
||||
full_beam.insert(beam.clone());
|
||||
beam.next_path(&grid)
|
||||
.into_iter()
|
||||
.filter(|b| !full_beam.contains(b))
|
||||
.for_each(|new_beam| {
|
||||
beam_path.push(new_beam);
|
||||
});
|
||||
}
|
||||
energized.len()
|
||||
})
|
||||
.max()
|
||||
.unwrap();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1(
|
||||
r#".|...\....
|
||||
|.-.\.....
|
||||
.....|-...
|
||||
........|.
|
||||
..........
|
||||
.........\
|
||||
..../.\\..
|
||||
.-.-/..|..
|
||||
.|....-|.\
|
||||
..//.|...."#
|
||||
.to_owned(),
|
||||
)?,
|
||||
46
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
r#".|...\....
|
||||
|.-.\.....
|
||||
.....|-...
|
||||
........|.
|
||||
..........
|
||||
.........\
|
||||
..../.\\..
|
||||
.-.-/..|..
|
||||
.|....-|.\
|
||||
..//.|...."#
|
||||
.to_owned(),
|
||||
)?,
|
||||
51
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
259
2023/src/bin/day17.rs
Normal file
259
2023/src/bin/day17.rs
Normal file
|
@ -0,0 +1,259 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use grid::Grid;
|
||||
use itertools::Itertools;
|
||||
use pathfinding::prelude::dijkstra;
|
||||
use rayon::prelude::*;
|
||||
use std::{
|
||||
collections::{HashMap, HashSet},
|
||||
str::FromStr,
|
||||
time::Instant,
|
||||
};
|
||||
|
||||
static DAY: u8 = 17;
|
||||
type Pos = (usize, usize);
|
||||
|
||||
fn delta_pos(from: &Pos, to: &Pos) -> (isize, isize) {
|
||||
return (
|
||||
to.0 as isize - from.0 as isize,
|
||||
to.1 as isize - from.1 as isize,
|
||||
);
|
||||
}
|
||||
|
||||
fn grid(input: &str) -> Grid<usize> {
|
||||
let mut grid = Grid::new(0, 0);
|
||||
for line in input.lines() {
|
||||
let weights = line
|
||||
.trim()
|
||||
.chars()
|
||||
.map(|c| c.to_digit(10).expect("invalid weight") as usize)
|
||||
.collect_vec();
|
||||
grid.push_row(weights);
|
||||
}
|
||||
grid
|
||||
}
|
||||
|
||||
struct Graph {
|
||||
edges: HashMap<Pos, HashMap<Pos, usize>>,
|
||||
}
|
||||
|
||||
impl Graph {
|
||||
fn new_from_weighted_grid(weights: &Grid<usize>) -> Self {
|
||||
let mut edges = HashMap::new();
|
||||
for r in 0..weights.rows() {
|
||||
for c in 0..weights.cols() {
|
||||
let pos = (r, c);
|
||||
for (n_pos, n_weight) in weights.neighbors_orthogonal(pos) {
|
||||
edges
|
||||
.entry(pos)
|
||||
.or_insert_with(|| HashMap::new())
|
||||
.insert(n_pos, *n_weight);
|
||||
}
|
||||
}
|
||||
}
|
||||
Self { edges }
|
||||
}
|
||||
|
||||
fn shortest_path_with_movement_limit(
|
||||
&self,
|
||||
start: Pos,
|
||||
end: Pos,
|
||||
move_limit_min: usize,
|
||||
move_limit_max: usize,
|
||||
) -> usize {
|
||||
// TODO min move limit?
|
||||
let valid_move_in_limit =
|
||||
|delta: (isize, isize), since: &Pos, predecessors: &HashMap<Pos, Option<Pos>>| {
|
||||
let mut current = since;
|
||||
let mut previous = vec![];
|
||||
for i in 0..move_limit_max {
|
||||
if let Some(Some(prev)) = predecessors.get(current) {
|
||||
let previous_movement = delta_pos(prev, current);
|
||||
if previous_movement != delta {
|
||||
// movement is different we are okay
|
||||
break;
|
||||
} else if i == (move_limit_max - 1) {
|
||||
// movement is the same and we are not at the movement limit, break out of this
|
||||
// path, not allowed
|
||||
previous.push(*current);
|
||||
return (false, previous);
|
||||
} else {
|
||||
// check the prior element
|
||||
previous.push(*current);
|
||||
current = prev;
|
||||
}
|
||||
} else {
|
||||
// no path we are good
|
||||
break;
|
||||
}
|
||||
}
|
||||
(true, previous)
|
||||
};
|
||||
|
||||
// based on https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm
|
||||
let mut queue: HashMap<Pos, usize> = HashMap::new();
|
||||
let mut distances: HashMap<Pos, usize> = HashMap::new();
|
||||
let mut predecessors: HashMap<Pos, Option<Pos>> = HashMap::new();
|
||||
self.edges.iter().for_each(|(pos, _)| {
|
||||
distances.insert(*pos, usize::MAX);
|
||||
predecessors.insert(*pos, None);
|
||||
queue.insert(*pos, 0);
|
||||
});
|
||||
distances.insert(start, 0);
|
||||
|
||||
// go from start node and check all other nodes
|
||||
while queue.len() > 0 {
|
||||
let ((current, backtrack), distance) = queue
|
||||
.iter()
|
||||
.map(|item| (item, distances.get(item.0).unwrap()))
|
||||
.sorted_by(|(_, distance_a), (_, distance_b)| distance_a.cmp(distance_b))
|
||||
.next()
|
||||
.unwrap();
|
||||
let current = *current;
|
||||
let distance = *distance;
|
||||
queue.remove(¤t);
|
||||
|
||||
// Can terminate dijkstra early if we hit our end value.
|
||||
if current == end {
|
||||
break;
|
||||
}
|
||||
self.edges
|
||||
.get(¤t)
|
||||
.unwrap()
|
||||
.iter()
|
||||
.filter(|(neighbor, n_dist)| {
|
||||
let movement = delta_pos(¤t, neighbor);
|
||||
let in_queue = queue.contains_key(neighbor);
|
||||
let is_not_backwards = {
|
||||
let pred = predecessors.get(¤t).unwrap().unwrap();
|
||||
let pred_movement = delta_pos(&pred, ¤t);
|
||||
|
||||
// not 180 degree turn
|
||||
!(pred_movement.0 * -1 == movement.0 && pred_movement.1 * -1 == movement.1)
|
||||
};
|
||||
let (valid_movement, _) =
|
||||
valid_move_in_limit(movement, ¤t, &predecessors);
|
||||
if in_queue && is_not_backwards && !valid_movement {
|
||||
// if not valid movement in limits then backtrack and try those again ... todo
|
||||
// TODO Do this thing?
|
||||
}
|
||||
return in_queue && valid_movement;
|
||||
})
|
||||
.for_each(|(neighbor, n_dist)| {
|
||||
let current_n_dist = *distances.get(neighbor).unwrap();
|
||||
let alt = distance + n_dist;
|
||||
if alt < current_n_dist {
|
||||
distances.insert(*neighbor, alt);
|
||||
predecessors.insert(*neighbor, Some(current.clone()));
|
||||
}
|
||||
});
|
||||
}
|
||||
*distances.get(&end).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let weights = grid(&input);
|
||||
let graph = Graph::new_from_weighted_grid(&weights);
|
||||
let root = (0, 0);
|
||||
let goal = (weights.rows() - 1, weights.cols() - 1);
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer = graph.shortest_path_with_movement_limit(root, goal, 1, 3);
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let weights = grid(&input);
|
||||
let graph = Graph::new_from_weighted_grid(&weights);
|
||||
let root = (0, 0);
|
||||
let goal = (weights.rows() - 1, weights.cols() - 1);
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut answer = 0;
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1(
|
||||
"2413432311323
|
||||
3215453535623
|
||||
3255245654254
|
||||
3446585845452
|
||||
4546657867536
|
||||
1438598798454
|
||||
4457876987766
|
||||
3637877979653
|
||||
4654967986887
|
||||
4564679986453
|
||||
1224686865563
|
||||
2546548887735
|
||||
4322674655533"
|
||||
.to_owned(),
|
||||
)?,
|
||||
102
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
#[ignore]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
"2413432311323
|
||||
3215453535623
|
||||
3255245654254
|
||||
3446585845452
|
||||
4546657867536
|
||||
1438598798454
|
||||
4457876987766
|
||||
3637877979653
|
||||
4654967986887
|
||||
4564679986453
|
||||
1224686865563
|
||||
2546548887735
|
||||
4322674655533"
|
||||
.to_owned(),
|
||||
)?,
|
||||
0
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
180
2023/src/bin/day18.rs
Normal file
180
2023/src/bin/day18.rs
Normal file
|
@ -0,0 +1,180 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use geo::{Area, Coord, Coordinate, LineString, Polygon};
|
||||
use itertools::Itertools;
|
||||
use pathfinding::num_traits::{Float, Signed};
|
||||
use rayon::prelude::*;
|
||||
use std::{collections::HashSet, str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = 18;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct DigCommand {
|
||||
direction: char,
|
||||
distance: i32,
|
||||
color: String,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct DigPlan {
|
||||
commands: Vec<DigCommand>,
|
||||
}
|
||||
|
||||
impl DigPlan {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
let commands = s
|
||||
.lines()
|
||||
.map(|line| {
|
||||
let parts: Vec<&str> = line.split_whitespace().collect();
|
||||
if parts.len() != 3 {
|
||||
return Err("Invalid command format".into());
|
||||
}
|
||||
Ok(DigCommand {
|
||||
direction: parts[0].chars().next().ok_or("Invalid direction")?,
|
||||
distance: parts[1].parse()?,
|
||||
color: parts[2].to_string(),
|
||||
})
|
||||
})
|
||||
.collect::<Result<Vec<DigCommand>>>()?;
|
||||
Ok(Self { commands })
|
||||
}
|
||||
|
||||
fn calculate_poly(&self) -> geo::Polygon {
|
||||
let mut position = (0, 0);
|
||||
let mut visited: Vec<(i32, i32)> = vec![position];
|
||||
for command in &self.commands {
|
||||
let (dx, dy) = match command.direction {
|
||||
'U' => (0, -1),
|
||||
'D' => (0, 1),
|
||||
'L' => (-1, 0),
|
||||
'R' => (1, 0),
|
||||
_ => unreachable!(),
|
||||
};
|
||||
for _ in 0..command.distance {
|
||||
position.0 += dx;
|
||||
position.1 += dy;
|
||||
visited.push(position);
|
||||
}
|
||||
}
|
||||
if *visited.last().unwrap() != *visited.first().unwrap() {
|
||||
panic!("expected a closed loop")
|
||||
}
|
||||
if visited.iter().sorted_unstable().dedup().count() != visited.len() - 1 {
|
||||
panic!("Loop intersected with itself more than the 1 allowed time for the start node");
|
||||
}
|
||||
println!("visited {}: {visited:?}", visited.len());
|
||||
let coordinates: Vec<Coordinate<f64>> = visited
|
||||
.into_iter()
|
||||
.map(|(x, y)| Coordinate {
|
||||
x: x as f64,
|
||||
y: y as f64,
|
||||
})
|
||||
.collect_vec();
|
||||
Polygon::new(LineString::from(coordinates), vec![])
|
||||
// visited.len()
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
println!("Input\n====\n{input}\n\n");
|
||||
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let dig_plan = DigPlan::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let polygon = dig_plan.calculate_poly();
|
||||
let answer = polygon.signed_area().abs();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer as usize)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let dig_plan = DigPlan::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut answer = 0;
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1(
|
||||
"R 6 (#70c710)
|
||||
D 5 (#0dc571)
|
||||
L 2 (#5713f0)
|
||||
D 2 (#d2c081)
|
||||
R 2 (#59c680)
|
||||
D 2 (#411b91)
|
||||
L 5 (#8ceee2)
|
||||
U 2 (#caa173)
|
||||
L 1 (#1b58a2)
|
||||
U 2 (#caa171)
|
||||
R 2 (#7807d2)
|
||||
U 3 (#a77fa3)
|
||||
L 2 (#015232)
|
||||
U 2 (#7a21e3)"
|
||||
.to_owned(),
|
||||
)?,
|
||||
62
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
"R 6 (#70c710)
|
||||
D 5 (#0dc571)
|
||||
L 2 (#5713f0)
|
||||
D 2 (#d2c081)
|
||||
R 2 (#59c680)
|
||||
D 2 (#411b91)
|
||||
L 5 (#8ceee2)
|
||||
U 2 (#caa173)
|
||||
L 1 (#1b58a2)
|
||||
U 2 (#caa171)
|
||||
R 2 (#7807d2)
|
||||
U 3 (#a77fa3)
|
||||
L 2 (#015232)
|
||||
U 2 (#7a21e3)"
|
||||
.to_owned(),
|
||||
)?,
|
||||
0
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
425
2023/src/bin/day19.rs
Normal file
425
2023/src/bin/day19.rs
Normal file
|
@ -0,0 +1,425 @@
|
|||
use aoc23::prelude::*;
|
||||
use itertools::Itertools;
|
||||
use regex::Regex;
|
||||
use static_init::dynamic;
|
||||
use std::{collections::HashMap, time::Instant};
|
||||
|
||||
static DAY: u8 = 19;
|
||||
#[dynamic]
|
||||
static RE_PARSE_PART: Regex = Regex::new(r"x=(?<x>\d+).*m=(?<m>\w+).*a=(?<a>\d+).*s=(?<s>\d+)")
|
||||
.expect("re_parse_part invalid");
|
||||
#[dynamic]
|
||||
static RE_PARSE_WORKFLOW: Regex =
|
||||
Regex::new(r"^(?<name>\w+)\{(?<ops>.*)}").expect("re_parse_workflow invalid");
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Part {
|
||||
x: usize,
|
||||
m: usize,
|
||||
a: usize,
|
||||
s: usize,
|
||||
}
|
||||
|
||||
impl Part {
|
||||
fn new_from_line(line: &str) -> Self {
|
||||
let re = RE_PARSE_PART.captures(line).expect("part does not match");
|
||||
Self {
|
||||
x: re.name("x").unwrap().as_str().parse().unwrap(),
|
||||
m: re.name("m").unwrap().as_str().parse().unwrap(),
|
||||
a: re.name("a").unwrap().as_str().parse().unwrap(),
|
||||
s: re.name("s").unwrap().as_str().parse().unwrap(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum PartCategory {
|
||||
X,
|
||||
M,
|
||||
A,
|
||||
S,
|
||||
}
|
||||
|
||||
impl PartCategory {
|
||||
fn new_from_char(c: &char) -> Self {
|
||||
match c {
|
||||
'x' => Self::X,
|
||||
'm' => Self::M,
|
||||
'a' => Self::A,
|
||||
's' => Self::S,
|
||||
_ => panic!("wee woo"),
|
||||
}
|
||||
}
|
||||
|
||||
fn value_of(&self, part: &Part) -> usize {
|
||||
match self {
|
||||
PartCategory::X => part.x,
|
||||
PartCategory::M => part.m,
|
||||
PartCategory::A => part.a,
|
||||
PartCategory::S => part.s,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum BasicFlowOp {
|
||||
Accept,
|
||||
Reject,
|
||||
Route(String),
|
||||
}
|
||||
|
||||
impl BasicFlowOp {
|
||||
fn new_from_line(line: &str) -> Self {
|
||||
match line {
|
||||
"A" => Self::Accept,
|
||||
"R" => Self::Reject,
|
||||
route => Self::Route(route.to_owned()),
|
||||
}
|
||||
}
|
||||
|
||||
fn as_flow_op(&self) -> FlowOp {
|
||||
match self {
|
||||
BasicFlowOp::Accept => FlowOp::Accept,
|
||||
BasicFlowOp::Reject => FlowOp::Reject,
|
||||
BasicFlowOp::Route(to) => FlowOp::Route(to.to_owned()),
|
||||
}
|
||||
}
|
||||
|
||||
fn part2_to(&self) -> String {
|
||||
match self {
|
||||
BasicFlowOp::Accept => "A".to_owned(),
|
||||
BasicFlowOp::Reject => "R".to_owned(),
|
||||
BasicFlowOp::Route(to) => to.to_owned(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
enum FlowOp {
|
||||
LessThan(PartCategory, usize, BasicFlowOp),
|
||||
GreaterThan(PartCategory, usize, BasicFlowOp),
|
||||
Accept,
|
||||
Reject,
|
||||
Route(String),
|
||||
}
|
||||
|
||||
impl FlowOp {
|
||||
fn new_from_line(line: &str) -> Self {
|
||||
let split = line.split([':', ',', '>', '<']).collect_vec();
|
||||
if split.len() == 1 {
|
||||
BasicFlowOp::new_from_line(split.get(0).unwrap()).as_flow_op()
|
||||
} else {
|
||||
if line.contains('>') {
|
||||
Self::GreaterThan(
|
||||
PartCategory::new_from_char(&split.get(0).unwrap().chars().next().unwrap()),
|
||||
split.get(1).unwrap().parse().unwrap(),
|
||||
BasicFlowOp::new_from_line(split.get(2).unwrap()),
|
||||
)
|
||||
} else {
|
||||
Self::LessThan(
|
||||
PartCategory::new_from_char(&split.get(0).unwrap().chars().next().unwrap()),
|
||||
split.get(1).unwrap().parse().unwrap(),
|
||||
BasicFlowOp::new_from_line(split.get(2).unwrap()),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Workflow {
|
||||
name: String,
|
||||
flow: Vec<FlowOp>,
|
||||
}
|
||||
|
||||
impl Workflow {
|
||||
fn new_from_line(line: &str) -> Self {
|
||||
let re = RE_PARSE_WORKFLOW
|
||||
.captures(line)
|
||||
.expect("workflow does not match");
|
||||
Self {
|
||||
name: re.name("name").unwrap().as_str().to_owned(),
|
||||
flow: re
|
||||
.name("ops")
|
||||
.unwrap()
|
||||
.as_str()
|
||||
.split(',')
|
||||
.map(FlowOp::new_from_line)
|
||||
.collect(),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parse_system(input: &str) -> (HashMap<String, Workflow>, Vec<Part>) {
|
||||
let split = input.split("\n\n").collect_vec();
|
||||
(
|
||||
split
|
||||
.get(0)
|
||||
.unwrap()
|
||||
.lines()
|
||||
.map(Workflow::new_from_line)
|
||||
.map(|w| (w.name.clone(), w))
|
||||
.collect(),
|
||||
split
|
||||
.get(1)
|
||||
.unwrap()
|
||||
.lines()
|
||||
.map(Part::new_from_line)
|
||||
.collect(),
|
||||
)
|
||||
}
|
||||
|
||||
fn check_part_accepted(part: &Part, workflows: &HashMap<String, Workflow>) -> bool {
|
||||
let mut current_workflow = workflows.get("in");
|
||||
'flows: while let Some(workflow) = current_workflow {
|
||||
current_workflow = None;
|
||||
for flow_op in workflow.flow.iter() {
|
||||
let basic_op = match flow_op {
|
||||
FlowOp::LessThan(cat, num, bop) => {
|
||||
if cat.value_of(part) < *num {
|
||||
bop.as_flow_op()
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
FlowOp::GreaterThan(cat, num, bop) => {
|
||||
if cat.value_of(part) > *num {
|
||||
bop.as_flow_op()
|
||||
} else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
op => op.clone(),
|
||||
};
|
||||
match basic_op {
|
||||
FlowOp::Accept => return true,
|
||||
FlowOp::Reject => return false,
|
||||
FlowOp::Route(to) => {
|
||||
current_workflow = workflows.get(&to);
|
||||
continue 'flows;
|
||||
}
|
||||
_ => panic!("not basic"),
|
||||
}
|
||||
}
|
||||
}
|
||||
panic!("why are we here?")
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let (workflows, parts) = parse_system(&input);
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let answer = parts
|
||||
.iter()
|
||||
.filter_map(|p| check_part_accepted(p, &workflows).then(|| p.x + p.m + p.a + p.s))
|
||||
.sum();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let (workflows, _) = parse_system(&input);
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
|
||||
// LOL yeah right... no no no to brute force on this one
|
||||
//
|
||||
// ```
|
||||
// let bar = ProgressBar::new(4000 * 4000 * 4000 * 4000);
|
||||
// let answer = iproduct!(1..=4000usize, 1..=4000usize, 1..=4000usize, 1..=4000usize)
|
||||
// .par_bridge()
|
||||
// .map(|(x, m, a, s)| {
|
||||
// bar.inc(1);
|
||||
// Part { x, m, a, s }
|
||||
// })
|
||||
// .filter(|part| check_part_accepted(part, &workflows))
|
||||
// .count();
|
||||
// bar.finish();
|
||||
// ```
|
||||
//
|
||||
// Honestly copied someone else's approach for this one...
|
||||
// https://github.com/klimesf/advent-of-code/blob/master/src/y2023/day19.rs
|
||||
let mut stack: Vec<(
|
||||
(usize, usize),
|
||||
(usize, usize),
|
||||
(usize, usize),
|
||||
(usize, usize),
|
||||
String,
|
||||
usize,
|
||||
)> = vec![(
|
||||
(1, 4000),
|
||||
(1, 4000),
|
||||
(1, 4000),
|
||||
(1, 4000),
|
||||
"in".to_owned(),
|
||||
0,
|
||||
)];
|
||||
let mut accepted: Vec<(
|
||||
(usize, usize),
|
||||
(usize, usize),
|
||||
(usize, usize),
|
||||
(usize, usize),
|
||||
)> = vec![];
|
||||
while let Some(range) = stack.pop() {
|
||||
let (x, m, a, s, wf_key, rule_key) = range;
|
||||
if wf_key == "A" {
|
||||
accepted.push((x, m, a, s));
|
||||
continue;
|
||||
} else if wf_key == "R" {
|
||||
continue;
|
||||
}
|
||||
|
||||
// Invalid bounds check
|
||||
if x.0 > x.1 || m.0 > m.1 || a.0 > a.1 || s.0 > s.1 {
|
||||
continue;
|
||||
}
|
||||
let workflow = workflows.get(&wf_key).unwrap();
|
||||
let flow_op = &workflow.flow[rule_key];
|
||||
match flow_op {
|
||||
FlowOp::Accept => {
|
||||
accepted.push((x, m, a, s));
|
||||
continue;
|
||||
}
|
||||
FlowOp::Reject => {
|
||||
continue;
|
||||
}
|
||||
FlowOp::Route(new_wf_key) => {
|
||||
stack.push((x, m, a, s, new_wf_key.to_owned(), 0));
|
||||
continue;
|
||||
}
|
||||
FlowOp::GreaterThan(category, number, flow_op) => match category {
|
||||
PartCategory::X => {
|
||||
stack.push(((number + 1, x.1), m, a, s, flow_op.part2_to(), 0));
|
||||
stack.push(((x.0, *number), m, a, s, wf_key, rule_key + 1));
|
||||
}
|
||||
PartCategory::M => {
|
||||
stack.push((x, (number + 1, m.1), a, s, flow_op.part2_to(), 0));
|
||||
stack.push((x, (m.0, *number), a, s, wf_key, rule_key + 1));
|
||||
}
|
||||
PartCategory::A => {
|
||||
stack.push((x, m, (number + 1, a.1), s, flow_op.part2_to(), 0));
|
||||
stack.push((x, m, (a.0, *number), s, wf_key, rule_key + 1));
|
||||
}
|
||||
PartCategory::S => {
|
||||
stack.push((x, m, a, (number + 1, s.1), flow_op.part2_to(), 0));
|
||||
stack.push((x, m, a, (s.0, *number), wf_key, rule_key + 1));
|
||||
}
|
||||
},
|
||||
FlowOp::LessThan(category, number, flow_op) => match category {
|
||||
PartCategory::X => {
|
||||
stack.push(((x.0, number - 1), m, a, s, flow_op.part2_to(), 0));
|
||||
stack.push(((*number, x.1), m, a, s, wf_key, rule_key + 1));
|
||||
}
|
||||
PartCategory::M => {
|
||||
stack.push((x, (m.0, number - 1), a, s, flow_op.part2_to(), 0));
|
||||
stack.push((x, (*number, m.1), a, s, wf_key, rule_key + 1));
|
||||
}
|
||||
PartCategory::A => {
|
||||
stack.push((x, m, (a.0, number - 1), s, flow_op.part2_to(), 0));
|
||||
stack.push((x, m, (*number, a.1), s, wf_key, rule_key + 1));
|
||||
}
|
||||
PartCategory::S => {
|
||||
stack.push((x, m, a, (s.0, number - 1), flow_op.part2_to(), 0));
|
||||
stack.push((x, m, a, (*number, s.1), wf_key, rule_key + 1));
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
let answer = accepted
|
||||
.iter()
|
||||
.map(|(x, m, a, s)| (x.1 - x.0 + 1) * (m.1 - m.0 + 1) * (a.1 - a.0 + 1) * (s.1 - s.0 + 1))
|
||||
.sum();
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(
|
||||
part1(
|
||||
"px{a<2006:qkq,m>2090:A,rfg}
|
||||
pv{a>1716:R,A}
|
||||
lnx{m>1548:A,A}
|
||||
rfg{s<537:gd,x>2440:R,A}
|
||||
qs{s>3448:A,lnx}
|
||||
qkq{x<1416:A,crn}
|
||||
crn{x>2662:A,R}
|
||||
in{s<1351:px,qqz}
|
||||
qqz{s>2770:qs,m<1801:hdj,R}
|
||||
gd{a>3333:R,R}
|
||||
hdj{m>838:A,pv}
|
||||
|
||||
{x=787,m=2655,a=1222,s=2876}
|
||||
{x=1679,m=44,a=2067,s=496}
|
||||
{x=2036,m=264,a=79,s=2244}
|
||||
{x=2461,m=1339,a=466,s=291}
|
||||
{x=2127,m=1623,a=2188,s=1013}
|
||||
"
|
||||
.to_owned(),
|
||||
)?,
|
||||
19114
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(
|
||||
part2(
|
||||
"px{a<2006:qkq,m>2090:A,rfg}
|
||||
pv{a>1716:R,A}
|
||||
lnx{m>1548:A,A}
|
||||
rfg{s<537:gd,x>2440:R,A}
|
||||
qs{s>3448:A,lnx}
|
||||
qkq{x<1416:A,crn}
|
||||
crn{x>2662:A,R}
|
||||
in{s<1351:px,qqz}
|
||||
qqz{s>2770:qs,m<1801:hdj,R}
|
||||
gd{a>3333:R,R}
|
||||
hdj{m>838:A,pv}
|
||||
|
||||
{x=787,m=2655,a=1222,s=2876}
|
||||
{x=1679,m=44,a=2067,s=496}
|
||||
{x=2036,m=264,a=79,s=2244}
|
||||
{x=2461,m=1339,a=466,s=291}
|
||||
{x=2127,m=1623,a=2188,s=1013}
|
||||
"
|
||||
.to_owned(),
|
||||
)?,
|
||||
167409079868000
|
||||
);
|
||||
Ok(())
|
||||
}
|
||||
}
|
81
2023/src/bin/template.rs
Normal file
81
2023/src/bin/template.rs
Normal file
|
@ -0,0 +1,81 @@
|
|||
use aoc23::prelude::*;
|
||||
use derive_builder::Builder;
|
||||
use itertools::Itertools;
|
||||
use rayon::prelude::*;
|
||||
use std::{str::FromStr, time::Instant};
|
||||
|
||||
static DAY: u8 = TODO;
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Todo {}
|
||||
|
||||
impl Todo {
|
||||
fn new(s: &str) -> Result<Self> {
|
||||
Ok(Self {})
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: String) -> Result<usize> {
|
||||
println!("Input\n====\n{input}\n\n");
|
||||
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let todo = Todo::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut answer = 0;
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 1: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
fn part2(input: String) -> Result<usize> {
|
||||
// parse
|
||||
let start = Instant::now();
|
||||
let todo = Todo::new(&input)?;
|
||||
let parsed_time = start.elapsed();
|
||||
|
||||
// algo
|
||||
let a_start = Instant::now();
|
||||
let mut answer = 0;
|
||||
let algo_time = a_start.elapsed();
|
||||
|
||||
// output
|
||||
println!("part 2: {answer}\t[total: {:?}]", start.elapsed());
|
||||
println!("\tparse: {parsed_time:?}");
|
||||
println!("\talgo: {algo_time:?}");
|
||||
Ok(answer)
|
||||
}
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
println!("Day {DAY}");
|
||||
println!("=====");
|
||||
let input = utils::aoc::get_puzzle_input(DAY).await?;
|
||||
part1(input.clone())?;
|
||||
part2(input.clone())?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1() -> Result<()> {
|
||||
assert_eq!(part1("REPLACE".to_owned())?, 0);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_2() -> Result<()> {
|
||||
assert_eq!(part2("REPLACE".to_owned())?, 0);
|
||||
Ok(())
|
||||
}
|
||||
}
|
66
2023/src/bin/test.rs
Normal file
66
2023/src/bin/test.rs
Normal file
|
@ -0,0 +1,66 @@
|
|||
use std::io::{self, Write};
|
||||
use std::thread;
|
||||
use std::time::Duration;
|
||||
|
||||
fn main() {
|
||||
let mut food = (0, 0);
|
||||
let mut snake = vec![(1, 2), (1, 3)];
|
||||
let mut direction = (0, 1);
|
||||
print_board(&snake, &food);
|
||||
loop {
|
||||
let command: String = io::stdin().lock().read_line().unwrap();
|
||||
match command.as_str() {
|
||||
"\n" | "" => {}
|
||||
"w" | "W" => direction = (0, -1),
|
||||
"a" | "A" => direction = (-1, 0),
|
||||
"s" | "S" => direction = (0, 1),
|
||||
"d" | "D" => direction = (1, 0),
|
||||
_ => println!("Invalid command!"),
|
||||
}
|
||||
let new_head = get_new_position(&snake.last().unwrap(), &direction);
|
||||
if snake.contains(&new_head)
|
||||
|| new_head.0 < 0
|
||||
|| new_head.0 >= 20
|
||||
|| new_head.1 < 0
|
||||
|| new_head.1 >= 20
|
||||
{
|
||||
println!("Game over!");
|
||||
break;
|
||||
}
|
||||
snake.push(new_head);
|
||||
if new_head == food {
|
||||
food = get_new_food();
|
||||
} else {
|
||||
snake.remove(0);
|
||||
}
|
||||
print_board(&snake, &food);
|
||||
thread::sleep(Duration::from_millis(50));
|
||||
}
|
||||
}
|
||||
|
||||
fn get_new_position(head: &(i32, i32), direction: &(i32, i32)) -> (i32, i32) {
|
||||
let x = head.0 + direction.0;
|
||||
let y = head.1 + direction.1;
|
||||
(x, y)
|
||||
}
|
||||
|
||||
fn get_new_food() -> (i32, i32) {
|
||||
(rand::random::<i32>() % 20, rand::random::<i32>() % 20)
|
||||
}
|
||||
|
||||
fn print_board(snake: &Vec<(i32, i32)>, food: &(i32, i32)) {
|
||||
// Clear screen
|
||||
print!("\x1b[H\x1b[J");
|
||||
for y in 0..20 {
|
||||
for x in 0..20 {
|
||||
if snake.contains(&(x, y)) {
|
||||
print!("█");
|
||||
} else if (x, y) == *food {
|
||||
print!("*");
|
||||
} else {
|
||||
print!(".");
|
||||
}
|
||||
}
|
||||
println!();
|
||||
}
|
||||
}
|
12
2023/src/lib.rs
Normal file
12
2023/src/lib.rs
Normal file
|
@ -0,0 +1,12 @@
|
|||
#[cfg(all(feature = "part1", feature = "part2"))]
|
||||
compile_error!("Part 1 and Part 2 are mutually exclusive and cannot be enabled together");
|
||||
pub mod utils;
|
||||
|
||||
pub mod prelude {
|
||||
pub use super::utils::{
|
||||
self,
|
||||
common::{BoxE, Result, SError, SResult},
|
||||
config::get_config,
|
||||
grid::GridExtras,
|
||||
};
|
||||
}
|
61
2023/src/utils/aoc.rs
Normal file
61
2023/src/utils/aoc.rs
Normal file
|
@ -0,0 +1,61 @@
|
|||
use crate::prelude::*;
|
||||
use reqwest::{
|
||||
header::{self, COOKIE},
|
||||
Client,
|
||||
};
|
||||
use reqwest_middleware::{ClientBuilder as MiddlewareClientBuilder, ClientWithMiddleware};
|
||||
use reqwest_retry::{policies::ExponentialBackoff, RetryTransientMiddleware};
|
||||
use std::fs::{self, File};
|
||||
use std::io::{Read, Write};
|
||||
use std::path::PathBuf;
|
||||
|
||||
static AOC_PUZZLE_INPUT_CACHE: &str = "aoc_puzzle_cache";
|
||||
|
||||
pub async fn get_puzzle_input(day: u8) -> Result<String> {
|
||||
let file_name = format!("day_{:02}", day);
|
||||
let cache_path = PathBuf::from(AOC_PUZZLE_INPUT_CACHE).join(file_name);
|
||||
if cache_path.exists() {
|
||||
// Read from the cache file
|
||||
let mut cache_file = File::open(cache_path)?;
|
||||
let mut contents = String::new();
|
||||
cache_file.read_to_string(&mut contents)?;
|
||||
Ok(contents)
|
||||
} else {
|
||||
// Fetch the content from the URL
|
||||
let response = aoc_client()
|
||||
.await?
|
||||
.get(format!("https://adventofcode.com/2023/day/{}/input", day))
|
||||
.send()
|
||||
.await?
|
||||
.text()
|
||||
.await?;
|
||||
|
||||
// Cache the content to a file Ensure the cache directory exists
|
||||
fs::create_dir_all(AOC_PUZZLE_INPUT_CACHE)?;
|
||||
let mut cache_file = File::create(cache_path)?;
|
||||
cache_file.write_all(response.as_bytes())?;
|
||||
Ok(response)
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn aoc_client() -> Result<ClientWithMiddleware> {
|
||||
let session = &get_config().aoc_session;
|
||||
let mut session_cookie = header::HeaderValue::from_str(&format!("session={}", session))
|
||||
.expect("failed to create header with api_key.");
|
||||
session_cookie.set_sensitive(true);
|
||||
let mut headers = header::HeaderMap::new();
|
||||
headers.insert(COOKIE, session_cookie);
|
||||
let client = Client::builder()
|
||||
.default_headers(headers)
|
||||
.gzip(true)
|
||||
.brotli(true)
|
||||
.deflate(true)
|
||||
.https_only(false)
|
||||
.build()?;
|
||||
let client = MiddlewareClientBuilder::new(client)
|
||||
.with(RetryTransientMiddleware::new_with_policy(
|
||||
ExponentialBackoff::builder().build_with_max_retries(2),
|
||||
))
|
||||
.build();
|
||||
Ok(client)
|
||||
}
|
4
2023/src/utils/common.rs
Normal file
4
2023/src/utils/common.rs
Normal file
|
@ -0,0 +1,4 @@
|
|||
pub type SResult<T, R> = std::result::Result<T, R>;
|
||||
pub type SError = dyn std::error::Error;
|
||||
pub type BoxE = Box<SError>;
|
||||
pub type Result<T> = SResult<T, BoxE>;
|
20
2023/src/utils/config.rs
Normal file
20
2023/src/utils/config.rs
Normal file
|
@ -0,0 +1,20 @@
|
|||
use std::{env::var, sync::OnceLock};
|
||||
|
||||
static CONFIG: OnceLock<Config> = OnceLock::new();
|
||||
|
||||
pub struct Config {
|
||||
pub aoc_session: String,
|
||||
}
|
||||
|
||||
impl Config {}
|
||||
|
||||
fn get_var(var_name: &str) -> String {
|
||||
var(var_name).unwrap_or("".to_owned())
|
||||
}
|
||||
|
||||
pub fn get_config() -> &'static Config {
|
||||
let config = CONFIG.get_or_init(|| Config {
|
||||
aoc_session: get_var("AOC_SESSION"),
|
||||
});
|
||||
config
|
||||
}
|
36
2023/src/utils/grid.rs
Normal file
36
2023/src/utils/grid.rs
Normal file
|
@ -0,0 +1,36 @@
|
|||
use super::math::orthogonal_u_bounded;
|
||||
use grid::Grid;
|
||||
use std::collections::HashMap;
|
||||
|
||||
pub trait GridExtras<T> {
|
||||
fn neighbors_all(&self, pos: (usize, usize)) -> HashMap<(usize, usize), &T>;
|
||||
fn neighbors_orthogonal(&self, pos: (usize, usize)) -> HashMap<(usize, usize), &T>;
|
||||
}
|
||||
|
||||
impl<T> GridExtras<T> for Grid<T> {
|
||||
fn neighbors_all(&self, pos: (usize, usize)) -> HashMap<(usize, usize), &T> {
|
||||
let mut n = HashMap::new();
|
||||
for r in -1..=1 {
|
||||
for c in -1..=1 {
|
||||
// skip self
|
||||
if r == 0 && c == 0 {
|
||||
continue;
|
||||
}
|
||||
if let Some(neighbor) = pos.0.checked_add_signed(r).zip(pos.1.checked_add_signed(c))
|
||||
{
|
||||
if let Some(t) = self.get(neighbor.0, neighbor.1) {
|
||||
n.insert(neighbor, t);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
n
|
||||
}
|
||||
|
||||
fn neighbors_orthogonal(&self, pos: (usize, usize)) -> HashMap<(usize, usize), &T> {
|
||||
orthogonal_u_bounded(pos)
|
||||
.into_iter()
|
||||
.filter_map(|(pos, _delta)| self.get(pos.0, pos.1).map(|t| (pos, t)))
|
||||
.collect()
|
||||
}
|
||||
}
|
27
2023/src/utils/math.rs
Normal file
27
2023/src/utils/math.rs
Normal file
|
@ -0,0 +1,27 @@
|
|||
fn gcd(a: u64, b: u64) -> u64 {
|
||||
if b == 0 {
|
||||
a
|
||||
} else {
|
||||
gcd(b, a % b)
|
||||
}
|
||||
}
|
||||
|
||||
fn lcm(a: u64, b: u64) -> u64 {
|
||||
a / gcd(a, b) * b
|
||||
}
|
||||
|
||||
pub fn find_lcm(numbers: &[u64]) -> u64 {
|
||||
numbers.iter().cloned().fold(1, |acc, num| lcm(acc, num))
|
||||
}
|
||||
|
||||
pub fn orthogonal_u_bounded(root: (usize, usize)) -> Vec<((usize, usize), (isize, isize))> {
|
||||
[(0, 1), (0, -1), (1, 0), (-1, 0)]
|
||||
.into_iter()
|
||||
.filter_map(|delta| {
|
||||
root.0
|
||||
.checked_add_signed(delta.0)
|
||||
.zip(root.1.checked_add_signed(delta.1))
|
||||
.map(|new_pos| (new_pos, delta))
|
||||
})
|
||||
.collect()
|
||||
}
|
5
2023/src/utils/mod.rs
Normal file
5
2023/src/utils/mod.rs
Normal file
|
@ -0,0 +1,5 @@
|
|||
pub mod aoc;
|
||||
pub mod common;
|
||||
pub mod config;
|
||||
pub mod grid;
|
||||
pub mod math;
|
Loading…
Add table
Add a link
Reference in a new issue