Day 10 Part 1 complete

This commit is contained in:
Luke Else 2023-12-10 23:21:24 +00:00
parent a4c8d73439
commit 075f7e39c7
6 changed files with 232 additions and 5 deletions

View File

@ -6,6 +6,7 @@ edition = "2021"
[dependencies] [dependencies]
async-trait = "0.1.74" async-trait = "0.1.74"
fancy-regex = "0.12.0" fancy-regex = "0.12.0"
hashbrown = "0.14.3"
itertools = "0.12.0" itertools = "0.12.0"
strum = "0.25.0" strum = "0.25.0"
strum_macros = "0.25.3" strum_macros = "0.25.3"

View File

@ -0,0 +1,140 @@
7.LJFFF7F77.----7F7777F|-F-7-7F77LL77J77F|.|JFF7-F|77.FF77|F77F-L|-L7FFL7L7--.L|--7L7.J-F7-|-F|7FJ.FJJ7F7-7-7JFL|7-|-7FJJ7FFF7LL--L7.-JJ-F-F
J7LL-J||FLJ-|J.F|-L|FJ7J|.LL-L7F|LF||JFJ7L-JLF.||FL.FF.--F77|J7|L|.|LF7-|||J|7L|7L77|-..|JJLFJ|||JF|L|F|JF--77LFLF7JJL-JLL-JLL7L.-L-|FJ.LLFF
L|-7LFLL7J|..|F-7-7L|-7.L--L-JL|..FFJ.|7||F7F----JJ..|||L||L|.L|L|.|F--7|L-7F|FL7JLJLL-7J7|.||-LJ---7-L-J|FFL|FF7.|7F7..|L-7|F7J-7|.||-JJL7J
||||-JJL|-7F|-|LLLL.FF|-J|F-7.LF7-7L|FFFFFJF|J|LF--LLL--77.-J-.|----JJFFL-LL7|LF-J.|.FLJLL-F|7JFLJF|77.L7|FJJ.FLL-JLF--77J.FF|J.LF|77L7L7|L-
-J---|-J..-LF-7.L7J-|LJ.F-77F-7LLJ|FF7FF7|.F.-F.J..|.|7-LF7LJF7JJ.||.---J.FFJJFL|.FF77L|7L-JLL-7|FF7-7-F.|||7F7-J..-L.J|J.F|LF.|F7J.F|--7--L
|FJ-||-7|-FJ|||-FJJLF-7.|.|LJFF77-F7|L-J|-F.F-F7L|-L-FJ|FF|LF|7L-FJ--J7.FJJFJF|77-F-FJFF-7JF-|-F7F7J.--L-|7F-LFJ.F7J-7||-77F7|-FFJF-FF.|||7J
FJ-FJJL|..FJL.FF.|FLJL-7L-|JFFFL-FJLJF--JL|7.F||J|77LJFL7FJ7JLJ-JJ7||L7-|.FFFLJFJ7||LFFL7|F--7FJLJ|7-|L.FLFJ||L7-JL7F.|L--F7LL-7L---LJFL-L77
7JL|L|F777|7J.F|-LJ7..|||FF-F7J.LL--7L7F7LF7F7|L-7-|.L|7FJJJ.FJ-JFL-F7L---L-|J7L7F7|.FJFJ||F-JL7F-J7LJ--FJ.LFF-J77.J--J7.JLJ-|LL7.F-.J--J.77
||.F.JJL7-7|.LJ.LL7|7F7-|7JFF7FF7FL|L7||L-J||||F-JF77-|-|7LF-7J7.-|-J7J|.|.-J-L7F-L-7L.L7LJL7F7||F7-FJ7|L-7L-|FF7--LJ.LLJJ77.|-FJ--.FFL.FFJ|
L-..J|.LF-J77F|7JLJJ-FJFJ|FFJLLF7FFF7|||F--J|LJL7FJL-7-F.F.L..|L-J|LLJ.F-F-J.LLL|L|7-LFFJF-7LJLJLJ|7|.LL-||J.F7-|77-F7LJ7.|----|JF||.-J.JJJ|
.L|7L-|L|-L7JFL|.|7.FJ.|.L|J||JF7-FJLJLJL7F7L--7||F--J-|7L7LF-L.LFJ7LFJ|FFJ-7.7JLF7J7.FL7|FJF-----JF7-7.L77.-|J|L||FL-F-77L7||-|.J7L-J|.F||L
LFJJ7.L..F7||F7|F-F--.-|-JL-J7F||FL--7F--J||F--J|||7F7|F7F|-L-|7L|.F.J7F-|.|F|J||||-FFF7LJL7|F7|F-7||77.-.77JL-7J.F|F|LFF7.--L7|JJFJ|7FF-F-L
FJ-LLJ-|-LFFL7JFJJJ7LFJL.FJFFF7||F7F-JL7F7||L--7||L-JL-JL77.LJLF---L7JLJF|7F7JF7FJL-77|L7F-J||L7L7LJL-7JJ|.|.|.L-.L-F--L7L-|--FJF7|-L7FJF|7L
7.77F|FF-7-F7LLJJJ.JF7--77F-.||||||L-7FJ||||7F7|LJF7F----JLF7F---L-J7F7L-F7||FJ||F--JFJFJL-7LJFJFJF---J-7--7-|7.L--LLF7L|-7JFL|-JLFFJFL.L|7J
|7L7---|J...--J|JJFJ-|FF7L-JFJLJLJL7FJL-JLJL7|||F-JLJF7F7J77-|FL7F77F7F7L||||L7||||F7L7|F--JF-JJL7L-7J.-|-LF7LF.7L7FF|7JLF|FLLL7|FJJ.|7F7L77
|FL7FJ.|J7.F|LFJ7.|J.L-F77.FL-----7|L---7F--J|||L-7F-J|||-L|L7J7|L77||-7-|||L-J||L7|L7|LJF--JF--7|F-J777FJL||-7-JFJ-F-JFJ|L-|.F7L|7F-J7|7L|L
LJ||J|-|7---7F77|.|LFLFJL-7J.F-7F7|L7F7FJL-7FJ||F-J|F-J|||LF7L|JF|F7||-F-J|L--7|L7LJFJL-7L7F7L-7LJL---7F77|||7.-LL--LJJL-|7FLJ.L-LLFJLL-.F|J
L7-L---7-7--L-JLLFJF7.L7F-JF7L7|||L7||||F--JL7||L-7|L7L|L7FJL7F7F7|LJL7L-7|F7FJL7L-7|F7FJFJ||F7L7F----J||-FJL-7.|LL--JJ..|J-J-F.|-|J.|LF-F77
LFJLLLJLFL--J|||LJ-F7F7|L7FJ|FJLJ|FJ||||L7F--J||F-J|FJFJFJL-7|||||L--7L7FJLJ|L7FJF-JLJLJFJFJ||L7||F-7F7|L7L-7FJ-L7JF||-J-L-J|FL-7F|.LJ.|.|J7
.777||..J|FJ.LF|-JL||||L7|L7||F-7|L7LJLJFJL--7||L7-|L7L7|LF7||||||F7|L7|L-7FJFJL7L-7F--7L7|FJ|FJ|||FJ|||FJF7|L-7FF7-F7-LJJF7F-.||FFJ7|F7F7-|
FLL-7.FL7|JJ.F7.F|.|LJL-JL7||LJFJL7L-7F-JF7FFJ||FJFJFJFJL7||||||||||F7||F-JL7L7FJF7LJF-JFJ||FJ|FJLJL7|LJL7|LJF-JF-7F7J|F|F-J|--L-JL-|-LJ7F-F
LF-LJ-F7L.|FFL|-||FL-----7||L-7L-7L--JL7L|L7L7||L-JFJFJF7LJ||||||LJ||LJ|L-7FJFJL7||F7|F7L7||L7||F---J|F--JL7FJF7L7LJ|7.LF7.LFF7.|.L.J7FF-J-|
.L-F-7JL7FJ-L-77LFJF7F---J||F-JF7L--7F-JFJFJFJ|L7F7L7|FJL--J|||||F-J|F7|F-JL7L7FJ||||LJ|FJ|L-JLJL-7F7|L7F7.||L|L7L7FJFFJ|JFFJ.L--JJ.F7-JJ|F7
F|J|F|-L-7-F.F|F7J7|LJF--7||L7FJ|F7FJ|F7L7L7L7L7||L-J|L----7|LJ|||F7LJ||L--7L7|L7|LJ|F7|L7L----7F-J|||FJ|L7||FJFJFJ|F7LF7-JJ-7F|JF-7-L|J.F|J
F7F--J|.|JFL.FF-77-L--JF-JLJFJL7|||L7|||FJFJFJFJ|L-7FL7F---JL7FJ|||L--JL---JFJL7||F-J|||FJF-7F-JL-7||||J|FJ||L7L7L7|||FF7.|.FLL7FJ7LJFF.FLF7
JJ|F--7F77JFFLL7L-7-F7|L---7L--JLJL-J|||L7|FJFJ||F-JF-JL7F7F7|L7||L--------7|LFJ|||LFJ||L7L7|L7F--J|LJL7||FJL7L7L7|LJL7|L---7J7.JJ|JFJJFF.|J
|7|-JF|--JL77-||F-JFJ|F7F7FJF7F-----7LJL7|LJFJF7||F7L7F-J|||LJFJ||F7JF7F7F7|L7L7||L-JFJ|FJF|L7|L7F7L7F-J|||F-JFJFJ|F--JL7F--J--F|7|FJ|FLL|7J
|J||FFJ7FL7|FF-JL7FL7||LJ||FJ||F---7|F--J|F7|FJ||LJL7|L--J|L-7L-J|||FJ|||||L7L7|LJF-7|FJL-7|FJL7||L-JL7FJLJL-7L7|F|L-7|FJL7J|.|F|L--L|JJ|L-7
.F7JLJFL-.FF7L-7FJF-J|L-7|LJLLJL--7LJL7F7LJ|||FJ|F7FJL7F--JF-JF--J||L7|||||LL7|L-7|FLJL--7||L7FJLJF---JL-7F--JFJL-JF-JFJF-J7|.FL|.|FJL|-FF|7
J-77|-JJ7L-||F-JL7L-7L-7||F7F7LF--JF-7|||LFJ||L7LJ||F7||F7FL7FJ.F-J|FJ||LJ|F7||JFJL7F--7FJ||FJL--7|F7F--7||7F-JF7F-JF7|FJ-F7F7----7|LF7LF77.
|.L-|7|FJ.L||L--7|F7L-7||||LJL7L---JFJLJL7L7LJFJ|FJLJ||||L7FJ|F7L-7||FJL-7||||L7|F-J|F7|L7||L--7FJ|||L7FJ||FJF-J|L--JLJL7FJLJ|7F|..J7.F-LL77
|.LLJ-J|--F||F-7|LJ|F7|LJ|L--7|FF7F7L7F7FJ-L-7|F7L7F-J|||FJL7LJ|F7||||F7FJ|||L7LJL7FJ|LJFJLJF7FJL7|||FJL7|LJFJF7L--7F7F7LJF7FJF77--JLF||L7J|
J7|FLJ-L-LFJ|L7|L-7|||L-7|F7FJL7||||FJ|LJF7F7||||F||F7||||F7L-7||||||LJ|L7LJL7|F--JL7L7FJF--JLJF-J||LJF-J|F7|FJ|F7LLJLJ|F-JLJ7|||-J.77L7-LF.
||7FFJLL.|L7L-J|F7|LJL--JLJ|L-7|||||L7L7FJ|||||||FJLJ||||||L7FJ|||||L-7L7L--7||L7F7FJFJL7L7F7F7|F7|L-7L7FJ|LJ|FJ|L----7||F7F7FJ|-JLF--7|77|.
7JJF|.FL7-FJF-7LJ|L-------7|FFJLJLJL7L7|L7|||||||L7F-J|||||FJ|FJ||||F7|FJ.F7|||FJ|||FJF7|FJ||||LJ||F7|FJL7L-7||FJF----JLJ|||||FJ|7FF7-|-L-J-
L-LL|F-J|7L7L7L-7L----7F--JL-JF7F7F7L7|L7||||||||FJL-7|||||L7|L7|||||||L7FJ||LJL7|||L7||||FJ|||F7|||||L7FJF7LJLJFJ-F7F-7FJ|||||F-7F7JJ|-L7L7
F-7L-J.F-7.L-JF7L----7LJF-----JLJLJL7||FJ|LJ|||||L-7FJ|||||LLJJLJ||LJ||FJL7|L--7LJLJFJ|||||FJ|||LJ|||L7||FJ|F---JF7|||FJ|FJ|||LJFJ||.FJ77|-F
F7|-|JL-LFF---JL-----JF7|F-------7F-JLJL7L-7|||||F7||FJ|||L--7F--JL-7LJL7FJ|F--JF---JFJ||||L7||L-7||L7|LJL7LJ-F--JLJLJL7|L-J||F-JFJL7J-7-J7|
LJ7J|-|JJFL7F----7F7F7|LJL---7F-7|L---7FJF-J||||||LJ|L7|||F7FJ|F-7F-JF-7|L7|L-7FL-7F7||||||LLJL7FJLJ7LJF--JF--JF7F-7F7FJ|F-7LJL--JF-JJ7.L.L|
.L-JF77J.|7LJF---J|LJ||F-----J|FJL----JL7|LFJ|LJLJ-FJFJ||LJ|L7||FJL-7L7LJFJL-7L--7|||L7|||L-7F7||F7F--7L-7FJF--JLJ.||LJFJL7L7F7F-7L-7-77|-7.
J7L-7JFJ.F---JF7F7L7FJ||F--7F7|L-----7F-JL7L7L7|7F7L7L7||F-JFJLJ|F7FJFJF7L7F-JF-7|LJL7|||L7FJ|LJLJ||F-JF7LJFJLF---7|L--JF7L7LJLJF|F-JFJF7F77
|7J||FJ7.L----JLJL7|L7|LJF7LJLJF-----JL--7L7L7L7FJL-JFJLJL7FJ7F7LJ|L7|FJ|FJL-7L7LJLF7LJ|L7|||L-7F-J|L7FJL-7L7FJF7FJ|F-7FJL7L----7LJ|L-7-|-L-
L..F|J|J.||F--7F7LLJ-LJ-FJL---7L-----7F-7L7L7|FJL7F-7L-7F-JL7FJL-7L7||L7|L7F-JFJ-F-J|LFJFJ|L-7FJ|F7L7|L--7L-J|FJLJ|LJ.LJ7JL7F7F-JLJJJFJ7LL|7
.FFL77FFF.FJF7LJ|F7LF7F7L----7L------J|FJFJFJ||F7LJFJF7|L7F7LJF--JFLJ|FJL7||F7L-7L-7L-JFJFL7FJL7|||FJ|F7JL--7||F7FF7F7F7-F7LJ|L7|F|||L|JLF-L
7-|F|7-7-FL-JL-7LJL-JLJL---7.L--------JL7L7|7|LJ|F-JFJ|L7LJL7FJF7-F7FJL7FJ||||F7|F-JF-7|7F7|L-7LJ||L7LJL---7LJLJL7|||||L-JL-7L-JF|-JJJLJFJ7|
|-|F.|JL7.LF7F7L----7F7F--7L------7F----JJ||FJF7|L7FJ-L7|F--JL-JL7|LJF7|L7|||||LJ|F7|FJL7||L--JF-JL-JF7F-7F|F-7F-J|LJLJF7F--JF7F-7J||F7-F.L7
|7|--J7LLJ7||||F----J|||F-JF7F-7F7LJF----7||L7|LJF|L-7FJ|L--7F---JL-7||L7LJLJ||F7||LJL-7LJL---7L7F-7FJLJFL7LJ7LJF7|F-7FJ|L7F7|LJFJJL7.F-|-L|
||JLFJ.7J7FJLJ|L-----JLJL--JLJ-LJL-7|F---JLJFJL--7|F-JL-J.F7|L-----7|||FJF---JLJ|||F7F-JF7F7F-JFJ|FLJF7F--JF----JLJL7LJJL-J|||F-J7FL|7L7J.L7
F7LLJFFJ.FJF7FJF-----7|F----7F7F--7LJL-----7L7F7FJ|L--7-F7|LJF7F---J|||L7|F7F7F-J|||LJF7||||L-7L7|F--JLJF--JF7F--7F-J7F----JLJL--7F--|.|.-F7
-J7777.7-L-J||JL7F7F7L7L7F-7LJLJF7L-7F-7F--J-LJLJ-L7F-JFJLJF-J|L---7||L-J||||||F7LJL--J||LJ|F-JLLJL-7F--JF--JLJF-JL--7|F7F-7F7F7FJ7.||FL7.-J
LFJ.7LJ7JF--JL7FLJLJ|FJJLJ|L7F--JL-7LJFLJ.F7FF7F7-FJL-7|F-7L-7L7F7FJ|L--7LJLJLJ|L7F--7FJL-7LJ-F7JF7FLJF-7L-7F7FL-----J||LJFJ|||||F-7-F.|7-L.
|.F-J--7-L-7F7L7F7F-JL7F7.F7LJF7F-7L--7-F7|L-JLJL7L---JLJFJF-JFJ|LJJ|F-7L-7F-7|L7LJF7LJF--JF7FJ|FJL7F7L7L-7LJL7F------JL-7L-JLJLJ|FJL77J.|-L
LFJ7|.F|7F7LJL7|||L--7|||FJL--J|L7|F-7L-JLJF7F--7L7F7F7F7L7L-7|FJF--J|FJF-JL7L7F|F7|L--J|F7||L7|L-7|||FL-7L---JL7F--7F---JF7F7LF7|L---7--F7|
||.-7-|F-JL---J|||F7FJLJ|L----7L-JLJ7L--7F7||L-7L7LJLJLJ|L|F7||L7L7F7|L7L-7FJFJFJ|LJJF7F7||||FJL--JLJL7F7L------JL-7LJF-7||||L-JLJF7F-JJ---J
-7..|L-|F7F---7|||||L--7L---7-L--------7||||L7FJ7|F--7F-JFJ||||FJFJ||L7L--JL7L-JFJFF7|LJLJLJLJF7F-7F-7LJL-7F7F-----JF7L7L-JLJF7F7FJLJF|-77||
LJ|-|L|LJ||F--J|||||F--JF7F7|F----7F---JLJLJFJ|F7|L-7|L-7L7|||||FJFJL7L--7F7L7F-J-FJLJF7F7F7F7|||FJL7L---7||LJF77F7FJ|FJF7F7FJ||LJJ.J-JFJFF|
|LJ-.FLLFJ|L--7LJLJ||F-7|LJ|LJF--7LJF7F7F--7L7LJ|L7FJ|F-J7||||LJL7|FFJF-7|||7LJLF7L--7|||LJ||||LJL7FJF---JLJF7|L-JLJFJ|FJLJLJJLJFF-7|L77.F..
JF|.F-JLL-JF7FJF7F7LJ|F||7FJF7|F7|F-JLJLJF7L7L7FJFJL7|L-7FJ||L7J-||FJFJJ|||L----JL---J|||F-J|||F--J|FJF7F7F7|LJF7F-7L7|L---------JFJJ-J7.||7
FFF|-|.FLF7|||FJ||L-7L7||FJFJLJ|LJ|F-----JL7L7|L7|F7||F-JL-JL7L7FLJL7|LFJ||F-7F7F----7|||L--JLJ|F-7|L-JLJLJLJF-JLJJL7LJF7F-7F--7F-J7-|-F7|J.
FFJJF77-L|LJLJL7LJ|FJFJLJL7|F77L--JL----7F7L-JL7|LJ||||F7F--7|FJJJLFLJ-L-JLJFLJLJF---J|LJF7F---J|FJ|F7F------JF7F--7L--JLJ.LJF-J|7J-F--JJJ.7
||J.-L.F7L----7L-7FJFJF7F7|||L--7F--7F-7LJL--7FJL-7|||LJLJF-JLJ-|.FL.L-LJF-------JF7F7L7-||L--7FJL-J||L---77F-JLJF7L--------7|F7L7J||-LLFL--
LJ7F|FFJL7F--7L--JL-J.||||LJL--7LJF7LJLL--7F-JL---JLJL-7F7L--7.L-7J|-LJLLL------7FJ||L7|FJL--7LJJFF7||F7JFJFJF7F-J|F--------JLJ|FJ-FF7.FJ7.|
-J|F|-L-7LJF-JF7F7F7F7|LJL7-F-7L--JL-----7|L7|F7F7F7F7-LJL7F-J-7-7J|J.F7-L|F----JL7||FJ||F--7L7F7FJ||LJL-J||FJ|L-7|L------7F77|LJ|.|.-|JF-J|
|7|JL|-|L-7|F-J|||||||L--7L7L7L----------JL-JFJ||LJLJ|F-7J||||LF7|.|JLF-7FFJF-7F-7|||L7|LJF-JFJ||L7|L------JL7|F7|L7F7F--7LJL7F7J-F7-|JFJJ7|
FJJJ--FF--J|L-7LJ|||||F77L7L7|F-7F-7-F-7F-7F7L7||F---J|FJFJL-7-F-7777.L7LFL-JJLJ7LJ|L7LJF-JF7L7||FJ|F-----7F-JLJ|L7LJLJF7L---J||J|LF7|J|.LF-
|F||7LLL--7|F7L7FJ|||LJ|F7L7|LJFLJ|L-JFJL7|||L|LJL----JL7L---JF|L--7.-LJL|F----7F77L-JF7L--JL7|||L7LJF---7|L---7L7L7.F-JL-7F7FJL7-.F7.F|JL-|
77.L7-FF7FJLJL-JL-J|L-7|||FJ|JF--7F---JF7||||FJF-----7F7L777F77L-J-L7FL|FFL---7LJL7F7FJ|F7|F-JLJL-JF-JF--JL----JFL7L-JF7F7LJLJF7|LJF-.7J.7.7
7|7|LF-J|L-7F-7F--7L--JLJ|L7L7L-7|L7F--J||||||FJF7JF7LJL7L7FJ|J.LL77LJ7-F7J|F7L--7|||L7|||FJF7F-7F-JF7L---7F7.F7F7L---JLJL7F7FJLJ7-F|7|F7.7|
|FL-7L-7L--J|FJ|F-JF----7|FJFJJFJL7LJF-7LJLJLJL-JL-JL--7L7LJFJF|.F-JF|FF|J|FJL---JLJL-J||LJFJ||FJ|F-JL----J|L-JLJL----77F7LJLJ.|-JF-JFL7L7|7
FF.F7J||F7F7||FJ|F7|F---J|L7|F-JF7L--J.L---7F7F-7F-----J||F-J-F-.F|JFL|7|L-|F---7F--7F7LJF7|FJ|L-JL--------JF7F7F----7L-JL----7JLLL--J|J.FJ.
.L77L7LLJ|||||L7LJLJL-7F7L-J|L--J|F-------7LJ|L7|L------7|L7.F7J7J|---J.J7.LJF-7LJF-J|L7FJLJ|FJF-----------7||||L-7F7L-7F7F7F7L7F7L7.FJ.LJ7.
FL|F7L-F-J||||FJF7F7F7LJL--7|F--7LJF--7F7FJF7L7||F-7F7F-JL7L7||F7.L..FLJJ|-L|L7|F7L--J-LJF--JL7L7F----7F-7|LJLJL--J||F7LJLJLJL7L-77JL7||7.7.
J--J|-LL-7|LJLJJ|LJLJL-----J|L7FJF7L-7LJLJFJL7LJLJFLJLJF7JL7LJL7||JL--.|.7-|F-JLJL--7-F--JF-7FJFJ|F---J|FJF7F------JLJL-7F--7.L--JJ-FLFJF7L|
.||-F-7|.LJF7LF7L-------7F-7L-J|FJL--JF-7FJF7L----7F7F-JL-7L7F-J7--JL|7.F---JF-----7L-JF-7L7||JL7|L---7|L-JLJF-------7F-J|F-JF7F77..77||LJ.7
FF77|FJJ7F-JL7||F------7|L7L7F7LJF---7L7|L7|L----7LJLJF7F-J-LJJ.L|7|.--FL-7F-J7F---JF-7L7L7||L-7LJF7F7LJ.F7F-JF7F7F-7||F7|L--JLJ|F7---|--L||
LLF-JL---L--7LJ|L-7F--7LJFJFJ|L7FJF-7L-JL-JL7JF7|L--7FJLJFLFJ.|J-7-77|F---JL7F-JF-7FJFJFJ-LJL--J-FJLJL7F-JLJF-JLJLJFJLJ|LJF-----J||JFFJ-7.LJ
|.|F7FL|-F--JF7L-7||F-JFSL7L7|FJ|LL7L-7F7F-7L-JL--77LJF7F7.|LJ7J7|-JFLL--7F7|L--JFJL7L7||F-7|F7F7L---7|L----JF7F---JF7FJF7L------JL-7J|F-7-7
-7LL7JJLFL---JL-7LJ|L7FJL7|FJ|L-JF7L-7LJ||LL---7F7L---JLJL-7FFJ.L|.|77|77||LJF7F-JF7|FJL7L7L-J|||F---JL---7F-J|L--77|||FJL---7F7F-7FJ|FL7.L|
LL.JJ.F7-F7F----JF-J.LJF7LJL-J-F7|L--JF7|L----7LJL---------J7LJF|LF-7-7JFLJ7FJLJF7|LJL--JFJF-7LJLJF------7LJF7L---JFJLJL---7JLJLJJLJ-|7L--F-
|-F.J-FLJ||L-----JF77F-JL-7F-7FJ|L----J|L--7F7L--7F7|F7F7F--7FF77|L7|F7FJJF7L-7FJ||F---7-L7L7L7F--JF----7L--JL-----JF-7F7F7L7LF---7LLJ|LJ.|J
|FL7.L7-FJ|F------JL7L---7|L7|L7|F-----J-F7LJL-7FJ|L7|LJLJF-JFJL-7FJLJ|7LF|L-7LJLLJL-7FJF7|FJ.LJF7|L---7|F7F------7FJF||||L7L-JF--J-L.L-7.L7
L|JFF-|LL7|L-7F----7L7.F-JL-J|FJLJF------JL7F77LJFJFJ|F--7L-7|F--JL-7FJJFFL-7L--7F---JL7|||||F7FJL7F7F-JLJ|L7F--7FJL-7LJLJ7L7F7L7.L7F|.|F|L|
||FF|--F-JL-7LJF---JFJFJF---7LJF-7|F---7F-7LJL7F7L7L-JL7JL--J|L7F7F7||F7F7|FJF7FJL----7|||LJFJLJF7LJLJF7F7L7LJF7|L---JLF--7FLJL-J-|LFLL7-7-F
FF7LJJLL---7|F7L7F-7L7|FJF7FJF7L7LJL--7||FJF-7LJL-JF--7L7F-7.|FJ|||||LJ|||FJFJLJF7F-7FJ||L7FJF--JL----JLJ||L7FJLJF--7F7L7FJF7F7F77J.-J-|-|7.
F7|.|..F7F7||||7LJF|FJLJFJ|L7||FJF----JLJL-J|L7F--7L-7L-JL7L7||FJ|||L-7||LJFJF-7||L7|L7LJFJL7|F----------JF7|L-7-L7FJ||FJL7|LJLJL7LL7|L--LF.
7JJFFF7|LJLJLJL--7FJ|F7FJFJ-LJLJ-L-----------7|L-7L--JF-7LL7||||FJ||F7||L-7L7|FJ|L7|L-JF-JF7LJ|F7F7F-7F---J||F7L--JL-JLJF7||F----J7.FJFL.L|7
7JLLFJ|L----7F--7|L7|||L7|F-7.F7-F7F---7F----J|F7L---7L7L--JLJ||L7|||||L--JFJ|L7L7|L--7L7FJL7FJ|LJLJ-LJF7F-JLJL7F7F-7F--JLJ|L---7L7..FFJL.L|
|7L|L7L-----J|F-J|J||||FJLJFJFJL-J|L--7|L----7|||F7F7L7L---7F-J|FJ||||L7F--J-|FJFJ|LF7L7LJF7|L-JF7F-7F-JLJF7F7L||LJFLJF7|F7|F---J7J-|7F-F-J.
LFF--JF7F7F7FJL-7|FJLJLJF-7L7L---7L---J|F----J||||LJL-JF77FJL-7|L-J||L-J|F7F7|L7|FJFJL7L7FJLJF7FJ|L7LJF7F7|LJL7|L-7F7FJL7|||L---7F7JLLLJJ|7.
F-L7F7|LJ||||F--JLJF7F-7|LL7L-7F-JF---7|L----7LJLJF--7FJ|FJF--J|F--JL--7LJ|||L7||L7L-7|-||F7FJ|L7|FJF-JLJLJF--J|F7LJ|L-7||LJF7F-J||.LJ-J--7F
.L.LJLJJFJ|||L---7FJLJJ||F-JF7|L7FJF--JL--7F7L7F7FJF-JL7|L7|F7F||F7F--7L7FJ|L7||L7L7FJ|FJLJ|L7|7||L-JF7F7F-J7F7LJL--JF7|||F-JLJF7|L-7.F7F|-7
-7FFL|..L-J||F---J|F---J||F-J|L-J|FL-----7LJL-J||L7|-F7||7|||L-JLJ|L-7|J|L7L7LJ|FJFJL7LJF7FJFJL7||F7FJLJLJF--JL-----7|LJLJL--7J||L7FJ77-LJ|7
L--|L|.7LF-J|L7F7FJL7F-7|||F-JF7FJF------JF--7FJ|FJL7||||FJLJF-7F7|F-JL7|FJFJF-JL7|F7|F7||L7|F7LJLJ|L--7F-JF--------JL--7F---JFJ|FJL--7.|.LJ
F|..FFJ7.L7FJ|LJ||F-J|FJ|LJL7FJ||.L------7L7FJ|FJL-7||LJLJF--J.LJ||L--7LJ|FJFJF-7||||||LJL-JLJL---7L---J|F-JF7F7JF-7F-7FJL-7F7L7||F---JF7FFJ
|.---7LFFFJ|F7-FJ|L7FJL7|F--JL7||F--7F---JFJ|L|L7F-J|L---7L7F7-F7LJF-7L-7||FJFJFJ|LJ|||F7JF77F7F--JF----JL--J||L7|FJ|FJL7F-J|L-JLJ|F-7-F|7J.
|-|-||.||L-J|L-JFJFJ|F7LJL-7F7|LJL-7LJF7F7L7L-JFJL7FJF7F-JFJ|L7|L7FJFJF7||||FL7L7|F7LJLJL7||FJLJF-7|F--------J|FJ||L|L--JL7J|F--7FJ|FJF-7J.-
FFFJ|7-J-LL-L-7FJ-L-J|L----J|LJF7F-JF7||||.|F--JF-JL7||L-7L-JFJL7||FJFJ||LJL7||FJ||L--7F-J||L---JFJ|L---------JL-JL-JF-7F7L-JL-7LJ7||7|FJ-F7
F7LLLF7-F7LF--JL7F7F-JF----7L7FJ|L--JLJ|||FJL7F-JF--J||F-JF--JF7|LJL7L7|L7F-JFJL7LJF-7|L7.|L7F--7L-J-F----------7F7F-JFJ|L-----JF7FJL-JL--7J
F-.F7JLFJL7L--7FJ||L--JF7-FJFJL7L---7F7||LJF-J|F-JF7FJ||F7|F-7|LJF-7|FJ|FJL7FJF7L7FJFJL7L7|FJL-7L-7F7L---------7LJ|L-7L-JF----7F|LJF----7FJ.
|7-|.F-L-7L7F7LJL|L----JL-JFJF7L7F-7||LJL-7L7|||F7|||FJLJ||L7|L7FJ7LJL7||F-JL7|L-J|FJF-JFJ||F-7L-7||L7FF---7F--JLFJF-JF7FJF-7FJFJF-JF7|L||F|
.L..J|.F7L7|||F77L---7F7F-7|FJL-J|FJLJJF7||FJFJ||LJ|||F7FJL-J|FJ|F7F7.||||F7FJL7F-JL7L-7L-JLJFJF7|||FJFJF-7|L---7L-J|FJLJFJL|L-JFJF-J|F7LJF7
|LF7.|F|L-JLJLJL7-F7JLJ|L7||L----JL-7F7|L-JL7L7||F-J||||L-7F-JL7|||||FJ||LJ|L7FJL7F7L7FJF----JFJ||||L7|FJFJ|F7F-JF7F7|F7FJF-JF-7L-JF-J||-FJ|
.FJ|7LFL7F7F7F-7L-JL---JFJLJF7F-----J||L-7F-J||LJ|F-JLJ|F-J|7F7||||||L7|L-7L-J|F7LJ|FJL7L7-F-7L7LJ||FJLJFJ.LJ|L--JLJLJ|LJ7L-7L7|F-7L--JL7L7|
LL7JJ7|.||LJ||FJF-7F-7F7|F--JLJF----7|L-7||F7FJF-JL7F-7|L-7|FJ||||||L7|L-7L--7||L7FJ|F7L7L7|FJ7L-7|||F-7L7F7-L7F-7F7F7L----7|FJ||JL--7F7L-J|
|J|.FL7-LJF7LJL-JFLJFJ|LJL----7|F---JL7FJ||||L7|F7-||FLJF7||L7|||||L7||F-J|F7|||FJL7|||-|FJ||J-F7||||L7||LJL-7||L|||||F7F7FJLJ-LJF--7LJ|F-7|
|7F-J-|-LFJL-------7L-JF7F---7LJL7F7F-JL7|LJL7||||FJ|F7FJLJ|FJ||||L7||||F7FJLJ||L7FJ||L7|L7|L7FJ|||||FJL7F7F7||L7LJLJ||LJLJF7F7F-JF-JF7LJFLJ
LLJJ|FJJFL---7F---7|F7FJ|L--7|JF7LJ|L7F-JL7F-J|LJ||FJ||L-7FJL7||||JLJ||LJ||F--J|FJ|FJ|FJ|FJ|-||-LJ||||F-J|||LJ|FJF7JFJL---7|LJLJF7L--JL--7J7
|.F7FL---LJF-J|F-7|LJ|L7||F-JL-JL--JFJL7F7||F7L-7||L-J|F-JL7FJ|||L-7FJL7FJ||F--JL7||FJ|FJL7|FJL-7FJ||||F7||L-7|L-J|FJF7F--JL-7F7||F------JJJ
-LFL7-J-.J7L7FJL7|L-7|7||FJF7F7F-7F7|F7|||||||F-JLJ.F-JL--7LJ.|||F7||F-J|FJ||F---J||L7|L-7||L7F-JL-J||LJ|||F-JL---JL7||L--7F7||LJLJF7F--7.||
|.|LL-J.F-FLLJF-JL--JL-J|L-J||||L|||LJ|||||||||FF---JF7F-7L7F7LJ|||||L7F||.LJL7F7FJL7|L7FJ||FJL---7FJL-7|||L-------7|||F-7LJLJL7F--JLJF-J7LJ
FL-77JL|JFL-|LL----7F7F7L---J|||FJ|L7FJ|||||||L7L---7|||FL7LJL-7LJLJL7L7|L-7F-J|||FFJL7||FJ|L-7F-7|L7F-J||L---7F7F7||||L7|F7F-7LJF--7FJ|F7-|
FJJ.L.FJ.FJ-LF-----J|||L-7F-7|||L7|FJ|FJ|LJLJL7L7F--J||L7.|F7F7L---7FJFJ|F7|L7FJ|L7L7FJ|||FJ7FJ|L||FJL-7LJF7F7LJ||||LJ|FJLJ|L7|F7L-7|L--JL77
|JF-JFFJ.L7-LL--7F-7|||F-J|F|||L7LJL7|L7|.F---JFJL7F7||FJFJ|LJ|F-7FJ|FJ|||LJJ||FJFJFJL7LJ|||FJFJFJ|L7F7L--JLJL-7|||L7FJL-7FJFJLJL7FJL-7F--J-
|L|.L|JLFF77F7F7||JLJ|||F7L7||L7|F--J|FJL7L7F7FJF-J|LJ|L7L7L-7LJFJL7||F-JL--7LJL7L7|F7L7FJ|FJFJLL7|-|||F7F-7F-7|LJ|FJ|F-7|L7|F7F7|L--7LJ|L7L
FF7J.||FFJL-JLJLJL7F-J|LJL7||L7LJL-7FJL7FJFJ|||7L-7L-7L7|FJF7L-7|F7|LJL7F-7FJF--JFJ|||FJ|FJ|FJFF-JL7|||||||LJ7|L-7||FJL7|L7|LJLJ||F-7L7FJ||.
F7|-J-7-L--7F7F7F-J|F7|F--J|L-JFF--J|F-JL7L7|||F--JF-JFLJL7||F-J|||L7F-J|JLJFJF7FJL||||FJ|FJL-7|F-7||||||L---7L--JLJL7FJ|FJL7F-7|||7|FJ7.JJJ
LJ-7|F-J.|.LJLJ|L-7||||L---JF7F-JF7FJ|F-7|FLJ||L7F7L---7-FJ||L-7||L-J|F7L--7L-J|L-7LJ||L7|L7F-J|L7LJLJ||L-7F7L-----7FJ|FJL-7||FJ|LJ-||LF77F|
|LL-7JJ|FFJJLJFL7FJLJLJF----JLJF-J|L7|L7LJF--JL7||L7F7FJFJFJL7FJ||-F-J|L7F-JLF-JF-JF7LJJ||FJL7J|FJF---JL7FJ||F-7F--JL7|L-7FJ||L7L7JFLJ-L|FFL
|.|-L7.F7-JF7LL-LJ.LF7FJF-7F7F7L-7L7|L7|F-JF--7||L7|||L7L7|F7LJ|LJFJF7|FJ|7F7L-7L--J|-F-J||F7L7|L7L---7FJL7||L7|L--7-LJF-J|FJL7L-JL|L|.F|F-7
|.J.LF-JJLFFJ7.FJ||.||L7L7LJ|||F-JFJ|J||L--JF-J||FJLJL-J||LJL---7JL7|LJL7|FJL--JF--7|FJF7|LJ|FJL-JF---JL-7LJ|FJ|F--J7F-JF7|L-7L7|LFJ||F7JJ.L
-7..FJ||.-7JL--J-F--JL-JFJF-J||L7FJFJFJ|F---JF7||L----7F-JF7F7F7|F7||F--J|L---7FJJFJ|L7|LJLFJ|F7F7L---7F7L-7|L7|L---7L-7||L7FL7|7|L77J|JLLJ|
F|7F7-7-7F-7.L7J|L---7F7|-L-7||FJ|FJFL7|L7F7FJ||L-----JL-7|LJ||LJ||LJL--7L7F--J|F7L-J7LJ|F7L7LJLJL7F--J|L7FJ|FJ|F7F-J|LLJL-J7-|L7-7LL---7JFL
LJ|LJFLJL77|F.JL7JF--J|||F--J||L7||F--JL7||LJ||L---7FF7F-JL-7||F-JL7LF--JFJL--7LJL---7F--JL-JF7F7FJ|F7FJFJL7|L7|||||L7J|.JLJ..L-J.JJ7JF|L-7.
||7J-||7F7-|JFJ-7JL7F7|LJL7F-J|FJ||L7F7FJ||F--JF-7FJFJLJF-7FJLJ|F-7L7L7F7L7F--JF7F---JL--7F7FJLJLJFJ|||7L7FJL-JLJ|L7|L7|-|FL-7FJ--.L7.777FJ-
F-7FFJF-J.|L7|JJ|F7LJ|L--7||F-JL7||J|||L7||L7F7L7|L7L7F7|FJL---JL7|FJL||L7|L-7FJ|L-7F7FF7LJ|L----7L-J||F-JL-----7|FJ77FL.J7|LFL-7.FFLJF--7.|
L.||J-|LF.L7FJ..7.FJL|F7FJLJ|F7FJLJFJ|L7|LJFJ||FJ|FJ|LJ||L-7F--7FJLJ7JLJJ||.FJL7L-7||L-JL--JF---7|F77LJ|F7F7F-7FJ|L7J77JFJ-J.LLLJLFJ.LJF|||7
F-7JJ7L7|--JJF-LJ.|L-|||L7F-J|LJ7F-JFJFJL7FJFJ||FJL---7LJF7|L-7|L-7F77F7FJ|FJF7|F7LJL--7F7F7L--7|LJL--7LJ|||L7LJLL-JL-JFJJ.LFJ..|L|FJ..77--7
|LF7.LJ|||FJ|L7|LL7-FLJ|FJ|F7|F--JF7|-|F-JL7|L||L7F-7FJF-JLJF7|L7FJ|L-JLJFJL7||LJL-7F--J||||F7FJ|F-7F7L7FJ|L7|-LF|.|-L-7F77.F77-FF--J-|L7J-J
L7JLF.F-LJ|F|F|L-L--J-L|||LJLJL7F-J|L7||F--J|FJ|.|L7|L7|F7F7|LJ|||JL7F7F7|F-J|L7F-7||F-7||||||||||FJ|L-JL7L7LJ.FL7JJ---L7JF-JJ7J.|.JLLF7|--7
.-7J.F7.|LLJL7|..-JJ|7|LJ7LLJ.F||F-JFJLJ|F-7|L7|FJFJ|FJLJ|||L--7||F-J|LJ|||F7L7|L7LJ||FJ|||||||FJ|L7L---7L-JJJ7F||F-.JJ|F7J.LFF7.LL...LL--J7
7LF-7LL7|7|LFLL.F|--L.|.LJ777FLLJ|F7L-7L|L7|L7LJL7L7|L-7FJ||F--JLJ|F7|F-J|||L7|L7L7LLJ|FJ||||||L7|-L-7F7L-7||F|J7|L-J.FL|JF7-7JL777L-|||JLFJ
|.|7.FJ-L-F-7L|JJ.7||7|F7L|-7J.|LLJ|F-J-L7|L-JLF7|FJ|F-JL7||L-7-FLLJLJL7FJ||FJ|FJFJF--JL7||||||FJL--7||L7FJ7JJJ|FL..J-F.|LLF-LJLJJ7.L||-77|J
.F|7F77F|FJ--7J|.LFJ-JF-7-7F7.FJJL-LJF|LLLJFLFFJLJ|FJL--7LJ|F7L7--LLF--JL7|||FJL7|JL-7F7|||||LJ|F7F-JLJLLJJ.|.7L||FFJ7L-J|FJ.L-FL-77F|.LF-J7
-L|LLL77.|JF|L-F-.LJ|||L|..--J-7LJ-|-|||7.|7|LL7F-J|F7F7|-FJ|L7||LL.L-7F-J|||L7FJL-7-LJ||LJ||F-J||L77LJ.|L-7|F|.|77L.FLJ.|.F7L-7.-7F-J.L7J.7
|.|JLFL77|-J7.F|.FF-7-LJL77..|F777J.FL7-J-|.|7||L7FJ|||LJ7L7L7LJ77LF7|||.FJ||FJL7F7L--7LJF-J|L-7||FJ7777|.FL|.F7|LJ-L-7F-|.--7F77..|7.||.|7|
77LJ-J|.L7.L|-F7F7|J|7.F7J7-J-L-.-.7-F-.|LL7L7FJFJL7|LJJL|-L-JJ.L-FJL-J|FJFJ||F-J||F--J7LL-7|LL||||LF7J-F7LL-7JF|J|LL7LJ-7JF|-JJ|.FJ|.LF--J|
F7.|7.LL.JJFLJ.|7LLF-J-||L.F.FL.J|LJJF.F.F-||FL7L7LLJF|F-JF|LFL--LL-7F7||FJJ||L-7||L77LJL||LJ-J||LJ7L-J|LJ-L|7-JJF7.LJJ7F-7F7-|L|-|FJ7-L7L7|
|LFFFJJL|7-J...7|F7LJ7.|7.JFF7.F|7|F-JF.F--LJ7LL7|-L.F7JLLJ7.F-J.||FJ|||LJ||LJ|LLJL-J-.|L--..|LLJ|J.F|LF7L----7L--77.|F7-.-J|F|.LF7-L--JJFJ7
J-FJ--F7J|-J-F-.|.|FFJ7JF.FL|-|JF7-|J7.-J|J|LL-LLJ||FFJ.F|LF7F-LF--L7|LJJFJJ.LL-J.LJ||F7FL|..|7.LLF.7--.F.F|.J77|F-J.|J|-F|F|---F7.FF..L.F7|
L.LL|77J-|.L7LJ-7-J|JLJ.J-|-LJ.-LL-L.L..L..F-JJLLJ--J|-L-7.L-L7.-L-LLJLJLFJ|-JJ-J-L-L7-LJ-LJ-L7J-LL-L--J..LJ-J.7--JJ-F----J-J.J.LL7JJ--J7LL.

View File

@ -0,0 +1,5 @@
..F7.
.FJ|.
SJ.L7
|F--J
LJ...

View File

@ -0,0 +1,5 @@
..F7.
.FJ|.
SJ.L7
|F--J
LJ...

View File

@ -17,7 +17,7 @@ async fn main() -> Result<(), Box<dyn Error>> {
Box::new(day07::Day07 {}), Box::new(day07::Day07 {}),
Box::new(day08::Day08 {}), Box::new(day08::Day08 {}),
Box::new(day09::Day09 {}), Box::new(day09::Day09 {}),
// Box::new(day10::Day10 {}), Box::new(day10::Day10 {}),
// Box::new(day11::Day11 {}), // Box::new(day11::Day11 {}),
// Box::new(day12::Day12 {}), // Box::new(day12::Day12 {}),
// Box::new(day13::Day13 {}), // Box::new(day13::Day13 {}),

View File

@ -1,13 +1,38 @@
use super::Solution; use super::Solution;
use hashbrown::HashSet;
pub struct Day10 {} pub struct Day10 {}
impl Solution for Day10 { impl Solution for Day10 {
fn part1( fn part1(
&self, &self,
_input: &mut Vec<String>, input: &mut Vec<String>,
) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> { ) -> Result<Box<dyn std::fmt::Display + Sync>, Box<dyn std::error::Error>> {
Ok(Box::new("Ready")) let mut start = (0, 0);
let mut graph = input
.iter()
.enumerate()
.map(|(r, line)| {
line.bytes()
.enumerate()
.map(|(c, tile)| {
if tile == b'S' {
start = (r, c);
}
self.connections(tile)
})
.collect::<Vec<_>>()
})
.collect::<Vec<_>>();
let pipe_loop = "J|-L7F"
.bytes()
.find_map(|start_tile| {
graph[start.0][start.1] = self.connections(start_tile);
self.find_loop(&graph, start)
})
.unwrap();
Ok(Box::new(pipe_loop.len() / 2))
} }
fn part2( fn part2(
@ -22,7 +47,58 @@ impl Solution for Day10 {
} }
} }
impl Day10 {} impl Day10 {
fn find_loop(
&self,
graph: &[Vec<[bool; 4]>],
start: (usize, usize),
) -> Option<HashSet<(usize, usize)>> {
let (mut r, mut c) = start;
let mut d = graph[r][c].iter().position(|&d| d).unwrap();
let mut seen = HashSet::new();
loop {
if !seen.insert((r, c)) {
break Some(seen);
}
let came_from = match d {
0 => {
r -= 1;
2
}
1 => {
c += 1;
3
}
2 => {
r += 1;
0
}
3 => {
c -= 1;
1
}
_ => unreachable!(),
};
if !graph[r][c][came_from] {
break None;
}
d = (0..4).find(|&i| i != came_from && graph[r][c][i]).unwrap();
}
}
fn connections(&self, tile: u8) -> [bool; 4] {
match tile {
// [ up, right, down, left]
b'|' => [true, false, true, false],
b'-' => [false, true, false, true],
b'L' => [true, true, false, false],
b'J' => [true, false, false, true],
b'7' => [false, false, true, true],
b'F' => [false, true, true, false],
_ => [false, false, false, false],
}
}
}
/// Test from puzzle input /// Test from puzzle input
#[cfg(test)] #[cfg(test)]