From 8ba7bc1e18765026a395851f84bd1e81cc710ebf Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 9 Dec 2023 19:13:50 +0100 Subject: [PATCH 01/14] update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index e41d389..4146c54 100644 --- a/README.md +++ b/README.md @@ -12,6 +12,8 @@ using c# with .NET 7 - day05 :star: - day06 :star: :star: - day07 :star: +- day08 :star: :star: +- day09 :star: :star: # overview 2022 - day01 :star: :star: From d479acc1f1b5422f4530dc75a7f9a34815e91f5a Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sun, 10 Dec 2023 16:45:12 +0100 Subject: [PATCH 02/14] solved day10 part 1 --- 2023/Day10/input | 140 +++++++++++++++++++ 2023/Day10/solution.cs | 308 +++++++++++++++++++++++++++++++++++++++++ 2023/Day10/testone | 5 + 2023/Day10/testtwo | 5 + Program.cs | 2 +- README.md | 1 + 6 files changed, 460 insertions(+), 1 deletion(-) create mode 100644 2023/Day10/input create mode 100644 2023/Day10/solution.cs create mode 100644 2023/Day10/testone create mode 100644 2023/Day10/testtwo diff --git a/2023/Day10/input b/2023/Day10/input new file mode 100644 index 0000000..9e63306 --- /dev/null +++ b/2023/Day10/input @@ -0,0 +1,140 @@ +FL7L-F7FJF-7FFF7FF|-F-F|JF--|.|-J-7.F--FJF|-7.F.-FF7.-F7-L-|FF-F-|-7.-F7-FF-|7J-J.F-J7.FF7..L7F|7F-7JF-L7F.|--FL7F---|.FFF-L7FL--L777L-.FF7F +7FFJ.FLJF-.FJ||F-FJJJJ||F|-F7FLJ.7-F7J||-FFF7.L7-FJL7.F|||-J7JJ.LL77F|LF7LJJ||L7--|-7F-F|F-7JLJ.LJL--F-|LLJ|7J|L|-|7|FF|7|J.LJFFJ7.|-J.F.|L| +L-77.L77JF-JF7.||||.F7FFF7-|-7L.L--|.FF.|F-JL77.|L-7|F7|-|7F|-.-7L-F7--JJ|.||L7L-.|JF|.|JL-77F-|J-L|JL--FLJLJ7JF|7||7.FJL|7--L|---7|.|FF-J-| +LF7--FFJFLJLFL|J|.77---J-F-|F7-7.|7.L|J--L--7L7F7F7|LJL7-77-L.--J7LL-7.|LF-J--.F-J7-F--L7|-F7LFJ--77-7.77LJJ.7FL.J-JFJJ|F|J|LF|7||F|7FFJL|LJ +L|J7.-JJ-.|F|FJJJL||FL77LJ.|FJ7|FL7F.L7JJFLFJFJ|LJLJF--J-F7...FF||.FJL.-7L|.FL7JJLL-JJ.|||F||.L7|JFJ.|FJ7|--7JJ-|7LLF-FJ-F.--FJF|-LJFLJ-J.FJ +FJF-L-|.LF-F||J-7.-7|FF7-77J-7|LLJ|JJLJ--7-L7|JL-7F-JF-7.||7F-JJF7.J7.||L.--JJ.---77L7--777||7FLJFJJ-|7||F-L|-J7LJ-FJL|J.|.F77.L|F|JFJ|7.FF7 +|-FJ.-F7.F..L|LF|7---LL77|L7FJJ.L.|LF-JFF|-FJ|F--JL-7|FJFJ|-7JLL||F7FL.JLLJ..F.L--LF7L.LF-7|L77J.FL7.FFLF--FF.L|7|.J|FJFL|-|7-7|F|7-J..777|F +F77.F|L77LFF-|LJ-L7|-LJ|F|.--7|.L--F-|7-L7.L7|L--7F-J|L-JFJFJJ-|JFF-7---FJ..-77||7.F7||-L7LJFJ77F7JLFF7L|7|||L7||7-J-|7-.|.L|.LJ.|LJJ.FLL-L7 +|.|--F-J-7L7-FF|---7-|.J7JF.LFL-J.||LF-J.F--J|LF-JL7FJF7FJ77|F7--FL7|-L7-77F7F---7-||F7F7L-7|JLF77-L|||F-7-|JLJJLL7FF...JL-J.77|FJ.|.77|L-|J +-F7FLJ|LF7.|.L-LJ.LJ..F|..F.L-|.F-J77|F-7L--7L7L--7LJFJ|L7F777J|.F-JL7LJ---L7L--7|FJ||||L7FJL7.|L7-F7|||FJ7L|J.L|LJ7JF77L.|FLJ7-7FF7|77|.F-7 +J.-77LF7||F77FJ-7.|L7F-7-.F7.|F7JJ-F7J7LF7F7L7L7F7|F7L7L-J||F7-JFL7F7|--7L|LF---J||FJ||L7|L7FJF|FJF|LJLJL-7L7|F7|FLL7LLJ77LJ7|.FJ-J||L7J.JF- +|.LL-.LLL-|L-7|---L-7.LL.FL7.FJ||.F-7|F7||||JL7|||||L-JFF-J|||.F7FJ|LJ7F7-JLL7F-7|||FJL7|L7|L--JL-7L-7F---JF|7LF-LJFL-J-LLJF---FJ.F|LJJ.JJLJ +L||L|7.L7LL77LJ.F|J7|7||7|7J|.|--FL7L-JLJ|||F7|||LJ|F7F7L7FJ||FJ|L7L7F7|L7J-FLJFJLJLJF-J|FJ|F--7F-JF-JL--7L--L7JFJ.L|L|FL7.JJ-||J-7-|JFJ.FF| +|JF7LL-.|7-|77.-F|LF--FJ-JF7F77FFLJL----7LJLJLJ|L7FJ||||FJL7|LJFJ-|FJ|||FJ|--LFJF---7|F7|L7|L7-LJF7|F--7FJ.JJ7F7|.J-J7-7-F-|..FJF-.J.LJJ-F7. +F7.|-|.FF7L|.L7||..|.|.JFF|LJ|F7J-F-7F7JL-----7L-JL-J||||F-JL-7L7FJ|FJ|||F77.LL-JF--JLJLJFJL7L-7-||LJF7||F7|.F||77|.|L7L-L.F-F-LLJ7.FF-|.L-- +L7FF-FF-LJ.7-FJJ|JFL-L7FJLL-7|||F7L7LJL-7F77F7L--7F--J||||F7F7L7||FJ|FJ|||||F7F77L---7F--JF7|F-JFJ|F7|||LJL77F||F7J--.|F|LF|.L-.|FF--J7LF-|| +.J-J.|JLF|F|7F|.JLJ|.F-7|FF-J||LJ|JL-7F7LJ|FJ|F--JL7|FJ||||||L7|LJ|FJ|FJ||L7|LJL-7F7FJL7JFJLJL-7|FJ|||||F--JF7||||JFL-J-J.-7-|F-|-|7L-F.J--J +FJL-7|FF-FFL--7-LFJ7-J.---|F7LJF-JF-7LJL-7|L7LJF7F7L7L7|||||L7|L7FJL7||FJ|FJL---7LJ|L-7L7L---7FJ||FJ||||L-7FJ||||L7F7LF|.|-LL|-||-LFF-JF.F|7 +|7LF77-J-L-.|L||.L7|-|F|-LLJL-7L77L7|F-7L|||L-7|||L7L-J||||L-JL-JL-7|||L7|L-7LF7L-7L--JFJF7|FJL7|||FJ|||F-JL7||||FJ|L--777J.F---J7L|J7-7-FJ7 +LFFL|J|..F.FJ|F-7.LJFF|7.LF7F7|FJF7|||FJFJL--7LJLJ.|F--J|||F--7F7F7||LJFJ|F-JFJ|F7|F--7L7|L-JF-J|||L7||||.F7|||LJL-JF--J7.|FJ.FL7L-7-77||J.J +|F7-JFJ-FLFJ.FJL-7J--LJ|FF|LJLJL7|LJ||L7L---7|.F7-FJL7F7|||L7FJ|LJLJL-7|-||F7L7|||LJF7L7|L--7|F7||L7||||L7|||||F---7|F7F-777.77L|J7L-J-FF--J +LJ|7.FJ.|.F7F|.77|J.F|J|--|F---7LJF-J|FJ7F7FJ|FJ|FJF7LJ||||FJL7|F7|F7FJL7|LJ|FJ||L--JL-JL7F7|||||L-JLJLJFJ||||||LF7LJ|LJFJL7-7JL|LFJF|LFJ7|7 +F-|JF|JFLJJ-77.L|J|F|-F7FFLJF7LL-7L7J|L7FJ|L7|L7|L-J|F7||LJL77LJ||FJ|L7FJ|F-JL7|L-------7LJLJLJLJF------JF|LJLJL-J|F7|F7L-7JF|7.7JF-FJ||F-JL +F-J7L.F|J7.|L-7F-J-7JFJ|F7F-J|F-7L7L7|FJL7L-JL7||F--J|LJL7F7L-7F|||FJFJL7|L7F7||F-7F-7F7L---7F---JF7F-7F-7|F--7F--J||||L--J|FJF-7-J-|JLJJ-7J +L7L-7.J7--.|--77F7FL-L7|||L-7LJFJ|L7LJ|JJL---7|||L--7L7F7||L--JFJ|||JL-7LJFJ|LJ|L7|L7|||F-7-|L---7||L7||FJ||F7LJFF7||||F--7FJ-|FJ|J.|.L|J.|7 +L-JF--FFJ.F|7FLLJJ|JLF|LJ|F7L-7|F-7L-7L7F7F7FJ||L7-FJFJ|LJL--7F|FJ|L7|FJF-J.L-7L7|L-JLJ||FJFJF---J||FJLJL7|LJL7F7|||||||F-J--||L-7LL77.F--FJ +-JJ|J.|J7-F-JJL||-JF-7L7FJ|L7FJ||FJF7|FJ||||L7LJFJFJFJFJF---7|FJL7|FJFJFJF7FF7L7|L--7F7LJL7L7L-7F-J|L7F7FJ|F--J|||||LJLJ|F7J.FJF-JF||7LL-LJ| +....-.|F|.LJ.FFFF7.|--FJL7|FJL7LJL7||||FJ|||7L-7L7L7|F|FJF-7LJL-7|||FJFJFJL7||FJ|F-7LJL--7|FJF-JL-7L7LJ||FJL-7FJ||||F7F-J||.FJFJJ-7L-J||.|L- +-F77LFJFJ-7|F|LFJ|-F7.L-7|||F7L--7LJ|||L7LJL7F7L7L7|L7|L7L7L77F7||||L7L7L7FJ|||FJ|FJF7F7FJLJFJ7F7|L7|F7||L7F-J|FJ|LJ|LJF7|L7|FJ7FF77J|FFF.|. +|LL-F|.FJ-7L|J-L7|J||F--J||||L7F7L-7||||L-7FJ|L-JFJ|FJ|FJ.|FJFJ||LJL-JFJFJL-J||L7|L7|LJ|L-7FJ.FJL7FJ||||L7||F-JL-JF7L7-|||FJ||L|||L7LJ-7J77- +JJL7FL.L..|.7FF7||FJ|L7F7|||L7||L7FJ||L7F-JL7L--7|FJL-JL-7||FJFJL-7F--JFL-7F-J|FJL7|L-7L7-|L-7L-7|L7||||FJ|||F--7FJL-JFJ|||FJL--7JJLFL-JL-.. +..FLJL|L|J|-JFJLJ|L7|JLJ|||||||L7|L7|L7|L--7L-7FJ||F7F---J|||FJF77|L7F7F7FJL7-|L7FJ|F7L7L-JF-JF-JL7||||||FJLJL-7LJF7F7L7||LJF---JF-JL||.F|L. +F-L|7.-7|LJLFL--7L-JL7F7|LJ|FJ|FJ|FJL7||-F-JF-JL7|||LJF7F-J||L7||FJFJ||||L-7L7|FJ|FJ||FL--7|F7|F7FJ||||||L7F---JF-JLJL7|||F-J7LJJL77FLF.LLL| +.|-|-7L--L.FFF--JF--7|||L-7|L7|L7|L-7LJL7L-7L7F7|LJ|F7||L-7||FJ|||FJL||||F-JFJ|L7|L7||F7F7|LJ|||||FJ||||L-JL--7|L7F---J|LJL--7-JL|-FF..7L|L| +-LFJ.7|L-..FFL---JF-J|||F-JL7|L7||F7L7F-JF7|FJ||L7FJ||||F7||||-||||F7||||L7FJJL7||FJ||||||L7FJLJ||L7||||F-----JF7||F7F-JF7F-7|77FFF-77-L-7-7 +L||LJJ7.L-7JJF----JF7LJ||F7FJL7||LJL-JL7FJ||L7|L7||FJLJ||||||L7|||||LJ||L7|L7F7||||FJ|||||FJL-7FJL7|||LJL-----7|||||||F-JLJ.LJF7F7|FJ7JFL|F| +.LJ|7|F-JJ||-L-----JL7FJLJ|||FJ|L----7-||FJL7|L7|||L-7FJ|LJ|L7|||||L7||L7|L7||LJ||||F||LJ||F7FJ|F7||||F------7||||||LJL-7F7F77|||||L77||FFLJ +F7-|J-7|J.F7.L-F-----J|F7FJL-JFJ|F7F7L7|||F7||FJLJL7FJL7|F7|FJ|||||FJFJFJ|FJ||-FJ|||FJL-7|LJ||FJ|LJ||||F---7LLJ|||||F---J||||FJLJ|L7|F7|LFJ. +FJF|JJLL--JF7LFJF7F7F7LJLJF7F7L--JLJL7|||LJLJLJF---JL7J|LJ|LJFJ|||LJFJFJFJL7|L7|FJ||L7F7||F7||L7|F7|LJLJF--JF-7|LJLJL-7F7|||||F--JFJLJ|-JL7F +.F-J|F.L-LFJL7L-JLJLJL---7|||L7F-7F-7LJ|L-----7L7F7F7|FJF7L-7L-J|L-7L7|FJF7||FJ||FJ|FJ|||||LJ|FJLJLJFF-7L7F7L7LJF-7F--J|LJLJLJL7F7|F--JF7-F7 +F|LFF.7.7|L-7|LF--7F7F7F-J|LJFJ|FJ|FJF7L----7FJFJ|LJ||L7||F-JF--JF7L7|||FJ|||L7LJ|FJL-J|||L7FJ|F----7L7|FLJL7|F-J|LJF7FL7F-----J|LJL7F77F7-- +-J-JJ7|7LJJL|L7L-7LJLJLJF7L7FJFJL-JL-JL----7LJJ|FJF-J|-|||L-7L-7FJ|FJ||||FJ|L7|F-JL---7|||FJL7|L7F-7L-JL---7LJL-----JL7FJL------JF--J|L-J|7| +|J..LJF|FJLFJFJF7L---7F-J|FJL7|F-----7F-7F7L--7||FJF7|FJ||F-J7FJ|FJL7||LJ|FJFJ|L7F7F7FJLJ|L7FJL7||FJF7F--7.L---7F7F7F-J|F-----7F-JF7FJF--JF7 +|-FF.FLJJ|-L7L-JL-7F7LJF-J|F7LJ|F7F7.LJLLJ|F--J||L-JLJL7|LJ-F-JFJL7FJ|L-7LJFJFJJ||||LJF-7|FJL7FJLJL7|LJF-JF-7F7LJ||LJF7||-F--7LJF7||L7L--7|| +-7FJ-J.|L77.L----7||L--JF-J||F7LJLJL----7FJL--7|L7F--7F|L--7L-7|F-JL7|F7L7.L7L-7LJ|L-7L7LJL-7|L7F-7LJ7FJF7L7||L-7LJF-JLJL-JF7L7||||L-JF-7LJ| +FLJJL7--F--------J|L----JF-JLJ|-F-----7FJL7F7FJL-JL-7L-JF--JF-J||F7FJ||L-JF7|F-JF-JF-JFJF7F-J|FJL7L--7L-JL-JLJF-JF7L7F----7|L7L-JLJF7FJFJF-J +FL-...|.L7F7F7F7F7|F-----JF7F7L7L--7F7||F7LJ|L--7F--JF-7L-7FJF7|||||FJ|7F7|LJL77L-7L7FJFJ|L-7||F7|F-7|F7F-----JF-JL-JL---7LJFJF7F7FJLJFJFJ|| +|-FFF-7-LLJLJLJLJ||L------J||L7L7F7LJ||LJ|F7L7F7||F7FJFJF7|L7|||||||L7|FJLJF-7L--7|FJL7|JL7FJ||||LJFJ|||L------JF--7F7F-7L-7|FJLJ|L--7L7L7F| +J-|-J|.LJ7|LL|F--JL-------7LJ-L7LJL--JL--J|L7LJLJ||||FJFJ||FJ|||||||FJ|L7F7L7|F--J||F7||F-J|FJ|||F7L7|||FF--7F-7L-7LJLJLL7FJ||F--JF-7L7L-J-7 +|-J|FFL---J-F-JF---------7|F--7L7F-7F7|F--JFJF-7-LJLJ|FJLLJ|FJ||||LJL7|L||L7||L--7LJ|LJ|L7FJ|FJ|LJL-JLJL-JF7LJL|F7L-----7|L7||L7F7L7L7L-7JL- +.LJF7LL-J7||L-7|-F-------J|L-7|JLJFLJL-JF-7L-JFJF7F--JL---7||FJ||||F7||FJ|FJ|L7F-JF-JF7L7||FJ|.L7F7F------JL--7LJL---7F-J|FJLJ-LJ|FJ7L-7|7LL +|7JFL77.||-J.L||FJF------7|F-J|F-------7L7|F--JFJLJF-7F7F-JLJL7||L7||||L7||FJFJ|F-JF7||FJLJL-JF-J|LJF---7F-7F7L-7F--7LJF-JL7F7FF7|L--7.LJJ7| +|J-LL.7--||J-FLJL-JF----7||L-7|L----7F7|FJ|L7F7L7F7|7|||L--7F-J||FJ||LJFJ||L7L-JL--J|||L7F7F-7L-7|F-JF-7LJ.LJL-7LJF7|F7L-7FJ||FJLJF7FJF|LFL- +LFF7J-LJFJJ-F7F77F7L---7LJL--JL-7F7FJ||LJFL7LJL7LJ|L7||L7F-JL-7||L-JL7FJFJL7L7F-----J||FJ|LJFJF7LJL-7|FJF77F--7L7FJLJ|L-7LJFJ|L7F7|LJ7FJ.7J7 +||LJJ7J7||L-|LJL-J|F7F7L---7F7F7LJLJ||L--7-L7F-J.FJFJ|L7|L7JF7||L7F7FJ|FJ|FJFJ|F7F-7FJ|L7|F7L-JL7F--J|L-JL-JF-J||L---JF-JF7|FJ7LJ|L-7-|JF|FJ +F|-JFFFFJ7|.L----7||LJL--7LLJLJL-7F--JF--JF7LJF-7|FJFJFJ|FJFJLJ|F||LJFJ|F7L7L7||LJJLJ|L-JLJL-7F7LJF7FJ7F--7FJ.F7|F7F-7|JFJ|||F--7|F7L7--J.|J +LLJFJ--L-J-FJF7F-JLJF7F-7L7F-----J|F--JFF-JL--JFJLJJL-J.|L7L7F-JFJL-7L7LJ|F|FJ||.F7-F77F7F7F7LJ|F7|LJF7L-7|L--J|LJ||FJL7|FJ|LJF-J||L7|JJ|-J| +LL7LJ|L-7|||FJLJF---JLJ-L7LJF7F7F7|L---7|F--7F-JF-7F7F-7|FJ-LJF-JF7FJFJF7|FJ||||FJL-JL-JLJ|||F7LJLJF7|L--JL---7L-7|||F7LJL-JF7L-7LJL||-F|L-7 +FL7JL7---7F-JF--JF77F7F--JF7|LJLJLJF7F7LJL7LLJF7L7||||FJLJF7F7L-7|||FL7|LJL7L7||L7F7F7F7F7LJLJL7F--JLJF-----7|L--JLJLJL7F7F-JL--JJ|JLJ-FL-L7 +77LF-FF-L-L--JF--JL-JLJF7FJLJF7F7F-JLJL---JF7FJ|FJLJLJL-77|||L--J||L-7|L-7FJFJLJFJ|||LJ|||F-7F7LJF----JF7F-7L--------7F|||L------7JJFLF7|JLF +|L-77.J.L7JF-7L-----7F-JLJF7FJLJLJF--7F-7F7|||FJL--7F-7FJFJ|L--7FJ|F7|L--JL7|J|.|FJ||F-J||L7LJ|F7|F----JLJJL-----7F--JFJ||F-----7|.FFFFJ|J-F +LJL|77-FFF7L7|F7F7F7|L7F--JLJF--7FJF-J|FJ|LJLJ|LF-7|L7LJL|FJLF-J|FJ||L7J7F-J|F-7LJ-LJL--JL-JF7|||||F--7F--------7|L--7L7||L----7LJ.LL.JFJ-FJ +L|--.|F-FJL-JLJLJ|||L7|L-7F7FJF-JL7L--JL-JF7F7L7L7||FJF-7||.FJF7|L7|L-J|FL-7||FJF----7F-----J|LJLJLJF7||F-------JL-7FJJLJL7F7F-JL|-FFJ.|J.F7 +-|J-7|J-L-7F7F7F7LJL7LJF7LJLJ.L---JF-7F---JLJL7|FJLJL7L7||L7|FJ|L7||JFFF..FJLJ|JL---7|L-----7L-7F7F7||LJL---------7|L---7J|||L-7F7|FFJ7J.-FL +|L77L|.7FLLJ||||L7F-JF7|L---7FF7JF-JFLJF7F---7LJ|F--7|FJLJFJLJ.L7|||J|7LF-L7F7|J.LLFJ|F7F7F7L-7LJLJLJL----7F------J|F7F7L7|||F7LJ|7L-JL-7||| +JJ||.LF|7.F7LJLJFJL-7||L7F7FJFJL-JF7F7FJLJF--JF7|L-7LJ|F7FJF7F-7||LJ-JLF--LLJLJ77-FL7||LJ|||F7|F----7F---7|L------7LJLJ|FJ||LJ|F7|J7L7-L.FFL +LFJFF---F-J|J.F7L--7|||-LJ||FJF---JLJLJF-7|JF-JLJF-JF-J|LJFJLJFJ||J|L--7.|7|.FLJ--|F|LJF7LJLJ|LJF--7LJF--JL--7F7F7L--7LLJFJL7JLJLJ77LJ7L-F|. +L77LL7||L-7L7FJL---JLJL---JLJFJF--7F7F-JFJL-JF7F-JF7|F-JF7|F--JLLJF-77.L.7-.L7LLJ-F7L--JL-7F7|F7L-7L-7L-----7LJLJL7F7L--7L--JF777|.J77F-FFF7 +FJF7LL--L-L7LJF7F-----7F7F7F7|JL-7LJ|L-7|F7F7||L--JLJL7-|LJL---7LJ7L|77.F|JFLJ7-FFJ|F7-F--J||LJL-7L7FJ-F7F-7L-7F-7||L--7|F7F7|L--7JF7JL7FLJF +|-7J7FLF77LL7FJLJF----J|LJ||||F--JF7L--JLJ||||L7F--7F7L7|F----7L7FJJLL7-FF.7.|7FLL7LJL7L---JL---7L-JL-7|LJ-L-7LJFJ|L7F7LJ|||||F--J||JJJLFJ7| +7F|FLJ7FF7F-J||F-JF-7F7L7LLJLJL--7|L-----7|||L7|L-7LJL7LJL---7L7L77F77|7F-FJ7|F|.LL--7L-7|F-----JF7F-7LJF7LF7L--J-L-J||F7||||||J||-FJ7.F|-J. +--JFJFLF|LJF7|FJF7L7LJL-JF7F7F7F7||F--7F7|LJL-J|F-J-F-JF-7F-7L7L7|-L77|LF.|--JLJFJJF-JF7L7L---7F-J|L7L7FJL-JL7F---7F-JLJLJLJLJL7F7F77-|-|J.| +L|--.|.FJF-JLJL-JL-JJF7-FJLJLJLJ|LJL-7LJLJF7F-7|L--7|F7|-|L7L-JLLJ-JF--J|F-7JFLF7JFL--JL7L-7F7LJF7L-J-LJF----J|F-7|L7F---7F7F-7LJLJL7.LF7.F| +.7FJ.J.L-J|-F-----77FJL7L----7F7L-7F7L--7L|||FJL--7|||||FJFJJ.F77L|JJ.|FLJFLF7.JJF------JF7LJL-7||.F7FF7L-----JL7LJFJL--7LJLJ|L7F-7FJ7F7JFJ. +F-JFJJF|-L|.L--7F7|FJF7L-7|F-J||F7LJL--7L7|||L7F77LJ||||L-J.F-JL7L|-.7JLL-JJ.J7||L--7F7F7|L7F-7LJL-JL-JL-------7L--JF7F7|F7LF7|LJ7LJF-J|-|J7 +|7L|F|-|.LLFF-7LJ||L-J|F7L7|F7|LJL----7L-J||L7LJL--7||||F7F7L-7FJF7J-|7.L---..F7LJLFJ|LJ||FJ|FJF--7F----------7L--7FJLJ|||L7|L7F7F7FJF-J7LF| +7J-FJ7.J7LLFL7L--JL---J|L7LJ|||F------JJF-JL-JF7F--JLJLJ|LJL7-|||||F-|-F7F7-77FLJLLL7|F7||L7|L7|F-J|F--------7L7F7|L--7LJ|FJL7LJLJ||FJJFJ7|7 +L-F7JJ7.7-FFJL7F-7F7F7FJ|L7FJLJL-7F--7FFJF7F--J||F7F7-F7|F--JFJL-J|7J|F777JF-77JJFLLLJ||LJ-LJ7LJL--JL----7F-7L-J||L---JF7||F7|F---J|L77|J|L| +||||L-J|LF-|-LLJ7LJLJ|L--7LJF7F7FLJF7L7L7|LJF7.LJ|LJL-JLJL7F7|F7F7L-7-LF7FF7|F77FJ.||FJL-----7FF--7LF----J|FJF--J|F7F--JLJLJLJL----JFJFL.JJ| +J-|F-L-F7L-|FF7F7F---JF--JF7||||F7FJL7L-JL--JL--7|F7F----7|||||LJ|F-JFL|L7||FJL7LJFF7L-----7FJFJF7L7L-----JL-JF-7||LJF--7F7F7F--7F-7|F7--.F. +.LLJLLFJ-J-FFJLJLJF-7FJLF-J|||||||L-7L--7F7F7F-7LJ|LJF--7LJ|LJL-7LJF77JL7||||F-J7JFJL-7F---JL7L-JL7|FF7LF----7L7|LJF7L-7|||||L-7LJ7LJ-|7..F7 +|.|7F-JJ.J--L7F7F-JFJ|F-JF7LJLJLJ|F-JF7LLJLJ||JL--JF7L7FJF7|F---J.FJ|F77|LJ|||JF7JL--7|L7F7F7L----JL-JL7L---7L7||F7|L7FJLJ|||F7|F--77|L--7L. +L-JL|7777FF||LJLJF7L7||F7|L-----7|L--J|F---7|L-----JL-JL7|LJL-7F7FL7||L7|F7|||FJL7F--JL7LJLJL7F7F-7F7F7L----JJLJLJ|L7|L-7FJ||||||F-J7JF-F-77 +FJFLJL|7-L-F-----JL7LJLJ||F-----JL----J|F--JL--7F--7F7F7LJF-7FJ||F-J||FJLJ|||LJF7|L--7FJF---7LJLJFJ||||F-7F7.F---7|FJL--JL-JLJLJ||F7J.FL--77 +J7|7|JLJ7JLL------7L7F77LJL----7F------JL----7F||F7LJLJL7FJ|LJFJ|L-7|||F7FJ||F-JLJ7F7|L7L--7|-F--JFJLJLJFLJL7|F--J|L---7F7F7F7|FJLJL-7JJ-F|| +FF|-L.|7L7|L7|FF7L|FJ||F7F-7F-7||F---7F----7FJFJLJL----7|L-7F7|FJF7||||||L7||L7F7F7||L7L7F7|L-JF-7|F--7F7F7FJ||F7||F---J|||LJL-JF7F7FJJ.-F77 +F7F-L7L-7JF--LFJL-JL-J|||L7|L7|LJL--7|L---7|L7|F7F7F7F-JL--J|LJ|FJ||LJ|||FJ|L7||LJ||L7L7LJ|L--7|FJ|L-7||LJLJJ|||L7LJF-7FJLJF7F7FJ||LJJF|.L|7 +J7L77F|L|.JJF|L------7|||FJ|FJL-----JL---7|L-J||||||LJF7|F-7|F-JL7|L7FJ|LJFJ.|LJF-JL7|7L-7L7F7LJL-JF-JLJF7|F-JLJFJF7|FJL7F-JLJLJLLJJ..FJL.L7 +L|.LLJF-JF|7FF--7F7F7||||L7|L7F7F-------7|L--7||||LJF7|L7|FJ||F-7|L-JL7L-7|F7L-7|-F-J|F7FJFJ|L7F--7L--7FJL-JF7F7L7|LJL7FJL-----7|LF-7-|7|.7| +7||7LLLJ-FJF7L-7LJLJLJLJL-JL7LJLJF------JL---JLJLJF7|||FJ|||||L7|L---7L77|LJL7FJL-JF7||LJFJFL7||F-JF--J|F---J|||FJ|F--J|F--7F-7|F7|FJ7|FF|LJ +L-L7.|.7.FFJ|F7L-----7F--7F7L7LF7L---------7F-7-F7|||||L7|L7||FJ|F7F7L7L-JF--JL-7F-JLJL-7|F7FJ|||F7L---JL7FF7LJLJF|L---J|LFJL7LJ|LJL7FF7L7-7 +|.FF-7-FFFL7LJL----7LLJF-J|L7L-JL7F----7F--J|FJFJ||||||FJL7||||FJ||||JL--7L7F7F-JL7F7F7F|LJ|L7LJ|||F7F7F7L-JL-----JF7F-7L7L-7L--JF-7L-JL7J-J +77|L7L.||LFJF--7F-7L-7FJF7L7L7F7FJL---7|L---JL7L7|||||||F7|||||L7|||L-7F7|FJ||L7F7|||||FJF7L7|F7LJLJLJ|||F-7F7F7F-7||L7L7L-7L----JFJF--7|J-7 +--L-JF|LJ.L7|J7LJFJF7LJFJ|FJ-LJ|L-----JL------JFJ|||||||||||||L7LJ||F-J|||L7|L7LJ|||||||FJL-JLJL-----7|||L7|||||L7LJL-J7L--JF----7L7L7.LJJF7 +|-J-J-F-J7JLJFF7-L-J|F-JFLJF7F-JF7F--------7F-7L7||LJ||LJLJ|||7L-7|||F7|LJFJ|FJFFJLJ||LJ|F77F---7F7LFJLJ|FJLJ||L7L---------7|F---JJL-J77L7F7 +F7.FL7J.FF-LLFJ|F7F-JL7F---J|L--JLJF-----7FJ|FJFJ||F7||F---J|L-77||||||L-7S7||F7|F-7||F-J|L7L--7|||FJF-7LJF7-LJFJF7F7F--7F7LJL--7-FL-|.7F|JL +L|7F7|.F|LF7FL7|||L-7FJL-7F7L-7F--7L7F--7LJFJ|LL7|LJ|||L---7L-7|FJLJ|||F-JFJ|LJ|LJ-|LJ|F7L7|F-7||||L-J||F7||F7.L-JLJ|L-7|||F7F-7L7L|---L7|.| +F-J|J.FFF-J|F-J||L--JL--7LJL-7|L-7L-J|F-JF7L7L7FJL-7|LJF---JF7||L-7FJ||L-7|J|F7L7F7|F7LJL-J|L7||LJL--7FJ|LJLJL7F7F7JL--JLJLJ|L7L-JL--|.LF77. +-JJL.FLLL-7|L-7LJF---7F7|7F7FJ|F7L---JL--JL7|FJL7F-JL-7|FF7F|LJ|F7||FJL7FJL7LJL7|||LJL-7F--JFJ|L--7F-JL-JF-7F7LJ|||F-------7L7L--77.FF-F.L77 +FLFJ-J.LLFJL--JF7|F--J|||FJ|L7|||F---------J|L-7|L7-F7|L7|L7L7FJ|LJ|L-7|L7FJF-7|LJL7F--J|F7FJFJF--J|F7F--JJLJ|F-J|LJF---7F7L7|F7FJ-L-J|.F.L7 +|-7J.J...L-7F7FJ|||F7FJLJL7L-JLJ|L------7F7-|F-JL7L7|||FJ|FJFJL7L7FJ|FJL7|L7|FJL7F-JL-7FJ||L7||L--7|||L-----7LJF7|F-JF7-LJL-J|||||.L|FJ7L-7| +|FJ..|-7FLLLJLJ.LJLJLJF-7-L7F7F7L---7F--J||FJ|F7FJFJ|||L7||FJF-J7||F7L-7LJFJ||F7|L-7F7||FJL7||F7F-JLJ|7F7F-7L-7|||L--JL-----7LJ|L-7-LF-L..77 +F-JJ-|.FFF--7F-7JF---7L7|F7||LJL-7F7LJLF7|||FJ||L7L7|||FJ||L7|JF7||||F7|F-JJ||||L-7|||||L7FJ||||L--7FJFJ|L7|F7LJLJF-----7F--JF7L--J7.J-|7..| +7JJ-7J7FFJF7|L7|FJF-7L-JLJLJ|F--7LJ|F--J||LJL7||LL7|||||FJ|FJ|FJ||||||||L-7FJ|||F7|||||L7|L7|LJ|F7FJ|-L7L-JLJL---7L7F--7LJF7FJL-7JJL7.L7J7-L +LF-FF---JFJ|L7||L-J-L-----7FJ|F7L--J|F--JL7F-J||F7||||||L7|L7|L7||||||||F-JL7||||||||||FJ|FJ|F-J||L7|F7L--7-F--7LL-J|F-JJ-|||F--J7||77LJ||7| +7|FFL7F7FJ.L7LJL-7F7JF77F-J|JLJL7F-7||F7F7|L7FJ||||||LJ|FJL7|L7||||||||||F-7||||||||||||FJL7|L7FJ|FJ||L7F7L7|F-JF---JL-7FFJ|||F-7J-.FJ-LJ7-J +L-7--LJLJF--JF7F7LJL-JL-JF7|F---J|FJ|||||||FJL7LJ|||L-7||F7|L7||||||||||||FJ|||||||||||LJF-JL7||FJ|FJ|-||L7LJL--JF--7F7L7|FJ|LJFJ.L-J--F|L|. +.|||7.||-L---J||L7F7F-7F7|||L-7F7|L7|||||||L7FJF7||L7FJLJ|LJFJ||LJLJ||||||L7|LJ||||||||F7L---JLJL7|L7|FJL7L7F7F--JF7||L7LJL-JF-JJJF|JFF.J-FF +|J|-7F|FF--7F7||.LJLJFJ|||LJF-J|||FJ||||||L7|L7|LJL7||F--JF-JFJL7LF7LJ||||.|L-7||LJLJ|LJL--7F---7||F|||F7|FJ||L7|FJ|||FJF-7F7L--7JJLL|JL-F|J +|FJ||7LFJF7LJ|LJF7-F7L7|LJF-JF7|||L7|||LJL7|L7|L7F-JLJL-7FJJFJF7L7||F-J|||FJF-JLJLF7FJF-7F7LJF-7|||FJ|||||L7|L7L-JFJLJL7|F||L---JJ|..|-|FL77 +F--|L-JL-J|F7L--JL-JL-JL7FJF7|LJ|L7||LJF--JL7||FJL---7F7||F-JFJL7LJ|L7FJLJL7|.F77FJLJFJ-||L-7L7LJ||L7|||||L||FL---JJF77|L7|L7F7JF7J---7F7|L7 +FJJLJ.FF7|LJL------7F7F-J|FJ||F-JFJ||F-JF7F7|||L7F7F7||LJ||F7L-7|F7|FJ|F---JL7|L7|F7FJF-JL-7|FJF7LJFJ|LJLJFJL-------JL7L7|L7LJL-J||JL|-LJ-LF +-JFL.F7|L--7F------J||L-7LJ|LJL7FJ-LJ|F7|LJLJ|L7||||||L-7|||L7FJLJLJL-JL--7F7LJFJLJ|L7|F7F7||L-JL7.|FJF---JF7F----7F-7L7LJFJF7F--J77-|||7..| +|L|LFJ|L--7|L---7F-7||F7|F---7FJL7F7FJ||L7F--JFJLJ||||F-J||L7|L----7F-----J||F7|F--JFJLJ||LJL7F-7L7|L7|F7F7||L---7LJ7L7L-7L-J||F|.F77.-L-7F- +L7-FL7L---JL----J|FJ||||||F-7LJF-J|LJFJ|FJL-7FJF7LLJ|||F7|L7|L7F-7FJL--7F7FJ||||L7F7L7|FJL77FJL7L-JL-JLJLJLJL7F--JF7F7L-7L--7|L777JLF7FJLF|J +|.LJ.L----7F7F--7||FJ||||||FL-7L-7L7FJ|||F--JL-JL7F7||||||FJ|-|L7|L7F-7|||||||||FJ|L7L7|F7L7|F7L----7F7F7F---JL---JLJL7J|F7FJ|FJL-.FL.L7.|L7 +-JFL.|7FLFJ|LJF-J|||FJ||||L7-FJF-J.|L-7||L--7F7F7||LJ|||LJL7L7|FJ|FJL7LJ||L7LJ||L7L7L7|LJL-JLJ|F-7F7LJLJ||F--7F7F7F7F7L7||LJL||-F.F||-L-F|-. +JF-JFL-7-L7|F-JF-JLJL7||||FJFJFJF--JF7|||F--J|LJLJL7FJLJF--JFJLJJ||F-JF7|L7L7FJL7L-JJ|L-----7FJ|FJ||F7F7|||F-J|||||LJ|FJ|L--7LJJ|---F-J7-JFF +J7.L-7.-F-J||F7L--7F7||||LJLL7|FJF7FJ|||||F-7L--7F-JL7F-JF-7L---7LJL7FJ||LL-J|F7L-7F-JF---7FJL-JL7|LJLJ||LJ|F7||||L-7LJFJF7FJ-|7L-JJ..||.LFJ +F|-FJ---|F7|LJ|F--J|LJ|||JF--J||FJ||LLJ||LJ-|F7FJL7F7|L7FJFJF7F7|-F-J|FJL7F--J|L7FJL-7L-7|LJ|.F--JL--7FJ|F-J|||||L7FJF7L-JLJ.||F-JJ.-7L|7--7 +FL-F7FJFLJ||F-JL-7LL7FJLJ.L--7|||7|L-7FJ|F--J||L-7||||FJL7L7|LJLJFJF7|L7FJ|F-7L7||LF-JF7L---7FJF7F7F7|L7|L-7|||LJ-|L-JL----7-|L7-||FLJ7L|7|J +-.FL||-FJ||||F-7FJ.LLJJF|-J|LLJ||FJF7|L7||F7FJ|F-J||||L--J7|L---7L-JLJFJL7||F|FJ|L7L-7|L----JL7|LJ||LJJLJF-J||L--7L7F7F-7F-J7JF---JLJ-|7LF77 +L-7JLL.-JFLJ||||L7FLL|-J.|JLF--J|L7|LJFJ||||L7|L-7||||F----JF-7FJ|F---JF-J|L7||JL-JFFJL---7F-7|L-7|L---7FL7FJL7F-JL||||FJL7.F----J|F-7J--J|7 +|--.7JF77.LFJL7L-J7|F|||77|.L7F7|FJL-7L7|LJL7||F7|LJ|||F---7L7||F-JF7F7|F-JFJLJF----JF7F--J|FJL-7||F---JF-J|F-J|F-7||LJL7FJ.|LJJ|JFL-JJ77F-J +F7-7|-F7-|JL-7L7LF7-L|JJL||-LLJLJL7F7|LLJ|F-J|||LJJFJ|||F--JFJLJ|F7|LJ|||F7L--7L-7F7FJ|L---JL--7LJ||F7|FJF7||F7LJFJ||JJJ||-77J.-7F7L7.LFLJ7| +||FF|7L7-|-|-|FJ-LJ.FJJ.F7|7.|7L-|LJLJ7JF7L-7||L--7|FJLJL-7FJF7-|||L-7||||L7F-JLFJ||L7L7F7F7F-7|F-JLJL7|FJ||||L7FJ|LJ--FJL7|FJFLJF7-|7J.L7L| +L-J|..FJL7.J.LJ|-L7J77.F|J7F-77|.F7LJ|L-|L--J||F7FJ|L7F---JL-J|FJ||F7|LJ|L7|L-7F|FJL-JFJ||||L7||L7F7F7|||-||||FJL-7.LFLL7FJJ|-F.-FJ7FL.F7|.| +|J-F7-77-LJLJ|J7-7JL|FJ-||-7LLJ-JLJ|||.LL7F7FJLJ|L7L7|L-7F7F-7|L-J||LJF-JFJ|F7|FJL--7FL-J|||FJ|L7||||LJ|L7LJ||L7F-JFFJJJLJ.||LLJLL-J.LJJ-L-7 +|.7---L|-|F7J|-77|--.J|F77.|.L|..|-|-LJJ-LJ|L7|FJFJJLJF-J||L7LJ|7LLJ7FJF7L7LJLJL7F--JF---J||L7L-JLJ|L-7L7L7.LJ.|L7|F77|J|J7FL7L|7LF-L-|J.7-L +F77.|F7.FJ-J.JJLJ|JL|LLL-J.FF.|F-L7J7LJ77|-L-JFJFJJLF-JF7|L7L7L|J-|FFJFJ|FJ7F-7FJL7F-JF7F7|L7L---7FJF-JFJFJFJ-LL7|J77FJ.LJLJFL-FJ.F7.L7.FL-J +FLF-|JL7||FL-JL||F..JJFJ.L.|L.F|J-F-|7L-|F-JJLL-JJLFL7FJLJFJFJ.|--J-|FJFJ|F7L7LJF-J|F7|||LJ7|F7F-JL7L7FJFJ.|7.LLLJL--FJF||L77|.|FF--7.JF-|F| +L.|-77LFFF7JL7-LJ|--7F7-L77-.7.|..JJ.L7|.LJF7J|FJ|F|LLJ7L-L7||-|-JFFLJ-L7LJ|FJF7|-FJ||||L-7FJ|||-|FL-JL7|J7LLJ.F|.||J|FLJ-|LJ.FLFJ.|FFJL7J|| +.FL-J--||LF-|-F-|7|JF-JLLJJ7.LFFJ7J..FF--.FF7.L|LL||-LLJL7JLJ7FL-.FL..F-JF7|L7|LJJL7|LJL7FJ|FJ||FLLJ||-LJ.F-|L7J|F7L.LF|7-L|7FLL|J---L-L7F|J +FJJ7.|-F|7JF|LLF-L77..|7.FF7-.LF7JLFJ|L7J..FJ-J..|||77||.||L.LJJ.F|.F-L-7|LJFJ|J|7.||.F-JL7LJL|L7||F|7.L|-LF--F-7LJ.L.F.|.||-JLLJ.-.|7J|L7J7 +|JJF7.L|LJ.LL77|J-|J7-J|FFLJ7.JLJL7J|7LL7.F|7-L-L-LJL7-|7L7|.|7--JFF|.LLLJJLL-J.L|-LJFJF-7L7JFL7L7LJLF7FF-77LLJJLJ.7J-L-7.L7L|7L7FLFF77|F|JL +L7FJF-7F.LFJ|JL--7|-|FL-FJ7-|.L--L|--|7F-7|JL7-JJF|-FJ.LJ.-F7|--L7LJ|7-J7-F7-L-7LJ.|L|FJFJFJ.|.L-J.|7L7|||LJ-F77FJ-J-FLJ|F-7.|7-|JL-J.7-J..| +.JJJ|JFL7F|FJ7..LL|-|7FFL-J||JFL-J.F||.L.L-77|F---J|JFJ.L7LFJJ7LJLF7|7.LF-FJ7LF|7FJ7JLJLL7|JJ--JJ7.F|-|77F||JLL-|...FJ7F|7-|F|7L|.7|F-|J.FF7 +J-LF|.|7|7|L-F-77-L-.|LJL7LLF.|JJ.L--J7JJ|LJFLF777LL-J-F.|-7JFJ.|FJ|L-7F7||-|7|---J7.||J7LJ.FL.L7LL7|-|L7-J|..|7J7.7J7F.L|J|7LL-7-L-J-|7FFJJ +LF.FJF7-|-L--FL7L-7|-F.F-JL|.LF7F7L7-7JJFLLFFJ.LJ7-L|FF|F|.|7|.7J7...|LLL-F-7J.JFFF-7F.LFJJ-7.|7L7JLF7|F|J.|F7FJ...J||JJFF7LJF.FL7L-J.L-77|7 +F--JJL-7J|LJLJJLF-L7---J-|.J-.JLJJLL7JL7JJ.7.L|LLJ-.L-J-7J-L7LLJ---FJ-LJJ..JLL7.L-JLLLL-7-FJLF77L---7JJLJ.LFJL--F-F-JJ.LLJ|-F7-JJ.JJ.JJF7--7 \ No newline at end of file diff --git a/2023/Day10/solution.cs b/2023/Day10/solution.cs new file mode 100644 index 0000000..80fef97 --- /dev/null +++ b/2023/Day10/solution.cs @@ -0,0 +1,308 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using System.Linq; +using System.Security.Cryptography.X509Certificates; +using adventofcode; + +namespace aoc2023; + +public class solutionDay10 : ISolver +{ + public void SolvePart1() + { + Console.WriteLine($"part 1:"); + + solutionBase sb = new solutionBase(); + //var input = sb.getInputLines(@"2023/Day10/testone").ToArray(); + //var input = sb.getInputLines(@"2023/Day10/testtwo").ToArray(); + var input = sb.getInputLines(@"2023/Day10/input").ToArray(); + + char[,] map = new char[input.Length, input[0].Length]; + for (int y = 0; y < input.Length; y++) + { + //Console.WriteLine($"y = {y} ,input_y = {input[y]}"); + var line = input[y].ToArray(); + for (int x = 0; x < line.Length; x++) + { + map[x,y] = line[x]; + } + } + + //for testing + // for(int y = 0; y < map.GetLength(1); y++) + // { + // for(int x = 0; x < map.GetLength(0); x++) + // { + // Console.Write(map[x,y]); + // } + // Console.WriteLine(); + // } + + //locate the S as starting point + //find the two connected points + //go both two ways and count the steps + //repeat until both ways are meeting each other + + //find the S + int sx = 0; + int sy = 0; + for(int y = 0; y < map.GetLength(1); y++) + { + for(int x = 0; x < map.GetLength(0); x++) + { + if(map[x,y] == 'S') + { + sx = x; + sy = y; + } + } + } + + Console.WriteLine($"S is at {sx},{sy}"); + + //find the two connected points + //list all points around the S + //check if there are two points that connect as next step to the starting point + + List visitedPipes = new(); + + Pipe startPipe = new Pipe('S', sx, sy); + visitedPipes.Add(startPipe); + + Pipe currentPipe = startPipe; + Pipe nextPipe = startPipe; + Pipe beforePipe = startPipe; + + int steps = 0; + bool foundStart = false; + Console.WriteLine($"start at {startPipe}"); + //find the next pipe + + while(!foundStart) + { + //Console.WriteLine($"current pipe: {currentPipe}"); + + foreach (var item in currentPipe.GetNeighboor(beforePipe)) + { + //Console.WriteLine($"neighboor: {item}"); + var neighboorPipe = new Pipe(map[item.Item1, item.Item2], item.Item1, item.Item2); + //Console.WriteLine($"check neighboor pipe: {neighboorPipe}"); + + if(neighboorPipe != beforePipe) + { + if (PipesAreConnected(currentPipe, neighboorPipe)) + { + if(neighboorPipe.pipeChar == 'S' && steps > 3) + { + //Console.WriteLine($"found start again at {currentPipe.x},{currentPipe.y} after {steps} steps"); + foundStart = true; + } + else if (neighboorPipe.pipeChar != 'S') + { + //Console.WriteLine($"found connected pipe: {neighboorPipe}"); + visitedPipes.Add(neighboorPipe); + beforePipe = currentPipe; + currentPipe = neighboorPipe; + steps++; + break; + } + } + } + } + } + + Console.WriteLine($"found start again at {currentPipe.x},{currentPipe.y} after {steps} steps"); + var result = (steps + 1) / 2; + Console.WriteLine($"result: {result}"); + + // foreach (var item in currentPipe.GetNeighboors()) + // { + // Console.WriteLine($"neighboor: {item}"); + // var neighboorPipe = new Pipe(map[item.Item1, item.Item2], item.Item1, item.Item2); + + // if(currentPipe.PipesAreConnected(currentPipe, neighboorPipe)) + // { + // Console.WriteLine($"found connected pipe: {neighboorPipe}"); + // visitedPipes.Add(neighboorPipe); + // currentPipe = neighboorPipe; + // steps++; + // break; + // } + + // } + + // for(int y = 0; y < map.GetLength(1); y++) + // { + // for(int x = 0; x < map.GetLength(0); x++) + // { + // if(map[x,y] != 'S' && map[x,y] != ' ' && map[x,y] != '.') + // { + // nextPipe = new Pipe(map[x,y], x, y); + // Console.WriteLine($"check next: {nextPipe}"); + // if(currentPipe.PipesAreConnected(currentPipe, nextPipe)) + // { + // visitedPipes.Add(nextPipe); + // currentPipe = nextPipe; + // steps++; + // break; + // } + // } + // else if(map[x,y] == 'S' && steps > 2) + // { + // Console.WriteLine($"found start again at {x},{y} after {steps} steps"); + // } + // } + // } + + + } + + public void SolvePart2() + { + Console.WriteLine($"part 2 under development"); + } + + public enum Direction + { + North, + South, + East, + West, + None, + Start + } + + public class Pipe + { + public readonly int x; + public readonly int y; + public readonly char pipeChar; + + public List Directions { get; private set; } + + public Pipe(char c, int x, int y) + { + Directions = new List(); + + switch (c) + { + case '|': + Directions.Add(Direction.North); + Directions.Add(Direction.South); + break; + case '-': + Directions.Add(Direction.East); + Directions.Add(Direction.West); + break; + case 'L': + Directions.Add(Direction.North); + Directions.Add(Direction.East); + break; + case 'J': + Directions.Add(Direction.North); + Directions.Add(Direction.West); + break; + case '7': + Directions.Add(Direction.South); + Directions.Add(Direction.West); + break; + case 'F': + Directions.Add(Direction.South); + Directions.Add(Direction.East); + break; + case 'S': //start + Directions.Add(Direction.North); + Directions.Add(Direction.South); + Directions.Add(Direction.East); + Directions.Add(Direction.West); + break; + default: + Directions.Add(Direction.None); + break; + } + + this.x = x; + this.y = y; + this.pipeChar = c; + } + + + + public List<(int,int)> GetNeighboors() + { + List<(int,int)> neighboors = new List<(int,int)>(); + + if(Directions.Contains(Direction.North)) + { + neighboors.Add((x, y - 1)); + } + if(Directions.Contains(Direction.South)) + { + neighboors.Add((x, y + 1)); + } + if(Directions.Contains(Direction.East)) + { + neighboors.Add((x + 1, y)); + } + if(Directions.Contains(Direction.West)) + { + neighboors.Add((x - 1, y)); + } + + return neighboors; + } + public List<(int,int)> GetNeighboor(Pipe pipeFrom) + { + List<(int,int)> neighboors = new List<(int,int)>(); + + if(Directions.Contains(Direction.North)) + { + neighboors.Add((x, y - 1)); + } + if(Directions.Contains(Direction.South)) + { + neighboors.Add((x, y + 1)); + } + if(Directions.Contains(Direction.East)) + { + neighboors.Add((x + 1, y)); + } + if(Directions.Contains(Direction.West)) + { + neighboors.Add((x - 1, y)); + } + neighboors.Remove((pipeFrom.x, pipeFrom.y)); + + return neighboors; + } + + public override string ToString() + { + return $"Pipe '{pipeChar}' at {x},{y} with {Directions.Count} directions"; + } + } + + public bool PipesAreConnected(Pipe pipeFrom, Pipe pipeTo) + { + //check if the pipes are connected + if(pipeFrom.Directions.Contains(Direction.North) && pipeTo.Directions.Contains(Direction.South) && pipeFrom.y > pipeTo.y) + { + return true; + } + if(pipeFrom.Directions.Contains(Direction.South) && pipeTo.Directions.Contains(Direction.North) && pipeFrom.y < pipeTo.y) + { + return true; + } + if(pipeFrom.Directions.Contains(Direction.East) && pipeTo.Directions.Contains(Direction.West) && pipeFrom.x < pipeTo.x) + { + return true; + } + if(pipeFrom.Directions.Contains(Direction.West) && pipeTo.Directions.Contains(Direction.East) && pipeFrom.x > pipeTo.x) + { + return true; + } + + return false; + } +} \ No newline at end of file diff --git a/2023/Day10/testone b/2023/Day10/testone new file mode 100644 index 0000000..2417530 --- /dev/null +++ b/2023/Day10/testone @@ -0,0 +1,5 @@ +-L|F7 +7S-7| +L|7|| +-L-J| +L|-JF \ No newline at end of file diff --git a/2023/Day10/testtwo b/2023/Day10/testtwo new file mode 100644 index 0000000..3c00cf2 --- /dev/null +++ b/2023/Day10/testtwo @@ -0,0 +1,5 @@ +..F7. +.FJ|. +SJ.L7 +|F--J +LJ... \ No newline at end of file diff --git a/Program.cs b/Program.cs index 5f14b68..501d0bd 100644 --- a/Program.cs +++ b/Program.cs @@ -33,7 +33,7 @@ static void Main(string[] args) else { // for testing - var today = new DateTime(2022, 12, 2); + var today = new DateTime(2023, 10, 1); if(start.Month == 12 && start.Day < 26) { diff --git a/README.md b/README.md index 4146c54..3221dc2 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ using c# with .NET 7 - day07 :star: - day08 :star: :star: - day09 :star: :star: +- day10 # overview 2022 - day01 :star: :star: From 97def7eb2d3f59854a6c282cbad61437d81e8013 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Mon, 11 Dec 2023 12:54:56 +0000 Subject: [PATCH 03/14] solving day11 part 1 without expansion --- 2023/Day11/input | 140 +++++++++++++++++++++++++++++++++++++++++ 2023/Day11/solution.cs | 89 ++++++++++++++++++++++++++ 2023/Day11/test | 10 +++ 3 files changed, 239 insertions(+) create mode 100644 2023/Day11/input create mode 100644 2023/Day11/solution.cs create mode 100644 2023/Day11/test diff --git a/2023/Day11/input b/2023/Day11/input new file mode 100644 index 0000000..c97ea81 --- /dev/null +++ b/2023/Day11/input @@ -0,0 +1,140 @@ +.......#..........................................................................#......................................................... +....................#.........#............#.........................#.......................#.............................................. +.#.......................................................#.................#.........................................................#...... +..............#.................................#................#....................................................#..................... +..................................#......................................................................#.................................. +..................#..................................#.............................#.......#...............................#................ +.......#...............................#...................#................................................................................ +........................................................................#....................................#........................#..... +..#...........................................................................................................................#............. +............#............#..............................................................................#................................... +...........................................#.....................................................#................#......................... +.....................................................................#...........................................................#.......... +...............#....................#....................................................................................................... +#.....................................................#.......................................#............................#..........#..... +.....#................#......#................................................#............................................................. +.......................................#.......................#.......#..............#..................#......#........................... +............................................................................................................................................ +...................................................#..............................................#.............................#........#.. +..........#........................................................................................................#........................ +...............................................#.............................#............#...........#..................................... +....................#..........................................................................................#........#................... +....#.........#............#...............................................................................................................# +....................................#................................#.............#............#........................................... +...............................#..................................................................................#......................... +#...............................................#........#.....................................................................#............ +......#........................................................#......................................................#..................... +..........................................#....................................#............................................................ +..................#.....................................................................#..................................#.......#........ +.............................................................................................#.............................................. +.............#........#...........#..........................#............................................#.......#......................... +........#...................#.......................#...................#..................................................................# +.................................................................................#.......................................#.................. +................................................................#........................................................................... +...............................................#...........#..........................................#.....#............................... +..........................................#....................................................................................#............ +.......#.....#............................................................................#.............................................#... +......................#....................................................#....................................#........................... +.................#...................#................#....................................................................#................ +..#...............................................................#...................#.............................#....................... +.............................................................................................#.............................................. +.........#..........#....................................................................................................................... +...............................#.........#.......#...............................#.........................................................# +......................................................................................................#...................#.....#........... +........................................................................................#..................#................................ +..#......................................................................................................................................... +....................................................................................................................#...................#... +......................#..............................#..........#........................................................................... +......................................................................#..........................................................#.......... +#.......................................#......................................................................#............................ +.....#..........................#........................................................................................................... +..................#...............................#............................#........................#.................#................. +..........................................................#.................................#............................................... +.......................#..............................................................................................#...........#.....#... +............................................................................................................................................ +.......#............................................#....................................................................................... +...............#................#......#......................#......................................#...................................... +.....................................................................................#...................................................... +............................................................................................................................................ +............................................................................................................................................ +...#........................................................#...........................#.....#.........................#.........#......... +............................................................................................................................................ +...........#..........#......#................................................................................#.............#............... +.......................................#.................................................................................................#.. +...............................................#...............#............................................................................ +.............................................................................#.....................................#........................ +....#..............#..................................................#............#........................................................ +..............................#......................#..........................................#.....................................#..... +..............#..........................#...........................................................#...................................... +................................................#..............................#..............................#..........#.......#.......... +............................................................#............................................................................... +.#........................#................................................................................................................. +...............................#...........................................................#................................................ +.............#........................................#........#..................................................#......................... +...........................................#...........................................................#...................#................ +.........#.......................................#............................#.......#...................................................#. +.....................................................................#.............................................................#........ +...........................................................#................................................................................ +.....................................................#......................................#.......#..............#...........#............ +............................................................................................................................................ +#..........#.....................#..............................................................#........................#.................. +...........................#...................#...............................#.....#..................................................#... +................................................................#........................................................................... +.......................................#..................#.......................................................................#......... +...........................................................................................................#................................ +......#...............................................#......................#.................#.......................#.................... +...............................#..................................#.............................................#....................#...... +...........#......................................................................#................#............................#........... +.........................#.........#...............#........................................................................................ +.#.........................................#...........................#..................................................................#. +....................#.........................................#.............#...........................................#................... +............................#...................................................................#............................#.............. +............................................................................................................................................ +.............#..............................................................................#...............#.........................#..... +#......#..........................#...............................................................................#......................... +...............................................#.......................#..................................................................#. +.....................#...................................................................................................................... +............................................................#......................#.........................................#......#....... +.........................#............................#................................................................#.................... +..#..............................#...............................#.......................................................................... +.......................................................................................#.............#..........#........................... +.............#.........................#.................................................................................................... +..................................................#...............................#.........................................#............... +...................#..........................................................................#............................................. +.#....................................................#.......#..........................................#......................#.....#..... +...............................#............................................................................................................ +..............#....................................................#..........#....................#......................................#. +.........................................................#..............................#..........................#........................ +.....#.........................................................................................#.............#..........#................... +..................................#................................................................................................#........ +#........................#.................................................................................................................. +....................#.......................#................................#.............................................................. +...........#.......................................................................#...................#......................#............. +..............................................................#...................................................#......................... +...............................#..................#............................................#............................................ +................#.........#.............#............................#....................#................#................................ +.#.......................................................................................................................................... +........#................................................................................................................................... +..................................#...................................................#.............................................#....... +.................................................................................#.......................................................... +.............................#..........................#.....................................#....................#.......................# +........................................#..........................#........................................#...........#.....#............. +......................................................................................................#..................................... +..........#......#.......#....................................................#......................................................#...... +.....#...............................................#.................................#........#........................................... +#...........................................#...................................................................................#........... +..............................#..............................#.....................#.......#................................................ +......................#.........................#.........................................................................................#. +.......#...........................#.......................................#...............................#............#................... +............#.............................................#........................................#........................................ +.....................................................#..............#................#...................................................... +............................................................................................................................................ +.........................#.................................................................#............#.....................#............. +..................#..........................................................#..................................#......#..................#. +.#.................................................#..........#.........#.........#......................................................... +.......#.........................#.......#..............#..........................................#........................................ +.....................#.....#..............................................................................#................................. +...........................................................................#.....................................................#.......... +......................................#.........................................................#........................................#.. +#...............#...................................#.....................................#............#.................#.................. +.............................................#.........................#..........#.............................#........................... \ No newline at end of file diff --git a/2023/Day11/solution.cs b/2023/Day11/solution.cs new file mode 100644 index 0000000..c2c90ee --- /dev/null +++ b/2023/Day11/solution.cs @@ -0,0 +1,89 @@ +using System; +using System.Collections.Generic; +using adventofcode; + +namespace aoc2023; + +public class solutionDay11 : ISolver +{ + public void SolvePart1() + { + Console.WriteLine($"part 1"); + + solutionBase sb = new(); + //var input = sb.getInputLines(@"2023/Day11/input").ToArray(); + var input = sb.getInputLines(@"2023/Day11/test").ToArray(); + + int width = input[0].Length; + int height = input.Length; + + char[,] grid = new char[width, height]; + + for (int y = 0; y < height; y++) + { + var line = input[y]; + for (int x = 0; x < width; x++) + { + grid[x, y] = line[x]; + } + } + + List galaxies = new(); + + for (int y = 0; y < height; y++) + { + var line = input[y]; + for (int x = 0; x < width; x++) + { + if (grid[x, y] == '#') + { + Galaxy galaxy = new Galaxy(galaxies.Count, x, y); + galaxies.Add(galaxy); + } + } + } + + Console.WriteLine($"Galaxies: {galaxies.Count}"); + + List<(Galaxy, Galaxy)> connections = new(); + + for(int i = 0; i < galaxies.Count; i++) + { + for(int j = i + 1; j < galaxies.Count; j++) + { + var galaxy1 = galaxies[i]; + var galaxy2 = galaxies[j]; + + connections.Add((galaxy1, galaxy2)); + } + } + + Console.WriteLine($"Connections: {connections.Count}"); + + foreach(var connection in connections) + { + var galaxy1 = connection.Item1; + var galaxy2 = connection.Item2; + + //calculate manhatten distance between galaxies + int distance = Math.Abs(galaxy1.X - galaxy2.X) + Math.Abs(galaxy1.Y - galaxy2.Y); + + Console.WriteLine($"Distance between {galaxy1.Id} and {galaxy2.Id} is {distance}"); + } + + } + + public void SolvePart2() + { + Console.WriteLine($"part 2 under development"); + } + + class Galaxy (int id, int x, int y) + { + public int Id { get; set; } = id; + public int X { get; set; } = x; + public int Y { get; set; } = y; + } + + +} \ No newline at end of file diff --git a/2023/Day11/test b/2023/Day11/test new file mode 100644 index 0000000..a0bda53 --- /dev/null +++ b/2023/Day11/test @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file From c949f0809bf5b5ee4deba4ac76294bf8abde54a1 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Tue, 12 Dec 2023 08:18:43 +0000 Subject: [PATCH 04/14] solved day11 part 1, part 2 still not right --- 2023/Day11/solution.cs | 92 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 84 insertions(+), 8 deletions(-) diff --git a/2023/Day11/solution.cs b/2023/Day11/solution.cs index c2c90ee..bb15e92 100644 --- a/2023/Day11/solution.cs +++ b/2023/Day11/solution.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using adventofcode; namespace aoc2023; @@ -30,10 +31,10 @@ public void SolvePart1() List galaxies = new(); - for (int y = 0; y < height; y++) + for (long y = 0; y < height; y++) { var line = input[y]; - for (int x = 0; x < width; x++) + for (long x = 0; x < width; x++) { if (grid[x, y] == '#') { @@ -60,17 +61,90 @@ public void SolvePart1() Console.WriteLine($"Connections: {connections.Count}"); + //list all rows without Galaxy + List rows = new(); + + for(long y = 0; y < height; y++) + { + bool hasGalaxy = false; + for(long x = 0; x < width; x++) + { + if(grid[x, y] == '#') + { + hasGalaxy = true; + break; + } + } + + if(!hasGalaxy) + { + rows.Add(y); + } + } + + //list all columns without Galaxy + List columns = new(); + + for(int x = 0; x < width; x++) + { + bool hasGalaxy = false; + for(int y = 0; y < height; y++) + { + if(grid[x, y] == '#') + { + hasGalaxy = true; + break; + } + } + + if(!hasGalaxy) + { + columns.Add(x); + } + } + + Console.WriteLine($"Rows: {rows.Count}"); + Console.WriteLine($"Columns: {columns.Count}"); + + //Manhatten distance between galaxies without expansion foreach(var connection in connections) { var galaxy1 = connection.Item1; var galaxy2 = connection.Item2; //calculate manhatten distance between galaxies - int distance = Math.Abs(galaxy1.X - galaxy2.X) + Math.Abs(galaxy1.Y - galaxy2.Y); + long distance = Math.Abs(galaxy1.X - galaxy2.X) + Math.Abs(galaxy1.Y - galaxy2.Y); - Console.WriteLine($"Distance between {galaxy1.Id} and {galaxy2.Id} is {distance}"); + //Console.WriteLine($"Distance between {galaxy1.Id} and {galaxy2.Id} is {distance}"); } + long expansionLevel = 1; + long sum = 0; + long sum2 = 0; + //Manhatten distance between galaxies with expansion + foreach(var connection in connections) + { + var galaxy1 = connection.Item1; + var galaxy2 = connection.Item2; + + long expansionRows = rows.Count(row => row >= galaxy1.Y && row <= galaxy2.Y || row >= galaxy2.Y && row <= galaxy1.Y ); + long expansionColumns = columns.Count(column => column >= galaxy1.X && column <= galaxy2.X || column >= galaxy2.X && column <= galaxy1.X); + + //Console.WriteLine($"Expansion rows: {expansionRows}, galaxy1: {galaxy1.Y}, galaxy2: {galaxy2.Y}"); + //Console.WriteLine($"Expansion columns: {expansionColumns}, galaxy1: {galaxy1.X}, galaxy2: {galaxy2.X}"); + + //calculate manhatten distance between galaxies + long distance = Math.Abs(galaxy1.X - galaxy2.X) + (expansionLevel * expansionColumns) + Math.Abs(galaxy1.Y - galaxy2.Y) + (expansionLevel * expansionRows); + sum += distance; + //Console.WriteLine($"Distance between {galaxy1.Id + 1} and {galaxy2.Id + 1} with expansion is {distance} - {expansionRows} - {expansionColumns}"); + + var expansionLevel2 = 999999; + long distance2 = Math.Abs(galaxy1.X - galaxy2.X) + (expansionLevel2 * expansionColumns) + Math.Abs(galaxy1.Y - galaxy2.Y) + (expansionLevel2 * expansionRows); + sum2 += distance2; + } + Console.WriteLine($"Sum: {sum}"); + Console.WriteLine($"Sum2: {sum2}"); + // 82000210 is too low } public void SolvePart2() @@ -78,12 +152,14 @@ public void SolvePart2() Console.WriteLine($"part 2 under development"); } - class Galaxy (int id, int x, int y) + class Galaxy (long id, long x, long y) { - public int Id { get; set; } = id; - public int X { get; set; } = x; - public int Y { get; set; } = y; + public long Id { get; set; } = id; + public long X { get; set; } = x; + public long Y { get; set; } = y; } + + } \ No newline at end of file From fd0f0d9f28df67fb582d76af83d89a716f14525e Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Tue, 12 Dec 2023 08:23:55 +0000 Subject: [PATCH 05/14] solved day 11 part 2 --- 2023/Day11/solution.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/2023/Day11/solution.cs b/2023/Day11/solution.cs index bb15e92..20a5b35 100644 --- a/2023/Day11/solution.cs +++ b/2023/Day11/solution.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Numerics; using adventofcode; namespace aoc2023; @@ -12,8 +13,8 @@ public void SolvePart1() Console.WriteLine($"part 1"); solutionBase sb = new(); - //var input = sb.getInputLines(@"2023/Day11/input").ToArray(); - var input = sb.getInputLines(@"2023/Day11/test").ToArray(); + var input = sb.getInputLines(@"2023/Day11/input").ToArray(); + //var input = sb.getInputLines(@"2023/Day11/test").ToArray(); int width = input[0].Length; int height = input.Length; @@ -120,7 +121,7 @@ public void SolvePart1() long expansionLevel = 1; long sum = 0; - long sum2 = 0; + BigInteger sum2 = 0; //Manhatten distance between galaxies with expansion foreach(var connection in connections) { @@ -139,12 +140,16 @@ public void SolvePart1() //Console.WriteLine($"Distance between {galaxy1.Id + 1} and {galaxy2.Id + 1} with expansion is {distance} - {expansionRows} - {expansionColumns}"); var expansionLevel2 = 999999; - long distance2 = Math.Abs(galaxy1.X - galaxy2.X) + (expansionLevel2 * expansionColumns) + Math.Abs(galaxy1.Y - galaxy2.Y) + (expansionLevel2 * expansionRows); + BigInteger distance2 = Math.Abs(galaxy1.X - galaxy2.X) + (expansionLevel2 * expansionColumns) + Math.Abs(galaxy1.Y - galaxy2.Y) + (expansionLevel2 * expansionRows); + + Console.WriteLine($"{distance2}"); + sum2 += distance2; } Console.WriteLine($"Sum: {sum}"); Console.WriteLine($"Sum2: {sum2}"); // 82000210 is too low + // haha, forgot to change from test to input :D } public void SolvePart2() From ef7da790884123a6cf50a58058d7efd10c899e82 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Tue, 12 Dec 2023 08:26:26 +0000 Subject: [PATCH 06/14] update readme --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 3221dc2..67c960d 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ using c# with .NET 7 - day08 :star: :star: - day09 :star: :star: - day10 +- day11 :star: :star: # overview 2022 - day01 :star: :star: From 6e5797b06748f7546a65c4b55f2538df3b21a317 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Thu, 14 Dec 2023 11:47:13 +0000 Subject: [PATCH 07/14] solving day 14 part 1 and 2 --- 2023/Day14/input | 100 ++++++++++++ 2023/Day14/solution.cs | 340 +++++++++++++++++++++++++++++++++++++++++ 2023/Day14/test | 10 ++ 3 files changed, 450 insertions(+) create mode 100644 2023/Day14/input create mode 100644 2023/Day14/solution.cs create mode 100644 2023/Day14/test diff --git a/2023/Day14/input b/2023/Day14/input new file mode 100644 index 0000000..cbd3ef7 --- /dev/null +++ b/2023/Day14/input @@ -0,0 +1,100 @@ +......O........#....O..O.O#O.O.##.O#.O##.O#......O........O....O.#..OO#.OO.#..#.........#.O..#O..#.O +O#..O...O....O.#...##.O....O..O.#...#...O..O#.#.#......#.O##O#....#..O...O..#.#......#.#O..#..#....# +O....##.O#O##.O...#...#.#.......OO.##..###.OO..O.#.#.OO#O..##..O.O.#...#..O.#....O.##.O#OO.......... +....O#.O..OO.#..OOOO#.......O.....O.#O......OOO#....O.....O......O.....#..OOO.....O...O.O##OO.....## +OO#..#.O.##..##..#........O..OO.......#..O.OO.OO..#O...OO.##...#.OOO...O.O.O..#.O..#..O.O.##.O...OOO +#.....#OO.O......O..####O...O.....O.......#..#OO#..#...O...OOO.#....O#.....O...........#O#OO...O..O. +#O.O......O...O.O...O##.O#..OO....O..##.OO#O.##O.#.#.......O.O#.....OOOO......#..OO###OO.......O..#. +#.O.OO...#...##.O..OO..#.......O.O.O.O......O#....##.OOO.O.....#O#..##...OO.......#OOO.O..O......##. +..O.OO.O.#O.O........#..##.#.OO.O..##.O...O.#.....#..O.#....O..#O..O.#OO......O........#.#....#O..#. +..O......OO.O............OO#....##....#......O.#..O..O...O.O..#O......O.OO#.#.......O....#....##.O.# +.....#.O#O.#..#.#.##....#O....O.O.O.OO......#..O.O..#..OOOO....#.#..O.#.O.O..O.O#.O...O#..#..O##.O.. +O..O#.OO.#.##.#.........OO.#.....#OO...........O....O..OO..O.O###..O.O.#O...O.O...#...O..O#O...OO... +.#.#...OO...#.O...O.........#OO..#.....O....##.#.OO.#.#.#OOO...#OOO.O.O..O#......#.##..........O.... +....#..#...#...#.......#..#......##..O........O.OO.#O..#O.#.......#..#..O.O#.#...O#..O...O#.O...O.#O +.#O#O.O..........#O##.O#.#.........##.#............#.#.....#..#OO...#O....#OO.O.OO.#..#...O#........ +.#..#.O#O...##O....O.....##...OOO#...#O..#..O##O..#..OO.#...#O.....#.O...O#.O#.OO...###.#..O#O..OO.. +...#...O....O.#....#..#.O#OO...O.O#.#....O..#OO.#.O....#O#...O...O..O.##O..#.......O.##....O##....O. +#...O...O...O#O##O.O.#.#.....#.O...#.....##..#.#OO....OO#.......#..O..O.#.#O...#.#.#.....OO.O...OO.. +.O...OO.O.....##.O.##.#O.....#O..O.###..#..##.O.##O....OO..#O#....O.....O...#O#O...OO.........O..##O +.O..OO.#O.#...O...O...#...O....#.O.O.O....#O.###O.#..#..##OO.O...O.#.#.#..O...#.....O.#.O.O.#..O.... +O...OO.#...O.#..#.O..O#..O#....##.#O.##...#......#O#O..O..#.##.....O...#O#..O.O...OO...OO..#.OO.O.OO +.O.O....O.O.##O#....##..##O......#.#O#..O..#...OO..O...O.#..#O#..#..#.O...#.O.OO....O#..O##.O..O..O. +....#..O..O.OO.#.O...#OOOOO.OO.O#..O....#.#O.##........#OO.#.#.O.#.OO#...#OO..#.OO...O..#.O.....O#.# +.#O...O......#OOO#..#..#....O...O..O.#O....#O#...O..#...OO.#.O.O...O..#..#..O..##.O##.....O.O..OO..# +..#O.##.#.......OOOO.OO.....O..O........##.O.OO....O###..#.O...#O.O.#OO.#....O.O.#..........#.OO.... +.##...##.#......O.#.OO#...#..O##..#..##.O.......O#..O.O.#.O..#.....#..O#....O....OO.OO.O..#...O#..O. +..##O##O......O.#O.O.....#..#.#O#.O..#O#O..#OO.#..#.#.....##O.................O.....O#OO...##...O..O +....#O#O..O.#..O....#.....#.....#......O.#O........O#..O.O#..OO...#.#.O..##....O.....#......O#....#. +#.....#...O....OO..O##.OO....O.#..#O.........O..............O....##OO##.....#.##.O...#..O..#O#OO...O +...O.#O#...O..OO#...O.#O#.......#..O...O#.#..#O...#.O.O....O##...##...#.OO...O.O..OO#.#..........##. +.......#OO....#.#O#..........O.##.O.O#.....O.OO.O.OO##...##O...OO.O..O#.OO...O......O#O..O.O.##...OO +..O.O#.#.....OO............O.O..#.O#.O.O.#.##.#O.O...#.O.....O..#.#....O..#O#O....O.O.#..OOO..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#.##..#..#.#O....O.O.#........ +...............OOO.#........O....#.#O..##.O...O.O#.......#.#O.#...#O.......###.......O.OO...O.O..O.# +.#.O#....#......O...OO##..O#O...O.O#.O.##.OO...OOOO....OO....#.#....##.###.O.O..O..##....#.......... +..OO.....OO#O.........O.#..O....#......#.#.#.#...##O.OO#.O......O..O.#O....O#...OOO....O..O.O..#..#O +#O...O.O.......##..#..O..O...O...O..O.#..#.#.O.OO............OO....#OOOO#...OO.#.O#OO....O##.O....#. +.O#..OOO.O.#.......O....#......O.OO.#......#..#.O.......###.#....#O..O....O#.O.....#O#....O#.#.....# +....OOO#.#..#.O..O....#...O.#...OO....#..OO.O#O..O....O.O...O...O#O..O..O......O.#O..O#O..........O# +..O..#.OO###....#..O....#.O..#.....O.O.#..OOO.O...##...O#..##..O#.O.......O.#.###...O.....O......O.. +..O##..OO..O.O...O.#....OO.OOO.O........O......#.O..O..........O...O#OOO..O....O.#..O##O.......#.... +O.O..OO##.#...#O#..#...O..#.......#O..###..OOO..O..#.O#.O..#....O.OO#.##..##O.......OO#OO..#.O....#O +...#..O.#........OO.O....OOO#.O..O#O.......O....O........#O#...#O#.#..OO..O....#O.O....O...O###.#... +O..#.......#..#.....O..OOO.#..#OO...#O.O...O.....##O.O.#O....#.....#...#.........OO.O....#...O#O#... +.O..O.#O....O#O.###....#O.O.....................###......O..#...O.OO.....#.......O..#...OO.......##. +............#O#..#.#.......#.##....#O.#....O.#...O...OOO.O.....#O..####O...O..#..#.O##....#OO##.#.#. +....O.#..#.....#...#OO#.##...O..OO....#....O#..O......OO.OO.#OO....#.O..#.....#.##..#.O...O.O#.##O.. +...#OO#.O.O......#...O.O.....#......#.......................#.#.....O..O.#OO.#..OOO.OO.O.......#..#. +O#..#OO.OO.O#....##.O.#....OO..#.#.....O...O...#.O...O...O..#..O.....O..OO..O...O...O#....#...O.O... +.......OO.#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.....#...OOO#.......OO...#.... +..#...O...OO..#...O#O.O.O.O....O..#O#O......#.#....#..OO....#O...OO.O..O#.#O#OO.#...O.O.O..#....##.O +..#..O#..##.O...O..O....O.O.#.....#.O.OO..#.#.#...OO#....#..#O........OO.OO#.#..#..##O...O.OO.O#.#.. +...#O..OO.O#OO..O#O#O....#O....#.O#.OO.##.......O.O.OO##.......#.O.O.#O.##.......O..O....##.#O..#..# +#....##...O.......#..#OO.........#O.O.O.O#...O......O.......OO##....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.OO...##..OOOOOO.O...O.##.O...#...O.O#O...#.O.O.O.........O..#..O.....##.#....# +...O..........#.O...O.O.OOO...##.....#OO.......O....#.....O.......#.#O.........O.##O#..##...O.O.#.O. +..OO#O.....O.##......O..#...#..OO.....#O#.O..#.O..#.O.#......O.#O.#..O.#.#.O..#.O......#.....O..#.O. +..O#...O..O.O.OO....#..O.......#..#.O.#....O..OO#.OO.O..#.#O..O.#.......O...O#.OO.......O#........O# +...OO....#..O...O.#....#.#OOO...O.#.#.#.O....OO...OO...#......#O..#..O.#O....#O...#..O..OO#....OO..O +.O.OO##....OO.#...O.......O...O.O.O.O.O.....O.O#..O#O......##O..#..###.O....O...O..#O.##O#....#..##. +.#..O.O....O#O..OO#........#O#.OOO...##.....O#..#.#..O#.OOO.O...#.....O#........O#O......##...O..... +..O#O.....O.#O...O...#.O.........#OO..#O.O.##..##O..OO....O...O.#.#...#..O...O#.O...O......#OO...#.# +O.........##.....###O.O.#.O##..##.O.#.O.OO......OOO...O#.O#..OO..........##.##O.O#O.O...##.O....O..O +O..##OO.OO.......#......O.#..#.....O...O#.O#..#...OO...#.O...#O.#.O..O..OOO#....O..O...#....O...#.O. +..#.....#OOO#..O..O.....O........#...O..OO.O.....OO....O.###.....#O.#..O..#...#.###O..O#...O.#...O.. +O.O..#O..###.#....O#......###..#....O..OOO..O..O..OO..OO#O.....O..#..O##.#.#..OO..##..#.....O....O.. +..O......O..#.......##..#O..OO.O.O....#..OOO..OO.#..#..OO.O...O.....#.OO#OOO.O.##.....O...O##.#...O. +O.OO.#O..#.#...#...##...O.#O....O##O...O##.OO#.O.###.#OO..OO#O......OOO..#OOOO...OO....#.O#......... +.#O#O#O.O.O....O.O.O...###O.O#.#OO#.O......#O#.O#O#........O...#OOO..OOO.........O...#O#...O......#. +.OO.O.#..#.#..O.....OO.O.O#.....O...O..O.#.OO.O.....#.....O.......O.OO......O...OO..O..O....#..O.#.O +.#...O#..O..#.#O...#O...O..O.....#.#.O#.OO#.#..#.....OO.#....O.#OO.....OO.O.O..O.O....#......O..OO.. +...OO.##.O...#.#....##O.O..#.............#.#...#.#.#.OOO.##.......O#.O.O...OO....O..#....#.....O...O +.O...OO............#....O.#OO.#....#O....O###.#.....O.O.......#.O....#O...O...O.O.#..OO....#....#... +#.#......#O.....O..#.O.OO.........O...##....O....#..##OO..##O#..O.O......O....#.O..O......#..##....O +OOO....#.#.O.#.O#..#.....#O.O.O..O.OO.......#O.#......O##.O.#.#...#.#..OO#O.O...O..O..O.O.....#..#O. +##..O##..O...#.#..#..............#O..#O.O.O..#..O....O...#..#OO...O##....O...O...#O....OO...#.O..O.. +.#...OO#.#O.......##..#O...O.#..#......O#O....#..OO..OO.#O..O...O.#.O.........O........#.##.##...O.# +...O.O..O...#O..O.O..OO.OO##O.O.O.#..#...O..##...O##O#O..#.#.O#.#O#..#..OO..O....O..OOOO..##..O..... +##........#............#....O.....O.#.O.#.O.O.#O...#O......O.#....O...#O#...OO#.#O##........O....... +OOO#O.OO..#.......OO.OO...O...##.O.##..O....OO...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.O...O.#.....OO###..##.O.....O....#...O.O...........#O#..#O..#....#.O.......###...#..O.#....#O +#O.OO.........O#..#O.....O....O#......#....O..OOO..O.#.OO#...O..O##....##O..#..O#..O......O.OOO.O.OO +.#...O.#.#O....O..OO....#O..#...#O........#....O...O.....O..O..O.##.......O#...#..#O..#.#...O..O.O.O +......O..O...#....O....#OO#....#.#..##OO.....O.O.#......OO.O#..........#..O..#.O##.........###..O... +.O.O#..#O.#..#....O......O..OO.#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.O#... +#.#O#.#..#.#.......#..#..#.....##O#.......#.#..##OO.........O.O....#O...O....O....#..##..#OO..O...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#OO.......... +..O#......O.O......#.....#O.#.#.#.O...#OO.....O.O#.....O#.O.#.....OO.O.O.O....O..OO..##.#.....OO#..O +#O...O.#..#...OOO#...O......O#..O..O....###....OO..O#.#O..##.O#.O##....#.#.O#.##.....O.............O +.O.##.........#O....#..O#.O.#...O......O#.O#.OO#...O.O..........##.##O....O.#O#O..O.#...OO.O#.O.O... +#OO.O.OO.....O#....O.OO..###...O.....#..O##...O..###.O...#.O..#.O...O...OOO.#.O.#..O...O#..OO.#O...O +.###..#.OO#O..O.#..#.O..O...#....#.#..#O.O....#O....O#..#......#...#..O.....O.O.#O...O..O.....O#..#. +..###....OOOO......#O....O.....O.O.O..O.#O..##...#O#..#..#....#.O..#..O.......O...#.O#.#..#...O....# +......#O.#.......O..OO#O#....#.....OO#..#.OO..O.#....#...#O....#...O....O#.......O..#.O.#...#.#.O... \ No newline at end of file diff --git a/2023/Day14/solution.cs b/2023/Day14/solution.cs new file mode 100644 index 0000000..004ae75 --- /dev/null +++ b/2023/Day14/solution.cs @@ -0,0 +1,340 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using adventofcode; + +namespace aoc2023; + +class solutionDay14 : ISolver +{ + public char[,] map; + public int mapWidth; + public int mapHeight; + + public void SolvePart1() + { + Console.WriteLine("day 14 part 1"); + + solutionBase solutionBase = new solutionBase(); + //var input = solutionBase.getInputLines("2023/Day14/test").ToArray(); + var input = solutionBase.getInputLines("2023/Day14/input").ToArray(); + + // foreach (var line in input) + // { + // Console.WriteLine(line); + // } + + map = new char[input[0].Length, input.Length]; + + for (int y = 0; y < input.Length; y++) + { + for (int x = 0; x < input[y].Length; x++) + { + map[x, y] = input[y][x]; + } + } + + // for (int y = 0; y < input.Length; y++) + // { + // for (int x = 0; x < input[y].Length; x++) + // { + // Console.Write(map[x, y]); + // } + // Console.WriteLine(); + // } + + List<(int, int)> rocks = new List<(int, int)>(); + for (int y = 0; y < input.Length; y++) + { + for (int x = 0; x < input[y].Length; x++) + { + if (map[x, y] == 'O') + { + rocks.Add((x, y)); + } + } + } + Console.WriteLine($"found {rocks.Count} rocks"); + + foreach (var rock in rocks) + { + MoveRockNorth(rock.Item1, rock.Item2); + } + + Console.WriteLine("moved rocks:"); + + // for (int y = 0; y < input.Length; y++) + // { + // for (int x = 0; x < input[y].Length; x++) + // { + // Console.Write(map[x, y]); + // } + // Console.WriteLine(); + // } + + long sum = 0; + + for (int y = 0; y < input.Length; y++) + { + long rowSum = 0; + for (int x = 0; x < input[y].Length; x++) + { + if (map[x, y] == 'O') + { + rowSum++; + } + } + sum += rowSum * (input.Length - y); + } + + + Console.WriteLine($"sum: {sum}"); + } + + public void SolvePart2() + { + Console.WriteLine("day 14 part 2"); + + solutionBase solutionBase = new solutionBase(); + //var input = solutionBase.getInputLines("2023/Day14/test").ToArray(); + var input = solutionBase.getInputLines("2023/Day14/input").ToArray(); + + map = new char[input[0].Length, input.Length]; + mapWidth = input[0].Length; + mapHeight = input.Length; + + for (int y = 0; y < input.Length; y++) + { + for (int x = 0; x < input[y].Length; x++) + { + map[x, y] = input[y][x]; + } + } + + //PrintMap("initial"); + + // for (int i = 0; i < 1000000000; i++) + // { + // Cycle(); + + // //101410000 + // //1000000000 + + // // if (i % 10000 == 0) + // // { + // // Console.WriteLine($"cycle {i}"); + // // } + // } + + + int cycleIterations = 1000000000; + + //var cloneMap = map.Clone(); + + var existingMaps = new List(); + + //var test = CharArrayToString(map); + //Console.WriteLine(test); + + while(!existingMaps.Contains(CharArrayToString(map)) && cycleIterations > 0) + { + //Console.WriteLine($"cycle {cycleIterations} - existingMaps: {existingMaps.Count}"); + existingMaps.Add(CharArrayToString(map)); + Cycle(); + //cloneMap = map.Clone(); + cycleIterations--; + } + + var cycleLength = existingMaps.Count - existingMaps.IndexOf(CharArrayToString(map)); + cycleIterations = cycleIterations % cycleLength; + + while(cycleIterations > 0) + { + Cycle(); + cycleIterations--; + } + + //PrintMap("final"); + + + var sum = SumMap(); + + Console.WriteLine($"sum: {sum}"); + + + } + + public void PrintMap(string message = "") + { + Console.WriteLine($"{message} map:"); + for (int y = 0; y < mapHeight; y++) + { + for (int x = 0; x < mapWidth; x++) + { + Console.Write(map[x, y]); + } + Console.WriteLine(); + } + Console.WriteLine("end map"); + } + + public long SumMap() + { + long sum = 0; + + for (int y = 0; y < mapHeight; y++) + { + long rowSum = 0; + for (int x = 0; x < mapWidth; x++) + { + if (map[x, y] == 'O') + { + rowSum++; + } + } + sum += rowSum * (mapHeight - y); + } + return sum; + } + + public void Cycle() + { + //Console.WriteLine("cycling..."); + var rocks4North = GetRocks(); + + foreach (var rock in rocks4North) + { + MoveRockNorth(rock.Item1, rock.Item2); + } + //PrintMap("north"); + var rocks4West = GetRocks(); + + foreach (var rock in rocks4West.OrderBy(r => r.Item2)) + { + MoveRockWest(rock.Item1, rock.Item2); + } + //PrintMap("west"); + + var rocks4South = GetRocks(); + + foreach (var rock in rocks4South.OrderByDescending(r => r.Item2)) + { + MoveRockSouth(rock.Item1, rock.Item2); + } + //PrintMap("south"); + + var rocks4East = GetRocks(); + + foreach (var rock in rocks4East.OrderByDescending(r => r.Item1).OrderByDescending(r => r.Item2)) + { + MoveRockEast(rock.Item1, rock.Item2); + } + //PrintMap("east"); + + } + + public List<(int, int)> GetRocks() + { + List<(int, int)> rocks = new List<(int, int)>(); + for (int y = 0; y < map.GetLength(1); y++) + { + for (int x = 0; x < map.GetLength(0); x++) + { + if (map[x, y] == 'O') + { + rocks.Add((x, y)); + } + } + } + + return rocks; + } + + public void MoveRockNorth(int x, int y) + { + if (y == 0) + { + return; + } + + if (map[x, y - 1] == '.') + { + map[x, y - 1] = 'O'; + map[x, y] = '.'; + + MoveRockNorth(x, y - 1); + } + } + + public void MoveRockSouth(int x, int y) + { + if (y == map.GetLength(1) - 1) + { + return; + } + + if (map[x, y + 1] == '.') + { + map[x, y + 1] = 'O'; + map[x, y] = '.'; + + MoveRockSouth(x, y + 1); + } + } + + public void MoveRockWest(int x, int y) + { + if (x == 0) + { + return; + } + + if (map[x - 1, y] == '.') + { + map[x - 1, y] = 'O'; + map[x, y] = '.'; + + MoveRockWest(x - 1, y); + } + } + + public void MoveRockEast(int x, int y) + { + if (x == map.GetLength(0) - 1) + { + return; + } + + if (map[x + 1, y] == '.') + { + map[x + 1, y] = 'O'; + map[x, y] = '.'; + + MoveRockEast(x + 1, y); + } + } + + static string CharArrayToString(char[,] charArray) + { + int rows = charArray.GetLength(0); + int cols = charArray.GetLength(1); + + // Initialize a StringBuilder to efficiently concatenate strings + System.Text.StringBuilder sb = new System.Text.StringBuilder(); + + // Iterate through the array and append each character to the StringBuilder + for (int i = 0; i < rows; i++) + { + for (int j = 0; j < cols; j++) + { + sb.Append(charArray[i, j]); + } + } + + // Convert StringBuilder to a string + string result = sb.ToString(); + + return result; + } +} \ No newline at end of file diff --git a/2023/Day14/test b/2023/Day14/test new file mode 100644 index 0000000..b92d1a3 --- /dev/null +++ b/2023/Day14/test @@ -0,0 +1,10 @@ +O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#.... \ No newline at end of file From 2290254ab3841f76272fec0b2588a0b00d16dab9 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Thu, 14 Dec 2023 11:50:11 +0000 Subject: [PATCH 08/14] update readme --- README.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.md b/README.md index 67c960d..359905f 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,9 @@ using c# with .NET 7 - day09 :star: :star: - day10 - day11 :star: :star: +- day12 :star: +- day13 +- day14 :star: :star: # overview 2022 - day01 :star: :star: From 25be48ac81924b08814daad555e6f17db47092f5 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 16 Dec 2023 13:50:45 +0100 Subject: [PATCH 09/14] update solutionBase --- 2020/solutionBase.cs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/2020/solutionBase.cs b/2020/solutionBase.cs index 44d25f2..e2cde7b 100644 --- a/2020/solutionBase.cs +++ b/2020/solutionBase.cs @@ -157,5 +157,28 @@ public List getInputListLong(string filename ) throw; } } + + public string getInputString(string filename) + { + string inputString = ""; + + try + { + using (StreamReader reader = new StreamReader(filename)) + { + string line; + while ((line = reader.ReadLine()) != null) + { + inputString = inputString + line; + } + } + return inputString; + } + catch (System.Exception) + { + + throw; + } + } } } \ No newline at end of file From 1ed4efdaf2b6b549c8a8c1b749928d4f6e902ea8 Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 16 Dec 2023 13:51:46 +0100 Subject: [PATCH 10/14] solving day 15 part 1 --- 2023/Day15/input | 1 + 2023/Day15/solution.cs | 45 ++++++++++++++++++++++++++++++++++++++++++ 2023/Day15/test | 1 + 2023/Day15/testExample | 1 + 4 files changed, 48 insertions(+) create mode 100644 2023/Day15/input create mode 100644 2023/Day15/solution.cs create mode 100644 2023/Day15/test create mode 100644 2023/Day15/testExample diff --git a/2023/Day15/input b/2023/Day15/input new file mode 100644 index 0000000..038a2d6 --- /dev/null +++ b/2023/Day15/input @@ -0,0 +1 @@ +xpb=9,rds-,bns=6,mpv-,xtft=5,bx-,jfc-,qt=1,rt=4,sb=9,vblz=4,mpv-,qbt=2,nd=8,ljqx-,pftzg=8,jrb=8,ngq-,chch-,fbm-,srs-,kqg=8,bcd-,ljr-,ghf-,kgxc-,fg-,xjsdc=7,tm=4,hnq-,bzt-,dzb=4,zzh=8,gdc=2,gmj-,mzpv=7,nfp-,cbt-,mrzjk-,rz=2,kq=4,mdrj-,cffjs=5,jmrr-,xcx=3,tgv=4,pbp=2,qp-,btd-,pcbkc-,glr=6,mdh=6,gvs-,hnq-,djl-,xxcd-,vcdt=9,zmz-,vl=7,vjnkzz-,hhgm=4,qhcd-,qqpzl-,mflj=5,xfh=2,dlzrj=4,xtp-,nhn-,hhgm-,fgc-,rtt-,pn=1,gkg-,jp-,qk-,fnjjm=9,cthnh-,mqf=6,pt=8,rc-,mdrj-,mpv-,jrb=1,drf-,dpv-,rg=4,jj-,zzhxk=1,htnn=2,tlb=2,hccrts=2,mrzjk=4,ht=6,kgd=6,zzhxk=1,gcbx=6,pcbkc-,dvhnkm-,px-,nkc=5,mrfm-,nxth-,hfsd=9,mqf=1,mchr-,tsgr=5,mhz-,dlzph-,bbvb=9,zqt-,tl=9,jd-,kh-,tq=5,bql=8,jqt=3,sfkx-,bb=7,jnr=4,vlt=5,pbp=8,vpgk-,ljr=5,tbf=5,sjc-,mchr=4,qpbmcx=5,fc-,mhd-,hz-,vbct-,fj=2,lsrk=8,cb-,gdc-,bbddnc=3,chs=4,thldhf=9,nkc=7,kmjr=1,rj=6,rmmzh-,ltl=1,ffc=8,qnmk-,cdzs-,cqj=4,xpb=5,kcbjz-,ccbrg-,tl=4,tz-,mqf-,qhcd=2,ncv-,dc-,dd=8,cv-,rqr-,lj-,mzl-,cc-,clxn=9,hccrts-,gng-,bfth=1,mflj=4,tbj=8,xjsdc=3,bsz-,mzcxz-,tqn=4,zv-,ddlg-,lk-,nvg-,fvj=6,fzb=2,gdc=5,kd-,zd=3,mrfm=7,qt=4,pxp=9,hhgm=9,ht=2,cmth=7,nh-,bbddnc-,sj=4,slhs=7,bszgm-,tz-,cdf-,hz-,lg-,lgqn=8,lrj=1,rjrt-,dpv=3,qqbd-,rds=9,dd=8,crx-,ljqx=3,ghf-,vp=1,ms=3,lbvhh-,pftzg=9,zv-,mdh-,dlzph=2,gnfc-,dl=8,gnfc-,sj=5,xn-,xvh=1,ldp-,hvn=8,blp=5,lkhs-,dl-,zvgd-,jx-,xkc=6,rdf=1,bzt-,qn-,ng-,prl=6,nj-,hcl=2,lx-,vpgk=1,xnd-,xnv-,qpz-,qdvrm=7,sfkx=7,ng=6,mdrj-,gmj=8,dfnf=2,glr-,vr=2,mcz-,nj-,dmdx=9,dxcx=4,ddj=3,fphv-,bsz-,vzcjp-,clp=1,vrgvqd=7,kr-,jffmj=1,sn=6,ldp-,xj-,nbp-,qnmk-,fr-,qbz-,gd-,qb-,dmzcdp=1,nd-,ff=5,tnf-,qkls=7,bt-,jgrfm=1,pxp=1,xnxr=1,nv=4,tkc=1,chm=7,blp-,drnx=6,gls=5,gd=5,bz-,bt-,ds=9,gqfl=8,dxkzcv-,tq=2,mzj-,dd-,tlgl-,fnjjm-,pkd=9,zllfsp=7,msx-,rg=9,jffmj=5,gvs-,sjc-,xb-,cmth-,cqj-,tpdv=8,zq-,mzj-,qhcd=5,gl-,cmth=4,bql=7,tk-,tbj-,xkc=8,qpjs=5,vcqvm=8,chm-,rdf-,fc-,ggb-,rdjfg=6,snm-,dmzcdp=3,xcl=3,ldp-,vcxh=3,mqf-,tr=7,cqln-,cx-,dx-,dgl=5,jcd-,pv-,nvg-,clxn-,fvj=8,dmc=1,xnd=5,vcxh-,nvg-,ddj-,gv=7,pbbbq-,zxg-,npprc-,qhcd-,rdf-,hnh=2,ng=3,pxp-,kj=1,bp=6,kp=6,ljd=8,ljqx-,mv-,th=5,fg-,mzs=5,bsz-,dbn=1,jfc=8,cc=5,ptc-,tz-,jp=3,rnrnb=1,mhz-,jj-,gnzg=9,qn=7,mhz=1,xcx=7,zv-,gl=8,xpn-,mzs=7,gqjgt-,tpdv=6,bz=1,txh=4,df-,zd-,vbb-,jrb=5,ncv-,zd-,sj-,cqln-,gcp=9,rdjfg=5,gbzld-,ptr=2,zzhxk=3,xpb-,xxcd-,dmjfk=9,dvhnkm=4,jt-,kvhx=9,cjbq=1,gcp=6,shxdg-,hjgsff-,dmdx=5,mdrj=7,pv-,dc-,jrb=6,rnc-,fnjjm=5,ltl=3,zxpc-,mdrj=2,qn=7,bzr-,xcx=6,pvsd=9,zxg=5,pbp=4,fr-,mzcxz-,mf=6,mzcxz=9,pt=8,nxth-,nt-,jqjdv-,ftvq=7,bcd-,jnr-,xcx=7,tjtlr-,xpn=6,kxq-,lsrk-,ldzsh=8,cnskr=3,zzhxk-,ld=6,dmdx-,xq=1,qpbmcx=5,kmjr=9,rjrt-,xgxt=7,mzpv=9,tk-,rj-,tl=2,vzcjp=5,cd-,mgc-,qnmk-,dxkzcv-,cmth-,csqnhx-,xs=2,lr=6,xt=8,hbd=8,zxm=8,mf-,dszdgr-,lmv-,sb-,nrdj-,bvth-,vrgvqd-,cbt=8,zf=6,bb=5,bftjnz=7,cdvt=3,ltl=1,hqr=3,xqqt-,sksnl-,nhn-,tq-,vg-,glr=2,pjlqnd=9,dj-,ghf-,sszv-,rds=3,xcx=4,gp=8,cjbq=2,hnq=1,crc=1,vb-,fgl-,np=7,mlnsp-,hhgm-,nh=3,tlb-,hvn-,qqpzl=8,td-,nlm-,nj-,gsd-,gd=4,csqnhx=1,mkmsq=5,dgf=2,xj-,csqnhx-,gb-,gp-,vzcjp-,rgs=2,gdc=6,nhn-,hnh-,nvkx-,kxq=2,qpjs=9,hmcvr=5,lg=1,sszv=9,pbp-,dv=9,pkd-,jvbn-,mkmsq-,fc=9,cdzs=8,ljd-,th=5,rds-,kb=4,cv=2,gkg=3,nj=4,cjbq=9,tz=1,crc=4,dv-,rjrt-,gl=6,dhld=7,xcl-,zx=7,dmdx-,ktd-,tq-,qqbd-,fgq-,ncv=6,fl-,qzxx=1,fj-,rgs=5,lbvhh=8,vlt-,zcnx=2,gbr=5,mbrz-,nhn-,ftvq=4,zg-,ltl=7,mzj=2,nsxz=1,jt-,zt=9,fgq-,dzb=7,pkqq=4,hcl=6,btd=6,vh=4,nt=2,bfth=9,zt=2,jfc=7,ffm=9,hvkd=2,lgx-,mkmsq=1,srs=9,mx-,xqqt=7,srs=7,dmzcdp-,cqln-,ld=2,spg=3,xcx=6,mzl=2,mzl-,xcj=5,ksxm=1,nj=5,tpdv=4,cb-,sksnl=1,klv=1,tsgr-,gcp-,mrzjk=6,jrb-,vcdt-,ddqn-,cqln=6,slhs-,jqt=5,drf-,xzmn=8,msq=5,qxfr=9,hzpj-,xfg-,tsgr=2,chm=5,znl-,rqr=2,ps-,pbbbq-,crl-,cthnh=6,px-,dd-,ptr=2,nb=7,qhcd=2,ns-,dc=7,zvgd-,fp=3,pjlqnd=1,pkd=9,zd-,qp=6,dmc-,kr-,gng=7,jvbn-,jqjdv=4,fgc=3,qn-,kkr=3,lk-,lx=8,hsg=7,vg-,sns=1,dmc-,vbct=6,fphv-,xpn=4,snr-,mqf-,mv=5,lkhs=6,cnskr-,bt-,gsd-,bql=9,dfg-,pbp-,nfp=1,rqr=9,lgqn-,rnc-,nvkx=9,zr=8,dv-,qqpzl-,pv=5,qzxx=5,vbb=4,gsb-,dbn=7,hz=4,ftvq=5,pbbbq-,npprc-,ljd-,mlnsp=7,xt=9,rds-,htnn-,lx=2,lgqn-,dfg-,mfn-,dlzph-,ccfgz=4,xnv-,kdl-,kv-,jqjdv-,xcl=3,cd-,sx=4,cqln-,vdcgbf-,gdk-,qx-,zxpc=7,js-,bftjnz-,drf=5,rds=4,dhld=1,fvj=6,jqjdv-,nt-,dszdgr-,sns=8,lmzhnr=9,vl=7,mchr-,ljr=4,zllfsp=2,tkc-,jp-,th-,nf-,snm-,tk=7,lr=6,mbrz=5,lg=9,mf-,fvcs-,ng-,fgc=3,dszdgr=1,hqr-,xlp=8,zv-,bfth=6,crc=8,ktd=2,pt-,bb-,cz=8,kr-,pjlqnd-,ng=5,sksnl=8,xlp=9,qk=7,lg=4,ggb-,cthnh=3,xcl-,prk-,mrfm=8,tgv-,flbh=3,dfg=4,ldzsh=9,mhz=8,fj-,xxcd-,rnrnb-,qxfr-,xcl=4,nvkx-,tl=5,gkg=2,kqg=1,qn=2,ccfgz-,zx=3,dlzrj-,mzpv=3,mj=5,pr=6,mrfm=3,jr=7,zq=1,rdjfg-,bc-,jffmj-,ljqx=4,gnzg-,rz-,hjgsff-,lbvhh-,kdxzg=8,txdc-,vcqvm=6,nhn=1,mbxdj=4,mchr=1,sdb=4,ckpr-,gl=9,cc=5,ghf=8,pb-,hq-,fvcs-,nh=2,vlt=6,dlzrj=5,zr=4,fgc-,mr=5,dmjfk=8,qh=6,qh-,nrdj=7,thldhf-,hqr=2,nvkx-,rdf=1,rds-,bftjnz=3,crc-,zvlv-,tnf=4,vpgk=2,fnjjm=6,qkls-,tj-,dlzrj=7,cdzs-,fdv-,dxkj=1,prk=5,jfc=3,kcj=7,gmj=5,hg=2,clp-,cbc=1,gbzld=5,znl-,pcbkc=4,nf=4,qpbmcx-,bzr=8,mhz=8,db=3,cbt=2,ljd-,cb=7,sh=9,sns=8,mzl-,bns-,gqjgt-,xzmn-,cmth-,jfc-,gsb-,zt=9,sdb=3,cz-,mzs=8,bb=6,mnj-,prk-,snm=2,mzcxz=7,nh-,cx=2,xb-,ktd-,btd-,hfsd=9,cbc-,qkls=6,zvgd-,vbb-,hvn-,sns-,clp=2,qkls=9,jph-,nsxz=4,pbbbq=4,gb=6,nbp=5,gvs-,hfsd-,db-,qz-,fvcs=4,rjrt-,chm-,bh=5,zzkj=9,tbf-,rz=8,df=3,gvs-,pbp-,mdh=7,lr-,fgc=5,cbc-,hvkd-,jp-,hmcvr-,rdf-,sbm-,mzpv-,nzp-,rp=7,zr=5,xt=5,sfkx=7,bns-,mkmsq=5,vl=5,ddqn-,tbf=5,chm-,bszgm=5,zqg=4,cmth=4,qpz=6,jsz-,xfg-,xnn-,nkc=7,qzxx-,xvhx-,dmzcdp-,mrfm=1,hnh=2,cnskr=7,pjlqnd-,slhs-,dl-,shxdg=6,mrfm-,kxq=5,hvkd=6,rp=9,zq-,hq=5,nkc-,ptr=1,px-,pv-,vcdt-,bsz-,tsgr-,mbxdj-,tlb-,pjlqnd=3,ptr-,lkhs=3,cd=8,clxn=2,ddj-,pt-,gcp-,dszdgr-,dmdx=6,xcl-,vcqvm=9,cbt=2,nt=5,xvh=4,vcqvm-,mrzjk=3,kdl=6,mpv=4,jffmj=1,gdc=8,sfkx-,qpjs=2,ddqn-,np=4,gjbf=9,ccp-,vp-,kkr=7,nzp=5,tlb=6,hnh-,sb=1,bh=4,kpzk-,kr-,cdf-,gv-,pbbbq-,nh-,dj=7,xkc-,btd=7,csqnhx-,vd=5,nt-,fgc=9,pv-,jffmj-,bkzslt-,nbp=4,ffjdb-,bbvb-,cv=1,cg=9,cdf-,db-,xjsdc-,bzr=8,txh-,dfg-,fdv-,txdc=6,gng-,zx-,tlb-,xn=5,tbj=9,mhz=4,txdc-,snm=9,xs-,mpx-,kkr=8,qx=5,rqr=7,tjtlr-,qh-,dx=2,cffjs=9,jffmj-,qbt-,pcbkc=1,btj-,lk-,hsg-,mflj-,dgf=3,tnz=2,gbr-,mflj=1,fj-,jqt-,hkj=9,ldzsh-,gqjgt-,nx-,zt-,crc=7,fg-,nx-,bql-,vfqcl-,tsgr=5,ftvq-,lmzhnr-,rtt=9,qvx-,zvgd=9,br=1,btd=5,qz-,bfth=9,vcdt-,mflj=2,srs=3,sksnl=8,gdc-,qzppk=5,gnfc=4,qz=4,gz-,qh=1,ns=5,vh-,tnz=7,gngdf-,cnq-,dmc=6,mx-,dcc-,crc=7,tnz-,qxfr=7,fp-,ksxm-,ljr=6,slhs=9,xzmn-,fgc-,rjrt=1,ggb=2,vbb=8,qct=7,xcx-,jd-,jsz-,qzxx-,hg=7,qxfr=6,kb-,tx-,vxrms=3,bzt=4,cdvt=5,zcnx-,mqf-,zqt=2,thldhf-,fqq=4,tq=1,dxkj=2,txdc-,ntr=2,rlz-,pkd-,gp=8,dfnf=7,ghf-,nd=5,nd=2,cc=9,sbm=4,df-,ldzsh=2,ljd-,zt=5,bkzslt=3,rds=9,zzhxk=3,gl=3,mchr-,rlrsn=9,ljqx-,xpn=5,cc=3,hz-,dcc-,ptr=5,mcz-,dx-,clxn-,jqjdv-,thldhf=8,mflj-,thldhf=3,bk-,gb-,jn-,rc-,mf=8,gdk=6,db-,zzh-,lkhs-,chm=6,pn-,kcj-,zvlv=5,scn=4,jn-,kj=8,xnn=7,lx=8,ltl-,zllfsp-,ltvm-,fphv=5,nb=3,ccbrg-,rpdzf-,jbxk=3,xgxt-,np-,gvs=6,nf=6,dzb-,dc=4,sz-,qb-,gvs=5,bbddnc=3,cdf-,rlrsn-,hk=5,ffc-,gng-,xs-,tkc-,kgxc-,cd=4,xb=6,spg-,qvx-,mzs=6,chs-,jn=9,tkc-,tjtlr-,jph=1,ccp-,qn-,kd-,mx-,jqt=8,nxth=1,bz-,qk=4,jqjdv=7,hsg=7,cqj-,qfm-,cjbq=4,xgxt=8,zv=1,hqr-,hmn-,tbj=2,vg-,zxm=2,px-,crx-,dfnf=4,gsd-,dfg=1,zv-,sjc-,dj=4,pv=5,gl=4,hhgm=1,qb-,ldzsh=1,kj=1,kr-,vfqcl-,dv=7,kd=1,snr=1,qvx=8,lsrk=7,xxcd=3,bbvb=7,gngdf-,jgrfm=9,xcl-,zrbm=3,sszv-,qfm-,jfc=6,zx=1,sdb=2,mhc=5,vdcgbf=1,cqj-,rt=2,tq-,gl=3,dl=3,ncv-,xpb-,mdh-,gv=8,mbxdj-,hccrts-,cx=5,pbbbq=9,bns=6,zqg-,ddlg-,sz-,zq=1,lmzhnr=2,prk=6,dxkzcv=6,pq=9,pbbbq-,qk=9,gfrzvg-,ktvs=6,dlzph-,kcbjz-,bns-,fgl=4,dv-,zzsqjx-,kvhx=2,zv-,cc-,zllfsp-,thldhf=6,shxdg=3,zmz-,kd-,scn=5,gqfl=7,xvhx=9,rt-,txdc-,rp=4,ccfgz-,nx-,vcdt-,hg=4,sxk=4,xtp-,xs=9,rqr-,xvhx=2,kpzk=7,xfg-,vnv=1,xfg=9,bk=4,xvhx=8,lj-,hhgm-,tk=8,gzr=6,zd=1,kmjr-,tpdv=5,pq-,xnv=5,rr=3,hg=2,gsb-,zv=9,hz-,kdxzg-,tjtlr-,gngdf=8,cb=4,frrm=2,tl-,mflj-,ktd-,jmrr-,zzsqjx-,prpd=3,kdxzg=4,sz=6,jmrr-,pkd=8,clxn=9,nlm=3,zfxqk=6,cdvt-,kgd=7,bszgm-,ddqn-,jgrfm-,td=3,ng-,thldhf-,qnp=5,pbbbq=3,jqt=4,lk-,dnqzks=2,ltvm-,nh=6,dcc=3,ptr-,lmzhnr=5,mlnsp=3,zcnx-,lb-,hmn-,hkj-,mzl-,qb=4,pv-,jbxk-,nhn-,gsb=4,mr-,nt=9,sj=9,pbp-,qhcd-,xpb-,zr=8,gsd-,sszv=9,ptr=8,qn-,crc-,pkqq=2,dnqzks-,kcj=4,th=4,dd=1,kj=8,qpbmcx-,rdg-,hfsd=3,bbvb=3,cp-,qfm-,qx=8,lbvhh=5,srs=3,zv-,qzppk-,gsb-,lx=9,nkc-,pq=5,zzhxk-,zzkj=9,ftvq=9,ffc=7,cbt=6,zqg=1,crx-,qqpzl=8,rp-,vrgvqd=7,kr-,jc=8,vdcgbf-,xq-,ms-,hz=5,nbp=2,bql=4,qxfr-,pb-,rt=7,xtft-,bzt=4,dfnf-,dszdgr-,tk-,vp=2,jh-,zv=3,lr-,jqjdv-,bsp=8,tlgl=5,xkc=1,sfkx=1,sz=5,fgq=3,hg=4,ccp=3,ld-,gfrzvg-,kxq-,rg=4,hnq=5,xgxt=1,mtp-,zxpc=3,rj-,jfc-,htnn=8,htnn=1,mflj=4,xs-,fc-,vzcjp=9,zg=6,jr=5,pn=9,cd=7,cbt=2,sszv-,vbb=8,px-,kr=6,tr-,hvkd-,tr=9,dlzph-,snr=1,fvcs-,fgc-,xnv-,kcj=6,chs=1,pftzg=1,snm=6,td-,bcd-,bbddnc-,fvcs-,fbm=3,mhz=7,fphv-,ltl-,dmc=8,nbp=9,mbxdj=5,vxrms=1,fskcb-,ffm=1,dd-,gzbd=1,kdxzg-,zzsqjx=7,jvbn=1,sx-,bk-,qnmk-,kmjr=5,mv=7,ccbrg=9,vlt-,djl=9,dmdx=2,xcl-,vxrms=6,ncv=4,drnx-,sz=6,dlzrj=1,kcbjz=6,xcx-,dgl=3,zllfsp=7,ldzsh-,jc-,gls-,lk-,hfsd-,hmcvr-,qxfr=9,nfp-,rc=3,mgc=7,sbm-,nzp=1,vfqcl-,bzr=2,hk-,hk-,lsrk=7,gbzld=4,fgc=3,df-,mhd=4,xnn-,xp-,hqr=9,nsxz=3,tkc-,vd-,lkhs=7,crl-,ffc=9,zvgd-,ftvq=9,tk=6,hj-,zzsqjx-,ccp=1,ht-,kdl=6,lg=2,gbr-,kgd-,tx=6,mrzjk-,rdg-,ltl=3,vcdt-,pxhx=4,kvhx-,zcnx=1,dj=3,fr-,qzxx=4,snr-,ffc-,pr=8,gmj-,qxfr=6,zrbm-,rqr-,jp=3,rlz=3,bb=2,bbvb=9,ggb-,ddj=2,lkhs=4,gd=4,qz=2,sz=6,vpgk-,nbp-,jbxk-,ggb=3,zq-,jbxk=8,zz-,cbc-,xp-,mv=7,sjc-,dxb=3,gdk=7,clxn=9,bx-,xqqt-,ktd-,lkhs=1,lg-,thldhf-,scn-,sb-,jh=1,pbp=4,tkc=8,zzh-,bb=7,gzr=3,bns=3,thldhf=8,bz=8,cqln=2,dxkzcv-,ljc-,mtp=6,ntr=4,sn=1,nt-,qb-,bzt=5,ldzsh=5,spj=7,tqn-,lsrk-,mbrz-,csqnhx=2,kh=7,mj=2,ntr-,dfnf-,qvksmb-,fh-,mcz=6,vg-,lr-,tj-,rdg=9,csqnhx-,ccp=4,kvhx=8,hnq-,dmdx-,gkg=7,fr-,ncv=4,ncv=5,nt=1,qdvrm-,klv-,mpx=8,vcdt=2,ksxm=4,vb-,xtp=3,qpz-,fh=5,qnp-,klv=8,cc-,kr=2,xlp-,dmzcdp-,qfm-,lgx=4,xlp-,vb=4,nlx-,zzhxk-,zzsqjx=8,br-,cqln-,cnq-,jmrr=7,qqbd=4,lx-,gsb-,zllfsp-,zx-,dv-,xzmn=4,bfth-,qzxx=6,pbbbq-,gqfl=2,klv-,ksxm=6,mflj=1,csqnhx=8,fj-,sx-,vdcgbf-,ng-,mchr=1,bsz=8,df=3,gkg-,mx=3,lg-,glr-,qx=6,fgl-,tjtlr=3,xlp=1,bk-,dl-,mhd=7,smkvkb=1,fvj-,gvs=9,nt-,qfm=7,gng-,zr-,bns-,crc=6,jqt=2,ccp-,mfn-,xpb-,cqln=4,br-,ljqx-,rr=5,cdzs-,mzpv-,lmv-,smkvkb=6,hccrts=9,tx-,mkmsq-,cp-,tlb=9,dlzph-,fzb-,jrb-,ljr=9,jr-,bgk=9,mv=6,qh=6,qk-,gvs-,jvbn=6,gv=1,fg=5,rdjfg-,ksxm=1,tlb=7,prpd=4,zx=9,dpv=9,fnjjm=1,vxrms=1,gkg=2,tpdv-,xnv=4,hcl-,zxm-,pbp=6,clxn-,kqg=2,kq=7,tkc=2,tl=9,nt-,ddtj=5,fg=5,cx-,sksnl-,fgl=6,jn=8,bql=5,ddlg-,jqjdv-,nlx-,zrb-,dxkzcv-,xlp-,xnn=4,mrzjk-,hhgm=6,cffjs-,gbr-,ktvs-,bbvb-,smkvkb-,fr-,nlx-,xvh-,mhz-,gbzld=5,gqjgt-,th-,zxm=6,xlp-,dmc=4,gjbf-,nkc-,crx-,qzppk=3,jcl=9,ps-,bp-,xn-,kq-,jn-,klv-,bzr=5,kpzk=9,kcj-,hccrts-,sksnl=4,mzs-,sfkx-,rz=7,xfg-,zt=3,kcbjz=5,dcc=4,ftvq-,dzb-,ddtj-,fc=7,dxkzcv-,tpdv=2,vh=1,hhb=1,vfqcl=4,dnqzks-,zxpc=4,pbp-,xn=6,qp-,mhc-,tlb=8,mpgpxj=5,dmjfk=2,kr=3,hccrts-,dgl-,fskcb=2,xkc=9,vfqcl-,sksnl=3,kcbjz-,mchr=4,vl=2,fvcs=2,mj-,nh-,gzbd=3,lg=8,pvsd=4,mhd-,fp-,mpx=6,zzsqjx-,hvkd-,qp=4,btd=3,fdv=9,vcxh-,mx=4,cv=9,td-,cthnh=7,qh=1,lmzhnr-,mcz=3,ddqn=4,fphv=5,cmft=6,ccp=7,gzbd=8,qvx-,htnn-,mgc-,hk-,xnn=4,klv-,mx-,sfkx-,nzp=2,zrbm-,msq-,fl-,zz=1,zzhxk-,tz-,ngk=8,vbct=2,gfrzvg-,ptc=2,msx=1,cdzs-,cbt=3,sszv=8,kgxc-,mzcxz-,sj=5,mc-,kkr-,ghf=7,bzg-,jqt=9,hnq=9,vd=8,kbbl-,jn=3,pbp=9,vcxh-,ktvs=5,tmg=4,gl-,crc-,zfxqk=6,hsg=4,qz-,snr-,lmv-,qvx=7,vnv-,zx=4,ccfgz-,csqnhx-,gsb-,cc-,gv-,xp-,ktvs-,thldhf=1,vcdt=5,lj=8,lmzhnr-,ldp=5,fh-,ff-,kd=9,nxth=2,ptc-,jqt=3,gqfl=5,gcp-,fbm-,tqn-,ljr-,flbh-,ccbrg-,dmzcdp-,mf=5,kb-,zzh-,crx-,ksxm-,hg=9,rz-,vbct-,tpdv-,xpn=7,kr=7,mx=8,vcqvm=5,msx-,zz-,sksnl=5,ljc=8,xfh-,gjbf-,tnz-,gsb=1,rnc-,gzbd=2,ccfgz-,bzg=6,mhc=6,cjbq-,tz-,cb-,rmmzh-,bb-,gnzg=4,gng-,vlt-,mbxdj=8,kbbl-,ccfgz=3,frrm=9,mzcxz=6,snr=3,drf=9,vb=9,ljqx-,gzr=3,nxth-,mzs-,jbxk-,ddqn=8,htnn=9,zzsqjx=1,cqj-,bvth=4,pkd-,cjbq=1,tnf=5,pn-,rt=3,pv=7,gzbd=2,zfxqk-,qvksmb=3,zfxqk=3,fqq=6,flbh-,vcdt-,xq-,vjd-,nvkx=4,vp-,fh-,ljqx=8,zzhxk=1,slhs-,zt-,dj-,lmv=1,vxrms=9,zllfsp-,vdcgbf=2,cjbq=8,ckpr-,gng-,tl-,cx-,ldp-,vh-,jr-,tj-,kqg=2,prl=7,ghf=9,nt-,mrzjk=2,jd-,clxn=5,mrzjk-,gz-,bfth-,ldp-,dj=3,gls=8,jrb-,br=1,vr-,br-,xvhx=8,btd=6,jrb-,fr=3,bzr-,kvhx=3,cdf-,bfth=6,sfkx=4,bfth=8,mtp=9,nbp=6,qt-,nvg-,rnrnb-,hqr=4,cnq-,jfc-,qct=5,mpv=6,bp=6,ltvm-,cx=8,fp-,zrb=7,kgd=5,jvbn-,jph-,zcnx-,cz=9,zmz=8,xnd=5,qkls=1,nhn-,rlrsn-,dmdx=4,mzpv=5,tj-,gdc=9,sx=3,js=5,mzpv=1,mzpv=4,rz=4,dj=2,dfg-,hg-,kgxc=2,cx-,xp=2,fqq-,ns=5,jsz=7,dbn=5,frrm=1,dxkj=5,gv=8,jc-,tlb=1,ffc-,sksnl-,snr-,hj=2,dcc=8,dxcx-,nbp-,cbt-,gsb-,kcbjz-,nrdj-,vr-,rg-,jn-,sns=3,gsb-,ffm-,fgl=6,zd-,tqn-,hvn=4,ddj-,qxfr-,jbxk=8,qnmk-,ns-,pbbbq-,csqnhx-,jsz=7,cx-,mpx-,dpv=3,cd=6,vbb-,ld=3,hq=8,td-,vnv=2,fg=3,shxdg-,blp-,kd=1,nbp=5,vr=2,btd=5,smkvkb=8,dmzcdp=1,qnp=2,clxn=8,xnv=6,ljr-,hhb=5,ldzsh=2,xfg=3,lmv=1,mfn-,mpgpxj=2,ggb-,zcnx-,prpd-,rlrsn-,mtp-,xpb-,br-,dvhnkm=8,gvs=9,nlm-,kkr-,fvcs-,qn=8,cv=6,tq-,drf=5,ljc-,xvh-,sb-,dcc=5,vbb-,sksnl=7,xxcd-,pkqq-,glr=9,cv-,zzh=6,jph-,xq-,dfnf=8,mj=7,lk=4,vdcgbf-,kh=2,xcl=8,vp=4,pbbbq=1,crx-,flbh=4,pq=3,mqf=8,fl-,vdcgbf=2,kj-,dpv=2,zt-,dfnf=6,hq=8,pv-,qzxx=7,nt-,mtp-,ddtj-,flbh=8,tk-,nxth=6,rmmzh-,lmv-,kdl=1,fgq=4,mrzjk=8,gd=9,chm-,nx=4,pxhx-,vjd-,df-,dgl=8,kqg=8,jh=9,cdvt-,qqpzl=6,chm-,rhg=1,gl-,dlzph-,mflj-,qkls=9,hcl-,zz=6,vjnkzz-,xcl=2,cnq-,zzh-,br-,qct-,bc-,gz=2,jbxk-,cc=9,mpgpxj=6,hccrts-,dj=5,rdjfg-,zq-,fh=7,tz=3,xnd-,tm-,kgd=3,ljr-,sxk-,pq-,csqnhx-,qvksmb-,ggb=3,cc=3,kxq-,gnfc-,nvg-,zllfsp-,kbbl=3,mrfm=1,np-,kh=2,mzl-,fqq-,jc-,pbbbq=8,mx=8,cnskr-,fskcb=5,rdf-,xn=2,dc=7,fg-,jsz-,vd=6,sz-,mrzjk=1,spg=5,jph-,lbvhh-,dcc-,pq-,drnx=6,vd=4,xpb=4,qz=6,kvhx=3,chs=5,lg=3,fqq-,gqfl-,mcz-,fqq=7,vd=4,cffjs=6,df-,msx=8,ddj-,rg=4,bzt=7,nlm-,nvg=5,tlgl=3,qzppk-,gmj-,vdcgbf=5,cg-,zvlv=1,rdg=9,jmrr-,lrj=7,xzmn-,xt=5,kgd-,vp-,th=7,tbf-,qn-,ldzsh-,dxb-,prpd=3,vcxh-,qdvrm=3,mc=5,ksxm=5,cdf-,dmjfk=3,zmz-,tqn-,zx=8,nsxz-,qkls=2,qb-,pvsd=6,jn=3,np-,jd=1,vl=3,tmg=8,bbvb=8,jqjdv=2,rc=9,pr-,lgx-,dxkj-,xtp=9,crl-,dcc=8,dfnf-,hcl=8,lx-,bc-,hnh=1,cqln-,bt=4,bp=8,gzr=5,snr=3,tsgr=3,dmjfk=7,sn-,ljc-,dl=6,npprc-,crl=5,cnq-,jc-,ccfgz-,ccp-,zt-,tqn=6,gsb=8,spg-,zxm-,qzxx=1,qn-,mlnsp-,nhn-,cd-,ff-,mbxdj-,shxdg=6,fgq-,rnc-,zxpc=6,ksxm=8,hvn-,gdc=3,jfc-,vcdt-,ntr-,hvkd=6,hkj=2,xnd=9,vd-,nkc-,glr=4,jcl-,dxb-,vfqcl=8,zz-,ljqx-,dnqzks-,snm=6,rjrt=4,dmjfk-,fgq=8,xt-,mpgpxj=7,bzr-,mzj-,mbrz-,nt-,fg-,fbm=4,xqqt=4,kd=7,kb-,chs-,fc=2,pkqq=3,zfxqk=7,ds-,gnfc=9,zz-,px-,qk-,nlm-,jqt=6,xpn=8,bfth-,ddj=4,mhc=6,xpn=1,bh=6,snr=7,mf-,jn=4,hnq=5,mrzjk=9,kdxzg=5,hmn-,vlt-,xn-,xnv=1,jph=5,mfn=2,tk-,cmft=1,kp=2,mzl=7,lmzhnr-,vfqcl=7,qt=2,vxrms-,hhgm-,jh=7,shxdg=3,rdf-,kpzk=2,cx-,kq-,pt=4,fgc-,rjrt=6,sxk-,nrdj-,sn-,ghf-,bgk-,zvlv=8,xpb-,ns-,jc-,mzj=7,txh=2,fr=4,sb=9,zzkj=4,kxq-,rmmzh=5,btd=5,ntr=4,tj=7,rt-,kxq=5,hk-,xcl-,gmj=5,ffjdb=3,ltvm-,nf-,cnq-,crx=3,rmmzh=7,pbbbq=6,fgc=9,zrbm-,xkc=7,mkmsq-,lbvhh-,rhg=1,ksxm-,kkr-,fgq=4,qp-,dl=2,xvh=1,lbvhh=8,zzh=9,tsgr=3,mflj=4,cdzs=1,qpjs-,vpgk=3,bbvb-,gd=4,xpn=7,kcbjz-,dcc=6,dj=8,cbc=5,ktvs-,ddqn=2,jh-,xkc-,dxkzcv=4,kj-,qkls=2,fphv-,pbp-,pq-,bns=9,nfp=8,pkqq=3,hvn=8,dxcx-,mgc-,cbt=9,br-,bp-,kxq=8,gdk=4,ckpr=3,rz=4,zr-,mpx=9,rdjfg-,ffc=4,np-,qn=5,zvlv=9,tpdv=1,bdm-,cb=7,hzpj-,msq=7,cmft=6,lkhs-,ffjdb-,mpx=7,xn-,lgqn=3,cmft=8,vjnkzz=6,db=9,xpn=2,sszv-,mflj=6,js=6,kgd=9,jj-,gjbf=9,db-,sx=1,crx=8,rc=8,px-,mcz-,dmc=1,lgx=7,nj=3,fj=3,gls=7,tz=8,ktd=6,xlp=7,cmft-,nvkx-,tm=5,ns=6,kmjr-,hk-,xc-,ld=4,lx=7,gng=6,mhz=4,px-,jffmj-,gng=9,bszgm-,rj=1,prpd-,gz-,tbj=3,mqf-,tjtlr=3,ms-,xpb=5,rt=6,vzcjp=5,smkvkb-,ps=1,zzkj-,kqg-,qhcd-,mbxdj-,jd-,dvhnkm-,gsd-,gz-,znl=8,dgl=1,gl-,dx=1,xxcd-,nx-,vcxh=9,gsd=1,ccp-,dzb-,zr-,tl=2,gkg-,vjd=4,nkc=5,bb-,fdv=1,zqg-,vl=2,bzt-,nxth-,htnn-,tlgl-,bz=5,ktvs=4,dxcx=9,cmth=8,gkg-,snm=5,htnn=8,xfg-,thldhf=6,cqln=3,crc-,fphv=7,jph-,br-,ncv-,mr=7,cx=5,dmzcdp-,fp-,gzbd-,nvg-,tlgl=2,kkr=3,mpv=9,srs=3,gnfc-,fl-,kcj=2,fvj-,qn-,qp=8,dzb-,mv-,qz=6,fvj-,ng=4,tr=1,kvhx-,ldzsh=1,vfqcl-,tz-,tr-,nf=9,dnqzks=7,nvg=4,txh=5,hz=2,rt-,btj=1,dgf-,gd=9,dxkzcv-,lg-,mr=9,mzcxz=7,dv=1,xvh-,bfth-,qzppk-,hmn=6,dszdgr-,flbh-,hccrts=1,jrb-,bb=4,cd=6,fh=8,gcp-,xcj-,qdvrm=9,bzr-,msx-,mzs-,xnxr=2,gp-,nbp-,nvg-,np=8,clxn-,vh=3,np-,rgs=2,cqj-,pftzg=1,rpdzf=8,jsz=8,xlp=3,nhn-,mgc=7,ps-,gvs=2,cd=6,jvbn-,qpjs-,ltvm-,kxq-,gkg=8,bsz=5,qqpzl-,mflj-,mrfm=1,gjbf-,tnz-,bx=8,cdvt-,dmjfk-,gqfl=2,jgrfm-,gnfc-,rdg=8,nd-,mzl-,kcbjz-,blp=4,sjc-,fgc-,kmjr=7,fgq-,mzj-,vh=8,bzg=5,nh=4,dc-,sj-,kgd-,qb=6,ncv=7,nh-,tq-,xcj-,sksnl-,vb=7,dl=4,bsd-,rlz-,jmrr-,pb-,sjc-,mnj=6,qh=4,hbd=8,gzr=2,js-,gng-,dxcx-,gqfl-,gz=5,fzb-,vh=7,sszv=1,jn=1,bzg=8,vl-,ddtj=8,jnr-,dcc-,dmjfk-,ccp=3,qnp-,mqf-,xvh-,rj-,mr=6,mtp-,fgl-,mrfm=7,qdvrm-,lgqn-,tgv-,mhd=8,rtt-,kqg-,fnjjm=9,bftjnz-,cthnh=2,frrm=5,slhs-,xjsdc=3,hz=3,hk=8,zz-,mqf-,sh-,dgf=6,fgl-,td-,mchr-,mgc-,xcx=8,mchr=5,gz-,sj=5,dl=8,dfg=8,pftzg=9,snm=2,vcxh-,mzs=7,lsrk=1,pt-,vpgk-,cffjs=4,gdc=6,rtt=3,xnn=7,cmft-,qxfr=2,dfg=1,ps-,jcd=5,ffc=3,xs-,qpbmcx-,fphv=3,rc=5,rtt-,dmjfk=6,nrdj-,zllfsp-,qp-,zxpc-,tl=7,rdg-,kv-,qct-,qvx-,gp-,qdvrm-,thldhf=2,msx-,hj-,ltvm=5,dpv=2,ffjdb=3,clp-,sszv-,cd-,zr-,cdvt=5,kpzk-,clxn=9,dj=2,xvh=3,sbm=7,cbc-,ms-,xpn=2,pq-,gvs=9,xqqt-,zf-,hsg-,js=6,mdrj-,gnfc-,lgqn=6,prk-,bsz-,kjpxpp=8,tqn-,mbrz=7,cthnh-,mzcxz=1,mpgpxj=7,gfrzvg-,qn-,zfxqk=9,hvkd-,bz=7,xt-,ffc=5,bx-,kgxc=2,df-,bp-,sksnl-,bk-,bsp-,mbrz-,tm=7,lbvhh-,pjlqnd=5,jd-,mlnsp=5,sj-,pftzg-,gqfl=7,zfxqk-,gd=7,hbd-,qk=4,pftzg-,bc=8,fvcs-,hmn-,rgs=2,vb-,dd=1,msx-,nv=8,fgc-,xb=4,chch=3,clxn=1,ngq-,hk-,txdc=5,ksxm-,lb=3,bb-,pn-,cd=5,ffm-,xb=6,xgxt-,fc=9,qnp=2,sx-,mzs=3,kd-,zq-,zxg=6,lkhs=8,bzr-,cb=2,xnd=1,tx=3,mflj=3,csqnhx=1,htnn-,xpb-,kh-,blp=8,dcc-,pjlqnd-,rjrt-,qqpzl=5,np-,ghf-,tkc-,frrm=7,rnc=6,dd-,nkc-,gl-,nd=9,fbm=8,zqg-,pxp-,qpjs=4,ddlg=2,cbc=3,tj=9,vd-,sszv=8,kj=9,jbxk-,td=5,bbddnc-,xs=5,zd-,btj-,gsd-,dszdgr-,sfkx=7,zf=5,sksnl=3,zfxqk-,lg=1,zf=1,mhc=6,lbvhh-,vdcgbf-,kd=6,qqpzl=3,zllfsp-,frrm=4,jrb-,xcj-,pvsd=5,pcbkc-,zrb=7,jh=9,dfg=9,tk-,hk-,ftvq-,ds-,cg=6,ldzsh=2,vp=6,gls-,cdf=1,sz-,kdl=1,gkg=7,rjrt=5,ghf=2,qn=9,hq-,jc-,shxdg-,qnmk=3,pb=1,jc=6,zqt=1,gqjgt=5,lk=3,qpz=2,xnd=6,nx-,kkr-,rj=8,qnp=1,xjsdc-,ffm-,dv-,xxcd=7,zmz=3,hmn=6,ktd=4,xs-,vg=8,hqr-,kdl=2,thldhf=9,dx=4,dmjfk-,mpx-,bsd=5,fc=7,snm=9,cqj=8,nrdj=4,tnf=5,qvksmb-,vdcgbf=2,tq-,nlx-,sx=9,fqq=1,clp-,tgv-,ncv-,pkqq-,bzg-,mhd-,snr-,dc-,gb-,kqg-,sjc-,kh=8,bbddnc=2,qx=2,bt=6,dpv-,lbvhh=8,kb=7,sz-,dnqzks-,gz=8,zrb-,htnn-,fbm-,zz=5,fvcs-,chs=8,crx-,qt-,qct-,hzpj-,sn=7,tr-,qn-,kgxc-,qx-,xfh=2,qqpzl-,rlrsn-,ddlg-,ccp-,gb-,qp-,tl-,dj=6,fskcb=2,jh=1,fphv=3,ht-,sjc=3,dxb=7,ffjdb-,mlnsp=2,gfrzvg=6,jsz=7,tbf-,mhz=3,bsp=5,mqf=7,zzsqjx=7,ftvq=7,xcl=4,xc-,fnjjm=1,pr=4,thldhf-,qz-,fnjjm-,zd=7,vd-,xcj=3,bsd=2,chm=7,lb=7,gz-,tz=1,bx=1,cbt-,kgd-,mpv=5,cthnh-,bbddnc-,clp=7,zrb=3,pq-,rdg=6,vcdt-,ng=6,gqfl-,jsz=4,nvg-,nvg-,vg-,xtp=9,kb=5,xnn-,fh-,tl-,qxfr=1,kq-,qlz=4,bp-,vg=8,kgxc=3,rnc=9,bns=2,mhd=7,hmn=6,xt-,zx=3,zvgd-,ddlg-,vcxh=9,rdf-,hvkd=3,fphv-,vnv-,rdg=9,zr=3,tgv-,qb=5,tj-,ltvm=4,dszdgr=2,cqln=9,bfth-,lr-,dszdgr-,ffc-,pvsd=3,rc=5,ps=2,bbddnc-,blp=5,xpn=4,pkd=1,xq-,kpzk=9,gdk-,lg-,mqf-,xvh-,ps-,csqnhx-,msx-,txdc=6,ljc-,rnc=2,zzkj=7,zf-,nj-,cd-,zcnx-,ddtj-,frrm=9,gz=6,ps-,hz=9,qpbmcx-,bzt-,rhg-,ghf-,bzt-,chch=6,qhcd-,hfsd-,xvhx-,hzpj=1,hnh=7,xnv=6,dmzcdp-,kqg=3,kvhx=4,dxkj=9,nvkx-,gnfc=3,bvth-,btd-,bsd-,nf-,tpdv=1,mpv-,kh-,kdxzg=9,bk=6,zzhxk-,prk=7,bzg-,fr-,rnrnb=4,dl-,bgk-,xtp-,nrdj=8,kvhx-,pftzg=3,vlt-,cg-,qz=2,pcbkc-,gbzld=3,gng=6,cjbq=5,rc-,kkr-,qdvrm-,xcl=2,rj-,tlgl=6,kxq-,jn-,vbct=1,nvg=6,jbxk-,gz-,zcnx=9,jp=9,mpgpxj=4,cp=9,mgc=3,rtb=9,rtt=4,dszdgr=1,spg-,ps-,ldzsh-,cbc=5,bp=7,vdcgbf-,qkls=2,mzj-,gp=4,sxk-,xn-,gz=7,hfsd-,jfc=8,mhd=3,cv-,drf=6,dnqzks=6,tbf=1,rc=4,hqr=9,kr-,mhd-,tbf-,rgs-,jfc-,qlz=5,mpx-,dgl=5,zq-,dcc=7,vr=7,ff-,jrb=9,msx=8,xcl=4,hmcvr-,fvcs-,qn=7,xqqt-,rnrnb=9,ngq-,fl-,gsb-,xcj-,cthnh-,rg-,rr=1,kvhx=5,srs=7,gd-,xtft=4,ff-,gnfc-,gdk=7,cnskr-,xnd-,mpgpxj-,chm=8,gp=1,mfn=6,gqjgt=2,tm-,db-,mcz=6,sn-,zfxqk=6,qvx=3,kdxzg-,hfsd-,cb-,pv-,lmzhnr=1,ngk=5,rt-,hnq-,nvkx-,kgxc-,qnp=1,pftzg=2,pbp=3,rmmzh=7,sn-,mj=2,kvhx-,fr=7,rt=9,jbxk-,csqnhx=7,vd-,dxcx-,gcp-,dcc-,mdrj-,qpz=6,qhcd=6,vp=7,vr-,spg-,bzg-,rdf=7,ns-,vd-,lsrk=6,vcqvm-,hjgsff=4,gfrzvg-,rdjfg-,pv-,kq=6,cb=7,fnjjm-,xcl=5,mlnsp-,tz=4,cc-,zzh-,mf=7,ddqn=6,snm=8,bsz-,rj=9,snr-,pvsd=7,mpx-,dfnf-,qx=7,jgrfm=1,cg-,sh=3,pftzg=7,msq=9,sjc-,zxg-,ffc=1,ldzsh-,sh=2,sh=6,jfc=2,rtb=7,pkqq=5,dxcx-,js=8,kv-,rlrsn=9,sz=6,df-,dlzph-,gbr=6,dgl-,ms-,hfsd-,mv-,js=6,mdrj=4,bsz=7,fl-,td=5,sj=6,mj=8,dl-,ntr=5,sj=7,crl=9,pn=2,xcx-,lbvhh=6,lr=2,bcd=9,br-,rnrnb=5,flbh=5,jbxk=7,fc-,rg=4,vbct=8,ncv-,vl-,rjrt-,lgqn=2,bbddnc=3,vblz=4,pvsd=2,gqfl-,sb=9,lg-,kh-,ffc=3,zzhxk=5,sn=8,kb-,bz-,tq=7,qn-,zfxqk-,ngq-,mrfm-,ccbrg=9,btj=5,ffc=8,dxkj-,kpzk-,dgf-,dlzph=9,csqnhx-,nsxz-,klv-,hmn-,qpz-,spj=2,cp=8,jcl=8,xvh-,rlz=4,vxrms=5,dmdx-,nj=2,hfsd=4,sfkx-,vzcjp-,sbm=7,mbrz=8,qx-,vr-,sx=8,qbz-,dj-,ns=3,kgd=7,dlzrj=7,lmv-,ktvs=3,gkg-,xcx-,gb-,bt-,bx=6,tx=4,dj-,chm=6,lk=1,chs=8,tjtlr-,lkhs-,spg-,bzg=5,mr-,ng-,flbh=9,zqg-,mzpv-,xs=3,jd=8,klv-,nv-,cffjs=6,xs-,lrj-,vb-,hqr=7,hnq-,xs=7,zrb=3,qxfr-,bzr-,xt-,jqt-,sszv=4,gvs-,npprc-,cffjs-,bt-,tnz-,gqjgt-,pxp=4,cz=3,mzj=6,dxkzcv=9,xvh=2,sz=6,kqg-,pjlqnd-,ljd-,ldzsh-,nzp=6,mgc=6,qkls=5,prpd-,tlgl=5,dbn=4,mkmsq-,vbct=6,mr=4,chch=2,xqqt=1,hg=3,hhb=5,tq=9,qlz=5,glr=2,rj=2,jgrfm=8,fdv-,tsgr-,gb=2,zzsqjx=1,ht-,jrb=3,dlzph-,mzpv=5,nj=8,kpzk-,jc=2,pxhx=7,hhb-,gmj-,xtp=8,gv=2,mflj-,smkvkb=4,mfn-,mqf=9,prpd=2,ngq-,hnh=1,snm=6,rnrnb-,prk=1,nhn-,vdcgbf-,bftjnz=7,tz=7,hmn-,zrs=1,pv-,kgxc=1,hmn=5,pftzg=5,pcbkc-,ktd-,qqpzl=5,clxn=9,btj-,bgk-,rnc-,mbrz=3,kgxc=3,xcx-,dpv=9,ckpr=1,qqbd-,ljc=7,qz=4,zzsqjx=7,sbm-,hsg-,hfsd-,pkqq=8,hccrts-,zvgd-,ckpr-,fbm=1,nt=8,tx-,ffm=3,jnr-,bgk=3,zq=8,rgs-,nf-,cmft=3,rlrsn=1,xnv=6,xpb-,mr-,vrgvqd=6,ngk-,cg=6,pkd-,lmzhnr=8,vb=7,bgk-,gnzg=2,spg=4,tx=4,fphv=7,spg=4,xjsdc-,vfqcl-,nv-,qfm=9,dpv-,cnq=5,vdcgbf=5,jbxk-,rqr-,ltl=8,xvh-,ltvm=1,xcj=1,bzr=2,zqt-,jqjdv=9,gsb-,gmj=5,bvth=1,qt=8,jr=9,spg=9,mbxdj=7,db=5,ld=8,qt-,tjtlr=4,kbbl-,cjbq-,gqfl-,msx-,rz=7,bt-,kdxzg=8,tbf-,jr=1,cdzs-,ng-,jj-,hvn=2,bzt-,bh=5,qct=8,sbm=1,xjsdc-,dlzph-,lkhs=2,zcnx=6,qbz-,qpbmcx=3,rlrsn-,bt=6,bql=6,kvhx=9,pxp=5,dj-,kqg=7,tjtlr=8,zvlv=2,kq-,dmzcdp=1,qt-,xb=6,mc-,zrbm-,mpv=6,tjtlr=9,mrzjk-,dj-,kqg-,jsz-,fl=7,kgxc-,kcj=7,jvbn-,gzr=6,mgc=9,xs=4,spg-,ksxm=9,mzl-,mpgpxj=1,jph=3,chch=7,hg-,hhb=1,cmth=8,vcqvm=7,xjsdc-,tl-,ffjdb=3,hqr-,kvhx=5,vdcgbf=7,rj-,rmmzh-,clxn-,vxrms=3,nx-,qnmk-,dxb-,fdv=4,rjrt=7,nzp=6,mdrj-,jcl=8,cthnh=5,kr=3,xcx=3,vg=2,vg=3,xt=3,ntr-,nxth-,hccrts=2,zmz-,qbt-,tsgr=7,qqbd-,srs-,fphv-,bsz-,gnzg=4,ddlg-,xn-,znl-,btd=5,ltvm=4,fgc=8,chs=4,gzbd-,kqg-,dpv=5,vr-,lg-,zxg=4,hccrts=5,px=8,pkd=7,kvhx=3,rj=7,qvx=7,qdvrm-,ldp-,jd=2,rqr-,smkvkb=1,xfh-,qnp=1,zz=7,sdb-,ps=6,nd-,mdrj-,vfqcl=1,zvgd-,ljd-,vfqcl=9,hccrts=7,rp-,mj=5,mzj=7,nv-,nfp-,tmg=1,cd=4,jgrfm-,qqpzl-,glr=5,drf=9,zvgd-,rgs-,mnj=9,qk=3,vjnkzz=1,hnq-,bvth=3,dfnf-,xfh=5,kq-,bql=9,xcx-,vd-,hmn=7,nxth=1,mlnsp-,kdxzg-,zzkj=6,gqjgt=4,rlz=6,xnn-,glr=6,dfnf-,btj-,tk-,xnv-,jr-,dxb=8,qfm=3,sdb=4,hj-,gnfc-,lgx=5,fj-,mzs-,fgl-,hg=4,vcxh=9,mbrz=4,zxm-,jmrr-,hhb-,csqnhx=7,vh-,ff-,mgc=5,pxp-,xtp=6,kdxzg=7,hqr-,vjnkzz=6,btd=8,df=9,vcqvm=9,lg-,scn-,rtb=8,dv=9,zzsqjx-,jnr=1,bp=3,kcbjz-,sksnl=5,mr=5,cbt-,jd=9,bz-,rdg-,djl-,nvkx=4,ddj=2,zfxqk-,fdv-,dnqzks=2,nsxz-,bzr=2,bx=4,pxhx=7,cqj-,zx=1,qp=1,rlz-,mflj-,ff-,rlrsn=9,ntr=1,ccbrg-,xgxt-,rgs-,ntr=7,bsd=7,zcnx-,qt=3,slhs-,bx=7,ff=3,lb=7 \ No newline at end of file diff --git a/2023/Day15/solution.cs b/2023/Day15/solution.cs new file mode 100644 index 0000000..d3e1609 --- /dev/null +++ b/2023/Day15/solution.cs @@ -0,0 +1,45 @@ + +using System; +using System.Linq; +using adventofcode; + +namespace aoc2023; + +public class solutionDay15 : ISolver +{ + public void SolvePart1() + { + Console.WriteLine("Day 15, Part 1"); + + solutionBase solutionBase = new solutionBase(); + var input = solutionBase.getInputString($"2023/Day15/input").Split(',').ToArray(); + + var sum = 0; + + for (int i = 0; i < input.Length; i++) + { + var currentValue = 0; + var currentSequenz = input[i].ToArray(); + + for (int j = 0; j < currentSequenz.Length; j++) + { + var currentChar = currentSequenz[j]; + var currentAscii = (int)currentChar; + currentValue += currentAscii; + currentValue *= 17; + currentValue %= 256; + + Console.WriteLine($"currentChar: {currentChar} currentAscii: {currentAscii} currentValue: {currentValue}"); + //Console.WriteLine($"currentChar: {currentChar} currentAscii: {currentAscii}"); + } + Console.WriteLine($"currentValue: {currentValue}"); + sum += currentValue; + } + Console.WriteLine($"sum: {sum}"); + } + + public void SolvePart2() + { + Console.WriteLine("Day 15, Part 2"); + } +} \ No newline at end of file diff --git a/2023/Day15/test b/2023/Day15/test new file mode 100644 index 0000000..62f7ed0 --- /dev/null +++ b/2023/Day15/test @@ -0,0 +1 @@ +rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7 \ No newline at end of file diff --git a/2023/Day15/testExample b/2023/Day15/testExample new file mode 100644 index 0000000..0edd2d9 --- /dev/null +++ b/2023/Day15/testExample @@ -0,0 +1 @@ +HASH \ No newline at end of file From a4ec2dc667efd56bb1c0a18d03c52c7ce576a79d Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 16 Dec 2023 13:53:54 +0100 Subject: [PATCH 11/14] solved day 12 with help --- 2023/Day12/input | 1000 ++++++++++++++++++++++++++++++++++++++++ 2023/Day12/solution.cs | 453 ++++++++++++++++++ 2023/Day12/test | 6 + 2023/Day12/testsingle | 1 + 4 files changed, 1460 insertions(+) create mode 100644 2023/Day12/input create mode 100644 2023/Day12/solution.cs create mode 100644 2023/Day12/test create mode 100644 2023/Day12/testsingle diff --git a/2023/Day12/input b/2023/Day12/input new file mode 100644 index 0000000..5243f40 --- /dev/null +++ b/2023/Day12/input @@ -0,0 +1,1000 @@ +#??#???.??#?#?#??#?. 6,8,2 +?????????#?#.#?.?.# 4,3,1,1,1 +.???#?#????..????. 1,4,1,1,2,1 +??????#?.?. 3,2,1 +?.?????#???#???#?? 3,1,2,5 +????##???????? 2,4,2 +?#?#?#??.?? 6,1 +.??#????##?##???..?. 2,9,1 +.???????#????#??#? 2,3,5 +.?#??????##? 7,3 +?????.???# 1,1,4 +???#?#??##??#?#??#.# 8,1,4,1 +#????#????#? 1,2,5 +###.?##?.?#??. 3,3,4 +??#?.??##? 1,3 +.?#???.??????###.??? 4,1,1,3,2 +??#?.?#?????.? 3,6 +?##?#???.?????? 4,1,1,2,1 +?????#????##??.# 1,9,1 +.????#????###?..?. 8,4,1 +##??#????? 2,1,3 +.????.?#?#?#?##?? 1,8 +?.?#?.?#????#???.? 1,2,1,4,2 +.?#?#?#?.#??#???##? 1,4,5,2 +??????#????? 4,1,1,1 +???#?????? 1,1,5 +??????????. 1,1,3 +?#.???????#? 1,7 +?????#???### 1,1,2,4 +??.?#???#. 2,3,1 +??..?.??#?.#? 1,4,2 +??.????????. 1,4,1 +.??#.??????#?.?#?? 1,1,1,1,2,3 +?.?#..???. 1,1 +???#?????????. 4,2 +#?????.?????? 1,2,1,2 +?#???????..# 2,2,1,1 +?#.?#??#?????? 1,5,1,1 +.#..?#????#??#? 1,4,5 +?..???..?#?#?#?.? 2,6 +???.?????#??#?. 1,1,6 +?#?.#???????.? 1,6,1 +.?#??#???##?#? 9,1 +.##??#??.##??? 2,1,2,1 +.????.?#?# 1,1,3 +#??#..??#???.?##?. 4,1,1,1,2 +..#?#????#? 3,3 +?#..##?.??##??#. 1,3,3,2 +??.????.???? 2,1,2 +????#?????.?. 3,1 +?#?##???#.?##? 8,2 +????#.????.???#?? 2,2,1,1,5 +..?.?.???? 1,3 +?.??????????# 2,4 +?.?.?..?##?? 1,1,3 +????#????.?? 2,2,1,1 +?.#????.##???#??#.? 1,1,1,3,5,1 +?????##??#????? 7,1 +?.???#..?#?.? 1,2,2 +?#??##???#?.? 5,1 +???#..?.#?#?##??# 1,1,1,7,1 +??????#???.?#.??? 1,4,2,2 +##??????#.??#? 4,3,3 +.?.??#???.? 1,5 +??#?.???#?? 1,3 +???????..??? 1,2,1,2 +#????.?#?#???##?? 1,2,3,5 +?????????.? 1,2,1 +..#?????.?# 4,1 +#???.?##?## 2,1,5 +???#.???#?. 1,1,2 +?.?#.?????#?? 1,2,1,3 +?.??.?#?#?#?#??#.??? 1,1,10,1,1 +??#????????.??????? 7,3 +.?#??.#???? 4,5 +??????.??? 1,1,1 +??##?..???. 3,3 +?????##.???.?#?.. 3,3,2 +????.?..???? 3,1,1 +???????#?#??.#???. 1,7,4 +.??#?????#.?? 1,4,2 +?????#?#??.?.#?? 8,1,1 +????#.?.????#???#? 1,1,1,3,1,2 +?????#..?.???.#??#? 6,1,1,1,2,1 +??#???#?.?? 2,1 +??#.????????##??#? 3,2,7,1 +?.?????#??.? 3,3,1 +.#?????#?#?##?.??? 2,3,1,2,1 +?#?#??.?##?###???# 1,3,10 +??.?????.#???.? 1,2,1,1,2 +??????..?? 5,1 +??.??.??#??.#? 1,1,3,1 +??.?.#?.?..?? 1,1 +#.?#??????#.##?.?#. 1,1,1,1,3,2 +#?###??##?##??#??? 5,9 +???#.??????#.#? 4,5,1,1 +??.???#####?# 1,8 +?????????#??????? 2,1,5,1,1 +?..?#??.?# 3,2 +??#??.?.??#. 5,1 +?#????##.???#. 8,2 +??.?????###?##?????. 2,1,9,3 +#???#?.??#???# 2,2,3,1 +?????###????#????. 7,1 +???????.??..?? 1,3,1,1 +???????????????????? 3,3,1 +#??????.?#?## 6,5 +#??##??.?#???.??? 7,3,2 +#.??##??#??####????. 1,13,1 +?#.?????.##??. 1,3,3 +#??.??#???.???#????? 3,5,6 +?.??????.#??.?. 1,2,2,3,1 +.????#???#..?#??# 4,1,5 +????#?????? 4,2 +???#????## 4,3 +.#?.???#?.. 1,3 +??#??#?????#?.?? 5,5 +?.?.#?#?????????#??. 1,1,1,2,1,8 +?###.???..?.#???? 3,1,1,1,3 +.#??#??.???#????.# 1,1,5,1,1 +????...?.?.#??? 1,1,1,4 +???##???#?#??..?. 2,7,1 +??#.?.?..?? 3,1,1 +##?#?#?????#???. 7,1,2,1 +??????????#?.#? 5,2,2,2 +????##??##?#??..??? 13,1 +???#???#???#???#.#?? 1,7,5,1,1 +.??????###.???? 8,1 +?.##???.?????#??? 2,1,1,5 +.???#??##???????? 1,5,5 +?????#??.????. 1,2,3 +????#?#?..???## 1,4,4 +???#????##?##?##?.. 4,1,9 +..#??..????? 2,1 +???#.?????? 2,1 +???#...#???.?? 2,2,1,2 +??#??#?????# 3,2,3 +??#??????.???? 1,2,3 +???.??.?#?#???#???. 2,2,8,2 +#?????##??????#???. 11,4 +???#?#????. 1,4,1 +?##????#?#?.#. 2,1,4,1 +#???#??????#? 8,3 +#???#.?.#?.# 5,1,1,1 +???????.???? 1,1,1,1 +??.?????#???? 1,6,2 +?.?.?.??#???. 1,1,4 +?????#???????#..???? 1,3,2,2,2,1 +??#?.????? 1,3 +???###??..##.?? 1,5,2,1 +??###?#???#?. 7,2 +?.?#????#?????? 1,1,1,3,1 +.#?????..? 1,2,1 +?#?.?#?????????.?? 3,10,1 +.???#???????..????#? 6,5 +##?.???????? 3,3,3 +.?##???.???###?.??? 3,6,1,1 +.#??????.#?.???? 1,1,2,2,1 +##?###??????????. 6,3 +??.???#??#???.#??#.# 2,9,2,1,1 +.??.###???????.#?? 2,7,1,1,1 +?.##???.?. 4,1 +.#?..?????#?????. 2,2,1,5 +.?????.#??.? 2,1,2,1 +.??.???.??..?## 2,2,2,2 +??.???####?##?.???? 11,1 +???.#.?#????.???# 2,1,3,1,1 +?.??.?#???? 1,2,1 +??#.?????#????..?#? 2,3,3,1,2 +.?.?#??#????###??. 1,14 +##??.??#?. 3,1 +.#???..???? 1,1,2 +.???.#?.#...? 2,1,1,1 +?#??????#??#??#?? 9,5 +.????#??????###.? 1,1,1,1,5 +???#??.#?? 1,1 +?#?.?#?.#???#?#? 2,3,2,4 +?????#?#?????#?? 1,1,1,9 +#?##??#?.#???. 1,5,1,1 +?????##?????.??? 1,9,3 +?.??##???#???.?? 1,6,2,1 +?###???????.. 4,1,3 +#??..???#??# 1,1,4,1 +??.?..#??#???###?..? 1,1,1,7,1 +??????.????? 2,4 +??????.??. 2,1,2 +.#???????????? 3,4,1,1 +.#??..#????? 2,1,3 +.?.??.????##???? 1,5 +?#?????#?#??# 5,1,1,2 +?####??.?.??.? 6,1,2,1 +.???#??#?.?.?#????# 4,7 +...??????#? 1,1,2 +???#.#??#??? 1,1,1,2 +?.?#????#??#???.?? 4,5,2 +..????#???.?#?. 5,2 +??..??#??????????? 8,1 +?#??????..?.? 2,4,1 +??#????.?? 3,2 +??.?.??????? 1,5 +?#??????#??###?#?.?? 1,2,9,1 +.???.#????#??#? 3,2,1,1,3 +????.?#?.??????? 2,4 +?.#????#??#?? 2,5 +?.##???#??????#????? 1,6,8,1 +.???.??.?..???? 1,3 +??????????? 2,3,2 +.??????#?.?#.????.?? 1,6,2,1,1 +???..?????? 1,4 +??##?????... 5,3 +.??#?#????.?? 3,4,2 +??#.???#?????# 2,1,5,1 +#.??##??#?.???? 1,8,1,1 +?#?#??#?.?#?#??#?.? 7,7 +??#????????? 3,2 +?#..#?#????? 2,6 +??##.##??#??#??.??. 2,6,2,2 +??.??.?.????? 1,2,1,1 +????#???????#? 4,2,2 +.?..?#????????????.# 1,4,1,4,1 +???????#.??? 1,5,1,1 +????#.#??#???????#? 1,2,2,1,7 +?.???#.?????? 1,4,1,1 +.??.#????##?? 2,4,2,1 +#????.#?## 4,4 +???#?.??.???.?#?.?## 3,1,3,1,3 +??.?#?????????####? 1,3,10 +?.?#?????#??##??..?? 6,1,2,2 +.???#??#?. 1,3 +.?????###?. 1,1,4 +??#?.??????#??? 1,1,4,2 +.?#?.????#??? 2,3,3 +?#???.????#???. 5,3,1,2 +#???#??#???#??#?. 2,3,2,2,3 +?.??????##???.???? 7,1 +???#.##??##???# 2,1,3,3,1 +????#?.?#?#???. 6,6 +.???#????? 4,1,2 +????#????##?#??? 2,8,1,1 +.??????#?? 1,1,4 +???..###.?##?##??? 1,3,6,1 +####????.???.???.? 5,2,2,3 +.??..?????.??.? 1,2,1 +????..?#.#????? 4,2,6 +???.?#????##??? 2,7 +???????.?.#..### 1,2,1,1,3 +#????????????? 3,4,1,2 +???..#????????#???? 2,11 +.???.????#?? 1,2,1 +.?#?????..???. 6,3 +.??????.????? 1,2,3 +..???#?#?#?????#??.? 9,4,1,1 +?##?.??#????#..##?# 2,1,2,3,2,1 +.#?????#??##?? 1,1,4,3 +?#???#????? 1,1,5 +.?###..??.?#????? 4,1,5 +????#???.. 1,1,1 +??#????????..???# 9,3 +.?#.?#.?.?. 2,1,1 +??#??#?.????????#?? 4,3,3 +#????..???#??.. 5,3 +.?#?.??#?.???#. 1,4,3 +#???#????.? 1,2,2 +.#????.??##?????. 5,5,1 +?????.???????# 4,1,2 +.?.?###?##???????## 11,3 +?????#?####???.??##? 1,6,1,3 +?#.??.#??##?.##??? 2,1,1,3,2 +..???##.?.? 5,1 +???.?.???? 2,1,1 +?.???#?#?.?#.??.# 7,2,1,1 +?????.??.? 1,2,1 +???.?.##??#? 1,2,2 +?.#????##???????.?# 8,1,1,1,2 +.??#.?#???#?? 2,8 +.?#?#?.?????#??#?# 5,1,4,1 +??##????.#..? 4,1,1,1 +#????.????????????#? 5,2,1,1,2 +?..#????.???.?.. 4,1 +?#?.???#???.????? 2,5,1,3 +??#??#?#??.?#?##?? 2,6,4 +??#?##?.?????? 5,2 +?.?.??.?#?? 1,1,4 +?????.?#??? 2,4 +.????.?#???? 1,1,2,3 +.???????#???? 1,2,2,1 +??.??#?????? 2,8 +???.??????? 1,1,2 +??#??#?##????#.?? 1,4,2,1,1 +?##?????#??#.?#??#? 3,4,4 +..???#?.?.#?#?.??.? 1,3 +??????###???? 1,3,2 +?????#???.?#?#?##? 1,1,3,1,6 +#????????????.?.?#? 1,1,8,1,1 +??#????##?#??????.. 1,10,1,1 +?##?.???.??? 4,1,1,1 +.?.???.#??# 1,1,4 +?#.???#?#?????..## 1,1,8,2 +??#??.??#?????# 3,1,1,4 +?????#?#??? 1,8 +???.?.????? 2,1,1 +??#?.#?????.???.??? 1,1,1,3,3,2 +??????.???#?#????? 1,1,1,6,2,1 +??#?????#??.????..? 3,2,3 +#.?.??????.??. 1,1,3,1 +?#?.#????#???#?.???. 1,3,3,2,1,1 +??##??????.?..? 6,1,1 +???????#?.#??. 6,3 +???#.????#??.#? 2,1,1,1,2 +##???#?#?#?? 2,2,1,2 +???????..## 2,2 +??#?..?#??#?#.??? 1,7,2 +???####?#?#.#???#?? 9,1,5 +.?#?.#.???#?.? 2,1,4 +????..??#..?. 4,1,1 +??????????..??? 9,1 +####?#?#??.???????? 10,1,1,1,1 +#?#??#??#???????.?? 6,1,1,1,1,1 +??.????????#? 1,1,1,3 +#?..##?.???? 2,2,2 +??#?????#?????.? 1,5,1,2,1 +.?.?#??###??#??#?# 1,14 +????????.????.?? 5,3,1 +???????????#.?? 6,1,1,1,1 +?.?.???#???. 1,1,2,2 +#??#?????????? 1,1,1,7 +?????#???# 1,4,2 +?.??..#??. 1,1,1 +.???#??#????????? 2,1,2,3,1 +?#??.???#????#? 2,2,1,1,2 +?###?????.?? 3,2,1,1 +???????#?.????? 2,4,2,1 +???..?#???#?.??? 2,1,1,2,2 +#.#???####. 1,8 +?.???#??????? 1,2,2 +..#???##??#??#?? 3,5,1 +?.???#???????#? 4,2,2 +??##?.#??#??????? 1,3,1,1,5 +##?#???.??.??#.? 2,1,1,1,1 +??????#?????# 7,4 +.???#??????##? 5,1,2 +.??????#?##?#?? 2,6 +.#?.??#.#?#??. 2,2,5 +?..?##?#?????#??#?? 1,15 +?????????????#???. 1,3,1,1,1,1 +##?.????????.#?. 2,1,1,1,2 +?#.???.#.?#??.?.?? 1,1,1,3,1,1 +.#.??.?.?###.???? 1,2,1,3,1 +???#?????##??.?.??.? 5,4 +????###?#?##????.? 1,12 +?#??.?????? 4,2 +?????#??????.? 8,2,1 +????????## 2,2,3 +???#???#?? 2,2,3 +????#.?.?#?????.???? 1,1,1,5,1,1 +...????.?.?????#?. 3,4 +..?..?#??#????#?? 6,1 +.?#??.?????.?##???.? 3,4,5,1 +.?..??#?.#? 1,2,2 +????##??????.#? 1,8,1 +???.##?#?.??##?? 1,5,5 +#?????#??????? 1,8,1 +.????#?????? 2,2 +????##??.#? 1,4,1 +?#?#?#?.???#?. 7,3 +???????#??????.????? 10,2 +????#??.?#.?? 3,2,1 +???.#.?#?##?????# 1,1,5,3 +???##.#?##?????.?.# 1,2,1,7,1 +????.##?#??##??? 2,10 +?#?.????#??#?##?#?#. 2,12,1 +????#??#??.??#??? 4,2 +??.#????#?.??? 2,1,5,1 +.###?.??.?#.#.?.???? 4,1,1,1,1,2 +??#??###?.#?.????.# 8,2,3,1 +?##???.?.##??#??.??? 6,1,7,2 +??###??.????##?#?##? 3,2,8 +#???????#??#?#??#??? 4,4,9 +??#????????# 2,3,2 +?#?.?.#?.?.?????# 3,1,2,1,4 +?#??##?#???.?..?. 7,1,1,1 +???????#.?????##.?. 8,1,3,1 +..???##.??# 1,3,1 +.#??#?..####?#. 4,6 +?????..??????# 5,1,2,1 +???##?##.????##?# 1,2,2,1,5 +???.??#???.?. 2,1,3,1 +???.??###??????#?#? 2,4,6 +?#???#?#??????? 6,3,3 +?##..?#???????## 2,10 +?#??.?.#?.?# 3,1,2,1 +#???.#???. 3,3 +???.?.#?.#??#?????. 1,1,2,1,3,1 +?...?.??????? 1,4 +??.????.#.? 1,3,1 +????#??.?.###.???? 1,4,3,3 +?????..???.?? 1,1,2,1 +.??.??##????#?. 2,8 +??.??#??????. 5,1 +###??#??.??? 6,3 +##????##????##..? 2,11,1 +??.????.??????? 1,2,1,1,2 +.???????????????.?. 5,5 +??...?????.? 1,1,1,1 +????###?##? 4,2 +??##???#?????????? 5,7 +?????????.?.# 6,1,1,1 +?????.???? 1,1,3 +??#??????## 4,4 +???.?#..?#?##.?.#??? 1,1,5,1,1,1 +.#?.#??????. 2,1,3 +.????.?????##? 1,1,7 +???.???????. 1,1,3,2 +.???##??..??.#..#? 7,1,1,1 +??#????#???????????? 15,1 +##??????..???? 6,1 +#?.???#??? 1,3 +?##????#???#? 2,6,2 +###??#???#???????? 6,1,1,2 +.???????.? 1,1,1 +??????#??..?.##?##? 8,1,5 +.?##?????.?. 6,1 +.#???.????#???# 1,1,1,4,1 +.#??.#?##?#? 3,1,2,2 +#?????????#??##?# 1,3,2,1,5 +???.??#????? 2,6 +?.?#??..??## 1,4,1,2 +..???????????.? 5,1 +???.#??#.??????#?.? 1,4,8 +?????.#???#?#?? 3,1,3,1,1 +???????.?#??##????? 1,3,6,1,1 +?.##????????###?? 3,3,6 +#??????.##??## 1,1,1,6 +?#.??.?.?#?. 1,1,1,2 +#???##??##?.?.????#? 2,4,2,1,1,3 +.???????.??# 2,1,3 +???##?##?#?#????? 11,1 +???????#?#??. 6,3 +????#???#?.????#.? 10,1 +?#?????.?#????#? 4,6 +?.???.?#.?. 1,1 +.??.#???.?. 1,1,1 +?#?????????????? 1,1,1,5,1 +???.?????#? 1,1,4 +???#????..?? 6,1 +?.#?????#?????.?. 10,1 +?.#??.#?.#?.? 2,2,1 +.??#???.?##?.#?. 1,1,1,3,2 +#?#???#?#?????#?#?? 15,1 +..???##.?????.???#?? 3,4,3 +.??.???????.? 1,4,1,1 +???#?????.??.?????? 5,1,1,3,1 +.??????.?.??#??? 5,1,3 +??#?????##???. 1,9,1 +.#???????????.? 1,1,2,2,1 +??#?.??.??? 3,1 +???.???.??.???????? 1,2,1,3,3 +?.##??????#? 1,4,3 +?#?##???#?#..? 9,1 +????????.?.???? 7,2 +??#????#?#?.???? 2,5,3 +.?.??.#??#?????. 1,4,3 +.???#??#?.#.??##?# 8,1,6 +?..?.??.??????..?..? 1,1 +??.?.??????? 1,1,1,2 +.?#..????? 1,2,1 +??#?.????.##???? 2,2,2 +?????#?##??.???.? 1,6,2 +??????????????. 4,4,1,1 +???##..?????##?#??? 4,10 +??...?##???#?#??? 1,3,6 +.?.#.???#?#?#?? 1,1,1,5 +.?#??##???##??.#?# 12,3 +?????#.??.?##?????? 3,1,1,4,3 +??#.#.??#.#??? 3,1,3,3 +#???????????#?? 1,2,1,6 +???.?????.??.? 3,1,1,1 +??#???.?????# 3,1,2,1 +??..????.?..?? 2,2,2 +.#???#??#????#? 11,1 +???.??.????#??..?## 1,1,1,4,1,2 +..??##?????.?.?#? 9,1 +??##?#?#??#???? 1,10 +#?#?????????#. 3,9 +????#????#?? 5,4 +?#???#??????????#. 7,2,1,1 +.#??#?????#.?#.??#. 5,4,2,1 +#??.#?.?????.#? 3,1,1,1,1 +.?#??????.??? 3,1,3 +???.?????#?#???? 1,1,1,3,1 +.#????##?#??.#. 1,3,1,1,1 +???#?.????#?? 5,2 +#.??##?####?.???? 1,1,8,1,1 +.?.??#??????. 1,4,1 +??????.?#? 6,1 +..???.#?##?.???.? 2,5,2 +??###????????.????? 5,6,2 +????.????? 2,1,1 +???.?#???#??#? 1,6,1 +..#?.???#?.#?#? 2,1,1,1,1 +??.?###?#????#??. 8,1 +?###???##??????? 3,8,1 +.#.#??#?#?. 1,2,3 +.???#.?..##?????#??? 4,5,3,1 +???###??..??? 6,1 +.##?###?????#???#? 6,1,2,2 +#.??????#?? 1,2,3 +.?.#?##??##??????? 8,5 +??????????# 1,4,1 +.???..???????.? 1,7 +#?##??.#????#.?? 1,3,1,1,1 +?#?#??.??#? 5,1,2 +?.?#?#??#??##??. 4,7 +##?.???????.??????? 2,1,4,5 +??.?????????..??#?? 1,4,1,1,1,2 +??..??#???????? 1,2,1,2 +?.#???#??.?#?#? 1,2,1,1,5 +??.?????##????.? 2,10,1 +?.????.#???#??.? 1,3,1,3,1 +??#??#????..????? 8,1,3 +?????#?#??#### 1,1,3,5 +?.??#???????..#??? 1,6,1,3 +##?#???????.#??? 7,2,4 +??#?..????#??##??# 4,1,2,2,1 +??????#??#?.?#?##??. 1,9,2,2,1 +???#?.????.????? 2,3 +.?.?????.??????.?# 1,1,2,1,2 +.??????##.??? 8,1 +??#..#????## 1,1,1,2 +???.??.?#?#?. 1,1,3 +?????.?????.??? 2,5,1 +.#?#???.????? 5,1 +#???#?#???#?.?.????? 3,8,3 +#?.#?.???.??? 1,1,3,2 +??#?#?#?#????#.? 9,1,1,1 +.#???#..?????. 3,1,1,1 +??#.??????#. 1,1,1,1 +???#?##?.???...??. 1,5,2,2 +???.?.????#. 1,1,1,3 +???###?.??#???. 5,5 +?..?.??#???.???.?..? 4,1 +.??#?.???#??..?# 2,4,2 +?#????#??#?? 1,1,1,3 +#??????#???#??? 8,1 +??????#.?.?.?. 1,5,1 +??.??.?????.#? 1,4,1 +?#??#?##???#????.# 1,5,3,1 +????????.#?#???? 3,3,4,1 +???????????..??????? 1,1,1,1,1,6 +???#??#?#??##?## 1,1,1,8 +??????????????? 2,1,1,1,1 +?..???.?????.#? 1,1,1,1,2 +??????##?????.?#?.?? 1,8,2 +.?.?#??#???? 1,1,1,1 +.???#?????.? 4,1,1 +????..?#?? 2,2 +????#??.#? 5,2 +????..?.#.? 1,1 +????????#?? 1,2,1 +????#?..?.# 3,1,1 +?##?????#???? 6,2,1 +????.????####??. 4,1,6 +??.#?#?#.???????? 2,5,2,1,1 +?.#??.?#??????????? 1,1,1,3,5,1 +??..?.??#??? 1,3 +??.??...?????#?#?? 2,1,9 +??##?#??#??. 4,4,1 +??##????#???# 8,2 +.???#?????.. 2,2,3 +????????.?. 3,1 +?.???#?????????????? 1,1,4,2,2,1 +.?##???.???????? 3,5 +??#??...#??#? 4,1,1 +????#.####. 3,1,4 +.##???.??? 2,1,2 +??##???????? 1,4,1,1 +.#????#?.?#?#? 1,3,4 +.?????##?#??????? 1,8,1 +.#?.##?.#? 1,3,1 +?#????.????? 5,2,2 +??.##?.??#.?????? 3,1,1,6 +??.????#.?##??#?. 2,1,1,6 +??.?????.??.? 2,2,1,1 +?#?#??#????.?#??##.# 10,3,2,1 +?#??#?..??#????.??? 4,2 +?#...???#??.? 2,1,3 +#??.??.#???#..??? 3,1,1,1,1 +??#?????..#??.#?.??? 5,3,2 +#??####?.#????#????? 7,2,1,1,1,1 +..#??.?.#.???.??? 3,1,3,2 +....??#?????.??##?.. 7,3 +.???##??.?? 3,1 +#.?#?..?###?#?#? 1,2,5,1 +???#?.??#????#?? 5,1,1,1,2 +??##.?#?##??????.?? 1,2,5,1,1,1 +#???#??#????..??# 8,1,1,3 +.?#??..#.?????? 2,1,1,3 +????????..????? 1,3,1,2 +.?...?#?#?????? 1,9 +.?#?.?????#?????## 1,1,10 +#??..?#?#?.? 2,5 +??#.???#?.???#??? 1,5,1,2,1 +??.?.###?##?#?#?#? 1,1,8,1,1 +.?.???#??###.?????? 1,2,6,1,1 +?????.?#?#?#???? 2,1,6,1 +???????.#?#????##. 1,1,9 +.?##?.?????? 3,2,1,1 +????#??#????#????? 2,3,2,2,2 +?##?##???#?#????#?# 5,1,1,1,1,3 +?.??#.?#???#????? 1,3,1,6,1 +?#???#?#.????.?. 1,1,1,3,1 +?..?#??..# 1,3,1 +?##?????.#????#? 3,1,1,1,1 +??#..??##??#? 1,5 +.?.#..???????? 1,1,2,4 +?.????????.#? 1,1,2,1 +???####?.?#??? 6,4 +??????..#?? 2,2 +?.??????#??.? 1,7,1 +???#??????. 1,4 +???.?#????.??.#.?. 2,2,1,2,1,1 +.?##.#?????#??# 3,1,2,2,1 +????.?#?????????? 1,9 +?.??#?????.?. 3,1 +#????#.??????. 6,1 +?.???????.???# 1,2,2,1 +#.?#????????.?? 1,5,1,2,1 +.?.#.?#????#? 1,3,2 +???#?#..??.# 6,1 +.??????.?????##? 4,2,3 +.???.????#?#..??? 2,4,1 +?.????...?? 2,1,2 +???????#??#??#?#?. 2,9 +?????????#?????.? 1,1,5,4,1 +.????.??#?..#??? 3,3,2 +??#?#?.?.?###. 5,3 +????????.#?#???? 1,1,1,1,5 +.##?#?#?.?.???????? 2,1,2,1,7 +?????###.?.???#? 7,5 +??.??#.??##???? 1,2,4,1 +#??#?????? 5,2 +...?.?????.??#. 2,3 +??#??.??.. 1,3,1 +?????????.?#??#???.? 3,2,8 +???#??????#.#?#???? 5,2,1,1,1 +??#..?##???##?. 1,3,3 +??.????#?#??????# 1,1,9,1 +??###????. 1,6 +.??##?##?.??#?#? 8,1,1,1 +?#..??#???? 1,1,3 +???##?????#??????.? 3,4,1 +????#?..?????.?#?.?. 4,4,2 +?#???.??#???..? 1,2 +.?#??#..???? 4,1 +.?##...??##? 3,1,3 +????????#???#?#. 2,2,3,2,1 +#???#?#???#?#?#??? 5,1,3,5 +??#??###?#??.?.?# 10,1,1 +.??#?#??#?#??#? 3,1,2,5 +?????.?#??????#.???# 2,1,4,1,1,4 +?.#?#?##???.#?? 1,6,1,3 +??????#?.??? 1,5 +#??##.?##??? 2,2,3,1 +?#?##??????##.??? 7,3,1 +??????#????..??? 10,3 +##?.????##???#.? 2,10 +??...???????#? 1,9 +?..?###??.?.??#??. 5,4 +?.??##.?.??#??#???? 3,9 +#???.??#???#???? 3,4,3,2 +????????#?#??#??? 11,3 +?????#?????#...?? 3,1 +#?????..??##?.??? 1,4,3,1 +????##??##?###.#. 1,1,3,6,1 +?#???.#.?? 4,1,2 +#.?.???#??#.? 1,1,2,1 +????.?????#??????. 3,8 +????.?.#?#? 4,4 +???#??#????##??.. 6,5 +###??#????#?.. 7,2 +??.??#???###?. 1,7 +????????.?.?#???? 3,3,1,4 +?#?#..##???????# 3,2,7 +#?????.??????? 2,1,1,6 +#??..?#??## 3,2,3 +??.?.????.#??? 1,3,4 +.?#???##.???.??? 6,2 +??.??.?.?#####?? 1,6 +?#???#?#.?.????..? 7,3 +??#.??###?###?.? 3,7 +?.?.?..??###? 1,1,1,6 +??.??#??#?.??.?? 1,4,1,1,1 +?#?#?.##????? 5,2,1,1 +#??????#?. 5,2 +?#?#??.?..?.? 4,1 +?????????..#.??? 2,2,1,1,1 +.?..????#??#?##?#? 1,1,1,10 +??????.?????.??? 4,3 +???????????#?. 4,2 +.????#??.?.??#???#? 1,3,1,2,2 +??##?#????##?##???#? 6,10 +?#???????????. 5,4 +???##?#?????#.?.?# 10,2,2 +.????.???#?##.????? 2,7,2 +??????##???.?.????. 1,4,2,1,1,1 +???#?????#??#????#.? 1,3,4,3,1 +?#???#.#??.? 2,1,1,1 +?.???#?.??#?#??? 2,8 +#.????#?.?..??#? 1,1,2,1,3 +.????.?????.? 3,1,2 +?????#?????.? 3,2,3 +?#?.#??##?. 3,1,2 +??###??????? 6,1,1 +????????#??? 1,1,3 +???.?.#??? 1,1,1 +.??.??#.?? 1,1,1 +?##.???##???#?#.??? 2,7,1,2 +?#??.??.#??#???? 2,1,2,1,1 +##????#?##?.?#.?? 3,1,5,1,1 +?##?.?#.#??##? 3,1,1,4 +#??.??????? 1,4 +.???##??????.????#?? 1,8,1,2 +???#.#.?????????? 1,1,1,10 +????.?#??#?#??#?? 1,10 +?.?????.???.??#??? 1,1,1,2,2,1 +??.???##.?????? 5,2 +??.?.#???#??? 1,1,3,3 +????##????..#??? 6,1,1,1 +?????#.??#?##.?? 2,2,4,1 +?#..???????? 1,1,3 +#??????#?...#? 9,2 +?..?.??#?.#? 1,1,2,1 +..????????? 1,1,1 +??.??#??.???.? 1,5,1 +..?.##..??#??#?????? 2,10 +???#..?#???#????? 1,1,2,8 +.???????#.????#?? 4,2 +???.?#???.???.?.. 2,3,2,1 +??#?#?????#??? 1,4,1,2 +????#.???..#?### 3,1,1,1,3 +????#???..?#?# 4,1,2,1 +?.??.????##?#?#.? 3,6 +.???.????????#????? 1,7,1,2 +??#??.??#???.? 3,4,1 +.??.?#.?##?????.?.. 1,2,2,2,1 +#???.?.??? 4,1,2 +?.??.?#??#?????????. 2,5,4,1 +..??????????????#?.? 1,6,2,1 +??...#.?##? 1,2 +.???####?#.???. 1,6,1 +??#..??#??.?##?# 3,1,1,2,1 +#?..?##??..??#? 1,5,1 +?#?#????????? 6,1,2 +?.#?.?.#???? 2,1,5 +?..????#??????.?. 1,2,1,5,1 +.???#??#???#?#??#? 2,3,4,1 +.???....#??.??. 1,3 +???#?.??..#???. 1,1,1,4 +...???.#?? 1,1 +.#???.???## 1,1,5 +??#??##???.?????. 4,5,5 +??#?##?...??? 1,3,2 +#????#.????#?#??? 1,1,1,7,1 +????#??#..?.??????. 8,1,1,2,1 +?#????#??#?????#.?? 8,4,1,1 +.?????.##??????#???. 1,1,12 +#??.??#??? 2,3,1 +.?#?###?#??###?#?#?. 1,15 +?#.#?????# 1,4,2 +??#???###???????#?.# 9,7,1 +.??.??#???. 1,4 +.??.?#???#???.###?. 1,7,3 +????#??#???#?.??? 1,1,2,3,1 +???#?#?????..?.????. 10,1,1,1 +??##?#??#?????#????? 1,7,1,6 +??.?#?#???.????? 2,7,2 +??#?.?.????. 3,3 +.??#.#?##??? 1,1,6 +??#??????###??.? 1,3,1,3,1 +..?#?.#???.?#? 2,1,1,3 +?.?##????#.?#?? 7,3 +??###???.?. 4,1 +??.?#?#??#??. 1,7 +??????.##?.#??#?? 1,1,1,2,6 +?.?###.?#???#???##?? 4,11 +.#?#??##?.???#???? 8,5 +.?.??##???.??.? 1,7,2 +????????#???#??? 3,2,5,2 +??.?###.????????.?# 1,4,3,1,1 +#.????##??#??????#? 1,1,13 +#????#???#.??#. 1,5,1 +????????#???#??.??# 1,1,1,8,3 +????.?????.??# 3,4,1 +??.??#???.. 1,4 +??.??##?.????##??? 2,3 +????????????#?????? 1,10 +?#??#??.?.#?.#....?? 7,1,1,1,1 +?.?#????## 4,2 +.?.#????##. 1,5 +.???????????? 3,1,1,1 +#?????????.?###?# 2,3,1,1,5 +?#?#.#??#.??? 1,1,4,1 +???.#??????????? 2,8,2 +##?#?#?.???? 6,2 +??.?????##.#? 1,1,4,1 +??????.#?##? 1,4 +???#????????.#.????? 4,1,3,1,5 +?#?..??##? 3,4 +?????.??##?.? 2,1,2,1 +?#????#????? 1,7 +.???#.??##???????. 2,1,7 +???####?.?#??..? 6,3 +?.?#???.????. 5,1 +.?#???.?###?#??## 3,1,10 +?###??????#?????###? 5,5,3 +.??#?.????#? 4,2 +##.?##?#.?.#??#.??? 2,2,1,1,4,2 +????#?????#?##??##?? 3,1,2,6,3 +...??##..??# 4,2 +?.?.#???#? 1,1,1 +.#???.????? 1,2,1 +.#???#???#?#????#. 1,1,2,1,1,2 +???.#??????? 1,3,1,1 +.??#???#??#????#?? 1,2,1,8 +?#????????? 4,1,1 +?????##??##?? 3,7 +??.????#.??? 1,5,1 +.??###?##??#?# 7,3 +???##?..?? 1,3,2 +??#.?.????#? 2,1,2 +?#??#???#??#?.#. 2,1,6,1 +?.?????.?#?. 1,1,1,2 +.??#???#?.?#?#??# 3,3,2,1,2 +?#??..#.???? 3,1,1 +????????#????.?.#? 1,1,6,1,1 +??#?#??????#?.?.?.#? 5,1,3,1,1,1 +???#???????#??#??. 2,3,10 +???#?#?.?????#?#? 4,1,5 +?..??#???????????? 1,4,1,1,1,3 +#.?????###?#??? 1,12 +?.??????##??#??????? 1,11,2,1 +#?.??##??#??. 1,9 +????#?????????? 9,1 +?#.?#??.???.?????#? 1,3,1,1,1,2 +??.?..????.?? 1,1,3,1 +?#..?#???????.? 1,2,2,1,1 +#.??#??#??#? 1,7 +#?#?#???????.?????. 6,5,1,1 +.????????.?#?#. 1,1,1,4 +??.???????#. 1,1,1,1 +??????.?#.???? 2,1,2,1 +..?#?##???????? 2,7 +?#?#?????.??? 8,1 +#?.?#????.?? 2,3,2,1 +????.?.?#???? 1,1,2,1 +?.???#?.??.?.?.?. 4,2,1,1,1 +.#???#?#??#??. 1,9 +?????#??.?? 3,3,1 +?#?????..?.??###?# 5,7 +?????#??.##. 4,2 +.##.??#??????#?##. 2,2,6 +#?.???.?#?.?????. 1,3,2,1,1 +?##?#?????? 2,4,1 +?#?????#??????#?. 10,1,2 +.?#..?#???##?.???? 2,1,4,2,1 +???????.????##.??? 3,3 +??###?.????.??##???? 6,2,1,3,1 +.#?####??.?.?#???# 8,5 +?????????# 1,7 +.??..###???#??#?.??? 10,1 +#????..????#?#? 1,2,2,5 +????###?????? 8,3 +#..??.???????#??? 1,1,2,1,4 +.?#????#?#??.?? 11,1 +?#?????#..??#?.??? 5,1,1,1,1 +?.??#??????##?##.. 1,2,1,1,6 +?###?????#.?# 8,1,1 +??#??.?#???????## 3,3,5 +??.#?????.?????#???? 1,1,1,1,2,4 +??????????? 1,2 +..???.???#? 2,3 +??.??#?????#????.? 2,8,2,1 +?????#??????#? 1,4,1,3 +?.?????..??? 1,1,2,1 +?#??#????##?????#??# 4,3,7 +?????.?##??.????.#. 3,3,1,1,2,1 +?#???????????#.??#.? 2,9,3 +?????###.??.#.?????? 1,4,1,1,1,2 +.?###.??.? 3,1 +???....??##.? 1,4 +??###??.?.#?..?? 5,1,1,2,1 +???##??????#???? 3,1,3,1 +?????#???????#.? 2,1,1,1,3 +???????#??#???# 2,10 +.??##????????? 1,2,6,1 +??.#?#???????# 1,4,1,2 +???#?.?##?#.????? 1,3,4,1,2 +?#????..?##? 2,3 +??????#??.?????? 1,6,2,1,1 +.?##??.?.?#????## 5,3,3 +?#??????.????#??.??? 1,1,2,6,1,1 +?.??#??..##?.??. 1,5,2,1 +?#?..???#?.?? 3,5,1 +??????..???? 3,1 +.?.???????#????. 1,9 +??????#?#??????.???? 14,1 +.????????????#??. 1,7 +????#.?##?## 3,5 +.?.##?????.? 1,3,1 +???#??????##??#??. 1,1,11 +????##????? 2,2,2 +????????.??.#??#??. 3,2,1,6 +#???#?#??#???. 1,7,1 +..???????????.##??? 9,5 +??.????????#??# 2,1,1,2,1 +?#??????..?. 3,1,1 +#???.??????.#??.? 1,1,2,2 +?#??????.# 2,3,1 +????#??.##?.??#. 1,2,3,1 +.????#???????#? 2,1,4 +.?#????.?.???##. 1,3,5 +.?.?#????#. 3,1 +?#???.???#?##?? 3,1,5 +????#?#?????????..?. 9,2 +.?????#????????##?#? 4,1,1,1,2,5 +.???#??????????? 1,5,6 +??.??#?##???##?? 1,4,6 +??..??.##?# 1,1,4 +#???.??????????????? 3,11,1 +?.?##????.???????? 1,3,2,7 +?#??.?.?#??.? 3,1,3,1 +..??#??.???#?????? 3,5 +???#.??????? 3,1,3 +?#?##??????? 9,1 +???#??#???????# 1,7,1,1 +??##????.##???? 4,2 +.#..???..??#?.?#?# 1,1,1,1,2,1 +.?????..?? 1,1,2 +?.????????. 1,5,1 +?#????.??.#.?????#. 3,1,2,1,2,3 +?#???????? 3,1,1 +??#?#?##????#?? 9,3 +.#??#?#??. 1,3 +.#??#?.??#?#?..? 4,1,2,1 +.???.?.?#?#?.?? 1,1,5,1 +?..???#????????..? 3,2 +#??#???.???#?????#? 6,1,4,3 +?????#?.????????.? 1,1,8,1 +.#??#????.#?.#?? 1,3,1,1,1 +??????????????#?#?? 1,10 +???#?#?#?? 1,1,3 +???.?????#.#? 3,1,2,1 +???.???.?# 1,3,1 +?#?????..?#???#??? 6,3,4 +?#?#??.##?. 4,2 +??????????#?.????. 1,6,2,4 +?#??#?????????? 1,9,1 +???##?#??#??? 1,9 +#??????##?? 2,6 +??.??????#?#?.???.? 1,3 +.?#?#?.?????????.? 2,1,1,2,1,1 +??..#????.###?#? 2,1,1,1,5 +???.?????#??? 1,4 +.?????##?#?..?.? 3,5,1 +.#????#??.???.?# 1,1,2,2,1 +??#???##?#?????.???? 8,1,2,1 +#?#.#????.?#???? 1,1,5,5 +.##????#??#..?.?.?.? 7,2 +#????#?????.? 1,1,2,3 +??.#????#? 1,2,1 +?#?????..??#.??? 4,3 +.?????#.#??.? 6,1,1 +??#?.??????.??#.??# 3,6,1,1,1 +#?#?..??##????????# 4,13 +????###?.??#...??#?? 7,3,3 +?????????#.???# 8,2,1 +??###??##?..?.??##.? 10,1,2 +.#?????????#???#?#. 4,1,8 +????#?.????#???..? 5,1,4,1,1 +??.????.#?????##? 1,3,1,1,2 +??.#??#.?.?? 1,1,1,1 +??.??????#?? 1,6 +.???.???.##??.?. 2,2,4,1 +???#?###?.?? 1,1,3 +???#.?????..#.. 1,1,2,1,1 +?#?#?.??????#????# 1,2,1,1,8 +#?????.????? 1,1,1,1 +.????#..?? 4,1 +??###????????#?##.? 1,3,1,1,4,1 +????..?.#?.. 2,2 +??????#??#??.?? 1,1,1,4,1 +?????#????.?????# 1,7,4 +?.#???#?#?? 1,7 +??.??.??.??..##??#?? 2,2,1,6 +????.??##?. 1,1,5 +#?#.#??????.#.?#?.?. 3,4,1,1,1,1 +#?????#????? 2,5,1 +??#?#?????.#?#?? 6,4 +..???#??????. 1,1,5 +.?.?#.#???#???? 1,1,1,4 \ No newline at end of file diff --git a/2023/Day12/solution.cs b/2023/Day12/solution.cs new file mode 100644 index 0000000..a45f7b1 --- /dev/null +++ b/2023/Day12/solution.cs @@ -0,0 +1,453 @@ +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Linq; +using System.Text; +using adventofcode; + +namespace aoc2023; + +public class solutionDay12 : ISolver +{ + public static int DEBUG_LEVEL { get; set; } + + public void SolvePart1() + { + Console.WriteLine("Day 12, Part 1"); + + solutionBase solutionBase = new solutionBase(); + //var input = solutionBase.getInputLines($"2023/Day12/test"); + //var input = solutionBase.getInputLines($"2023/Day12/testsingle"); + var input = solutionBase.getInputLines($"2023/Day12/input"); + + long sum = 0; + + foreach (var line in input) + { + Debug.WriteLine(line); + //Console.WriteLine(line); + } + + DEBUG_LEVEL = 0; + + foreach (var line in input) + { + string allowedCombination = line.Split(' ')[0]; + int[] rule = line.Split(' ')[1].Split(',', StringSplitOptions.TrimEntries).Select(x => int.Parse(x)).ToArray(); + + var possibleStrings = GeneratePossibleStrings(allowedCombination); + + Console.WriteLine($"Allowed combination: {possibleStrings.Count}"); + + var result = Nonosolve(allowedCombination, rule.ToList()); + sum += result; + // foreach (var possibleString in possibleStrings) + // { + // Console.WriteLine(possibleString); + // } + + // Console.WriteLine("Matching Strings:"); + // foreach (string possibleString in possibleStrings) + // { + // if (MatchesRule(possibleString, rule)) + // { + // Console.WriteLine(possibleString); + // } + // } + // var t = MatchesRule(".###.##.#...", rule); + // var r = MatchesRule(".###.##..#..", rule); + // var s = MatchesRule(".###...##..#", rule); + } + + Console.WriteLine($"Sum: {sum}"); + } + + public void SolvePart2() + { + Console.WriteLine("Day 12, Part 2"); + } + + public int FindPermutations(string input) + { + var text = input.Split(' ')[0].ToArray(); + var arrangements = input.Split(' ')[1].Split(',', StringSplitOptions.TrimEntries).ToArray(); + + var count = CountPermutations(input.Split(' ')[0], arrangements.Select(x => int.Parse(x)).ToArray()); + + return count; + } + + private int CountPermutations(string v, int[] ints) + { + Console.WriteLine($"CountPermutations({v}, {string.Join(',', ints)})"); + return 0; + } + + + ///// this musst be analysed + private static long Nonosolve(string line, List blocks, int nLevel = 1) + { + if (DEBUG_LEVEL >= nLevel) Console.WriteLine($"{new string(' ', 2 * nLevel)}Nonosolve({line}, {string.Join(',', blocks)})"); + + line = line.Trim('.'); + + while (line.Contains("..")) + line = line.Replace("..", "."); + + //Strip from the start + while (blocks.Count > 0 && line.Length > 0) + { + //Replace the start with the first block when it starts with a #. + if (line.Length > 0 && line[0] == '#') + { + if (line[..blocks[0]].Contains('.') || (line.Length > blocks[0] && line[blocks[0]] == '#')) //we can never replace a . with a # + return 0; + else if (blocks[0] == line.Length) + line = ""; + else + line = line[(blocks[0] + 1)..].TrimStart('.'); + + blocks.RemoveAt(0); + continue; + } + + //Remove the start if the first ??? sequence cannot fit because of working days. + if (line.Contains('.') && line.IndexOf('.') < blocks[0]) + { + if (line[..line.IndexOf('.')].Contains('#')) // we can never replace a # with a . + return 0; + + line = line[line.IndexOf('.')..].TrimStart('.'); + continue; + } + + //Remove the first character if the first block would be followed by a broken day (#) + if (line.Length > blocks[0] && line[blocks[0]] == '#') + { + line = line[1..].TrimStart('.'); + continue; + } + + //Remove the start, and the first block, if it fits exactly and is forced to be there. + if (line.Length > blocks[0] && line[..blocks[0]].Contains('#') && line[blocks[0]] == '.') + { + line = line[blocks[0]..].TrimStart('.'); + blocks.RemoveAt(0); + continue; + } + + break; + } + + //Strip from the end + while (blocks.Count > 0 && line.Length > 0) + { + + //Replace the end with the last block when it ends with a #. + if (line.Length > 0 && line[^1] == '#') + { + if (line[^blocks[^1]..].Contains('.') || (line.Length > blocks[^1] && line[^(blocks[^1] + 1)] == '#')) //We can't remove a #, or include a . + return 0; + else if (blocks[^1] == line.Length) + line = ""; + else + line = line[..^(blocks[^1] + 1)].TrimEnd('.'); + + blocks.RemoveAt(blocks.Count - 1); + continue; + } + + //Remove the end if the last ??? sequence cannot fit because of working days. + if (line.Contains('.') && line.LastIndexOf('.') >= line.Length - blocks[^1]) + { + + if (line[line.LastIndexOf('.')..].Contains('#')) // we can never replace a # with a . + return 0; + + line = line[..line.LastIndexOf('.')].TrimEnd('.'); + continue; + } + + //Remove the last character if the last block would be followed by a broken day (#) + if (line.Length > blocks[^1] && line[^(blocks[^1] + 1)] == '#') + { + line = line[..^1].TrimEnd('.'); + continue; + } + + //Remove the end, and the last block, if it fits exactly and is forced to be there. + if (line.Length > blocks[^1] && line[^blocks[^1]..].Contains('#') && line[^(blocks[^1] + 1)] == '.') + { + line = line[..^(blocks[^1] + 1)].TrimEnd('.'); + blocks.RemoveAt(blocks.Count - 1); + continue; + } + + break; + } + + int nLeeway = line.Length - blocks.Sum(x => x+1) + 1; + + if (nLeeway < 0) + { + return 0; + } + + //Shortcut : Based on total length and holes and stuff, it's nonogram + if (nLeeway == 0 || blocks.Count == 0) + { + //build the minimal string to represent the blocks, with an extra dot since I can't be arsed. + string comparison = ""; + foreach(var testBlock in blocks) + { + comparison += new string('#', testBlock) + "."; + } + comparison = (comparison + new string('.', line.Length))[..line.Length]; + + //Compare if there are ./# overlaps + for (int i=0; i 1) + { + List newBlocks = blocks.ToList(); + newBlocks.RemoveAt(0); + int newBlocksLength = newBlocks.Sum(x => x+1); + + for(int i = 0; i <= line.Length - newBlocksLength - blocks[0]; i++) + { + if (!line[i..(i + blocks[0])].Contains('.') && line[i + blocks[0]] != '#') + { + var nRes = Nonosolve(line[(i + blocks[0] + 1)..], newBlocks.ToList(), nLevel + 1); + nSum += nRes; + } + + if (line[i] == '#') //We can't ditch a # + break; + } + } + else + { + for (int i = 0; i <= line.Length - blocks[0]; i++) + { + if (line[..i].Contains('#'))// We've ditched a #, we can stop; + break; + + if (line[i..(i + blocks[0])].Contains('.')) // we're including a ., we can skip + continue; + + if (line[(i + blocks[0])..].Contains('#')) // we haven't reached the first # + continue; + + nSum ++; + } + } + + if (DEBUG_LEVEL >= nLevel) Console.WriteLine($"{new string(' ', 2*nLevel)}{nSum} = {line} {String.Join(",", blocks)}"); + return nSum; + } + + + //////////////////////////////////////////////////////////////////////////// + static bool MatchesRule(string str, int[] rule) + { + int index = 0; + + foreach (int count in rule) + { + // Check if the current substring matches the rule + string substring = str.Substring(index, count); + + if (!IsBlockValid(substring, count)) + { + return false; + } + + // Move to the next block + index += count; + + // If there are more characters in the string, ensure they are '.' + if (index < str.Length && str[index] != '.') + { + return false; + } + + // Move past the '.' character + index++; + } + + return true; + } + + static bool IsBlockValid(string block, int count) + { + // Check if the block contains only '#' characters + for (int i = 0; i < count; i++) + { + if (i >= block.Length || block[i] != '#') + { + return false; + } + } + + return true; + } + + static List GeneratePossibleStrings(string targetString) + { + List possibleStrings = new List(); + GeneratePossibleStringsRecursive(targetString, 0, new StringBuilder(targetString.Length), possibleStrings); + return possibleStrings; + } + + static void GeneratePossibleStringsRecursive(string targetString, int index, StringBuilder currentString, List possibleStrings) + { + if (index == targetString.Length) + { + // Base case: If the current string is complete, add it to the list + possibleStrings.Add(currentString.ToString()); + return; + } + + char currentChar = targetString[index]; + + if (currentChar == '?') + { + // If the current character is a wildcard, branch for both '#' and '.' + currentString.Append('#'); + GeneratePossibleStringsRecursive(targetString, index + 1, currentString, possibleStrings); + currentString.Length--; + + currentString.Append('.'); + GeneratePossibleStringsRecursive(targetString, index + 1, currentString, possibleStrings); + currentString.Length--; + } + else + { + // If the current character is not a wildcard, use it as is + currentString.Append(currentChar); + GeneratePossibleStringsRecursive(targetString, index + 1, currentString, possibleStrings); + currentString.Length--; + } + } + + //////////////////////////////////////////////////////////////////////////// + + // static string GenerateString(int length, int[] hashCounts) + // { + // StringBuilder resultBuilder = new StringBuilder(length); + + // foreach (int count in hashCounts) + // { + // // Add '#' characters + // resultBuilder.Append('#', count); + + // // If there is more to the string, add '.' characters + // if (resultBuilder.Length < length) + // { + // int dotCount = Math.Min(length - resultBuilder.Length, count - 1); + // resultBuilder.Append('.', dotCount); + // } + // } + + // // If the generated string is shorter than the specified length, add '.' characters + // if (resultBuilder.Length < length) + // { + // resultBuilder.Append('.', length - resultBuilder.Length); + // } + + // return resultBuilder.ToString(); + // } + + // static List GeneratePossibleStrings(string targetString) + // { + // List possibleStrings = new List(); + // GeneratePossibleStringsRecursive(targetString, 0, new StringBuilder(targetString.Length), possibleStrings); + // return possibleStrings; + // } + + // static void GeneratePossibleStringsRecursive(string targetString, int index, StringBuilder currentString, List possibleStrings) + // { + // if (index == targetString.Length) + // { + // // Base case: If the current string is complete, add it to the list + // possibleStrings.Add(currentString.ToString()); + // return; + // } + + // char currentChar = targetString[index]; + + // if (currentChar == '?') + // { + // // If the current character is a wildcard, branch for both '#' and '.' + // currentString.Append('#'); + // GeneratePossibleStringsRecursive(targetString, index + 1, currentString, possibleStrings); + // currentString.Length--; + + // currentString.Append('.'); + // GeneratePossibleStringsRecursive(targetString, index + 1, currentString, possibleStrings); + // currentString.Length--; + // } + // else + // { + // // If the current character is not a wildcard, use it as is + // currentString.Append(currentChar); + // GeneratePossibleStringsRecursive(targetString, index + 1, currentString, possibleStrings); + // currentString.Length--; + // } + // } + + // static bool MatchesRule(string str, int[] rule) + // { + // int index = 0; + + // foreach (int count in rule) + // { + // // Check if the current substring matches the rule + // string substring = str.Substring(index, count); + + // if (!IsBlockValid(substring, count)) + // { + // return false; + // } + + // // Move to the next block + // index += count; + + // // If there are more characters in the string, ensure they are '.' + // if (index < str.Length && str[index] != '.') + // { + // return false; + // } + + // // Move past the '.' character + // index++; + // } + + // return true; + // } + + // static bool IsBlockValid(string block, int count) + // { + // // Check if the block contains only '#' characters + // for (int i = 0; i < count; i++) + // { + // if (i >= block.Length || block[i] != '#') + // { + // return false; + // } + // } + + // return true; + // } +} \ No newline at end of file diff --git a/2023/Day12/test b/2023/Day12/test new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/2023/Day12/test @@ -0,0 +1,6 @@ +???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1 \ No newline at end of file diff --git a/2023/Day12/testsingle b/2023/Day12/testsingle new file mode 100644 index 0000000..eaa8c26 --- /dev/null +++ b/2023/Day12/testsingle @@ -0,0 +1 @@ +?###???????? 3,2,1 \ No newline at end of file From 1c46918e23bbad7144be81eb510b2b89fcf1950c Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 16 Dec 2023 14:07:07 +0100 Subject: [PATCH 12/14] update readme --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 359905f..94fd74b 100644 --- a/README.md +++ b/README.md @@ -19,6 +19,8 @@ using c# with .NET 7 - day12 :star: - day13 - day14 :star: :star: +- day15 :star: +- day16 # overview 2022 - day01 :star: :star: From bc8e9dc1d12397d4a799d0e63c17400bca44b8ce Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 16 Dec 2023 14:07:34 +0100 Subject: [PATCH 13/14] add day16 --- 2023/Day16/input | 110 +++++++++++++++++++++++++++++++++++++++++ 2023/Day16/solution.cs | 17 +++++++ 2023/Day16/test | 10 ++++ 3 files changed, 137 insertions(+) create mode 100644 2023/Day16/input create mode 100644 2023/Day16/solution.cs create mode 100644 2023/Day16/test diff --git a/2023/Day16/input b/2023/Day16/input new file mode 100644 index 0000000..1778ec0 --- /dev/null +++ b/2023/Day16/input @@ -0,0 +1,110 @@ +\..../.....-...|........\.|...........-..........-......|....././..........\..|............................... +.../..|.......-............\...........-\|...............\.....|......-...........................-./.......|. +......../.-.-....\...\-.......................................|..........-.......\.....-.........|......|..... +....\........./..............|.............-..|.|.\.|.-......\........./..................|..........\........ +...|/.|..........................-........................|............|-..|...../\................./.../..... +...|.|.......\...................|/..........\\....|....................-..................|.................. +..................\-|..........|.\......|........\.....\...........................-..............\.....\..... +........./.-./..............................-..........|......|................/.............-......./...|./.. +....-...\..........-......\...............-/.....................\.........-\.........|..........|.....|...... +./............\......./..-......................../.|.-.|........................./.|......|...\.......-.-.... +...........././.............|..........-....../..............-.....\.-......-.............................-..\ +......................\.|.\..................-./.....\....|......................|..\...|..................... +...|.-...|.............../..//....-\...-.-...........|......-....\.|-.............\....-.|.............\...... +......|.....\-....\.............|../..|......\....--................/....|..../|../.....-........../.......... +.............|.........-.../.|....................\........................................................... +....\...\.-..-.....|.|...........-........./..../..........-.-....|....-..............-....|........|....../.. +..........|..............\..|........../..........................|.....|\.-...........-......\....../........ +...../.......|..../........-........|./\..\..\.\././.\.............--.......-..................\./......-..... +....................//...-..........-.............|................/............./.\....../...........-....... +.\-...|-/.......-........-...-...............\../...........................\/.....\...........\........|..... +.............................\-......|......\../......-..........|...........|.........-.....\..|......-...... +./................/........-.......|..\..../|............................|...........|.-.|.................... +.\.....|...............-\............|.................|...././.-...\..........|...........-...|...-.....\.... +.......-..../.........\|.....................|....../..|/./|..........|.......|-.......\\./......-............ +.....................\|......../-.............\...|...........................\.....\.\....................... +...|\.././...................|..................-.../\.-............\.-.........../............../.....\...... +.......\..................\..|../...........................\....\....\..../...\..\\./.-....................|. +...............|./...\..........|...|....\........./......\...\.............\.\-......|......-...-........|..| +.........-...........................-...-............\...\.\.................................-....|./........ +.-.|............-.....................-.................\..../......\....\....\....................|.......-.. +.....\.|......|..../................|......|.....-...\|../................./...................//............. +.|.........\..../......-........-............--...................../........|.......\.....\..........-....... +../.....|.|............-.................|\.....|....||...-..-....|/......................|.|-..-..........||. +...-............|.-.............-.....................\.|.............\.\............\...|........|...../.\... +\...........................\.|................................................/.|......-.......\........../.. +...................|....|.......|.-.............-..-\...-...............................|..................../ +/...../.....\............../...........|..|./...-.../...............................\........../|.........\... +..-.......|.........../.......|......../.......\.............../..........-|.................................. +...\.\........\............|......................\........|...\.............................................. +../..........--........|....-..............\..\.............\...................-........./...../..-.......... +..................|.................../\..-..|..................\....././..|......-.................../....... +-...\.............\..-..-.................../...|.|.........|../|./............/...../............../......... +.|\............................-....................|......./..............................|..-|...|.\........ +-........../...-....-.......................|...\........|.......\................../......................... +........................................................././.|..|.........\................/|........\........ +-.....\.........................|...........|..||..|......................................\...\....../.......| +....\...|........\.........................//...........|........-.........\..........\-.....\................ +....|........|.........../........../....\........|......-../..............|...............|.........../...... +......\................-...........|.................\...../........|................-........................ +...............|......|...\............\............/.../.......-.-../............................\......|.... +............-........-..../.......................\..-./.....\...................................-\.....|..... +...|...../......\...........\......\...\......./...........-../..|......................../...|............... +...........................-...../....-.....//................../..........-.......|.................|..-..... +................-...\.............\.../.../.\../...|.........-.\...../.................\.............../\...\. +.....-..................../......................................-...-............/...........|...-..........| +.........-..........\.\................-..\............................|...................-........./........ +...............-....../.....\...|.........\.../\.......-......|............\-.................|...-..........\ +.....\/......../../|......\......|.....--............|....../........-.../....-...-........................... +..../....\....|.............../..|........./............-.........................................../......... +.........../.................|....-..........................................................................\ +...-.....-./....................\..../.\\.................-.....-....|..\.....-....|.......................... +.....-..\..........|....|...........|.|....................................\.......-.../.../-.-........-.../.. +............../......./...-.......-..|.......-|..........\..............-.-....|..............\............... +-........../.........|.......................\....-........../.........\.................../.............-.... +.......-....\.....\..................\..../-.//.....-\..........|........................../....|.....\....... +..-./............./|..|........|...\\.........\...|......|.....\.........../.\......................\........\ +...../|.......\............../....................|.............-...........|......|....../.........../....-.. +.............-...-...|..\-.........................................|.......-.........|.........\.............. +......|......|............/.........................|.............\.............../....................|..-... +../../|\......|..//....../......................................................./-...................../..... +.....-........-................-.............|.-./..............|...-...../......................../..../..... +...........\......|.............|....|.|.........../........|....................\.\......./..\.\..|.......... +.\................/....................-..............................|...........\....\.......-....../.../... +...............|................-.....................................-..................\...............\.... +..........|\..................../............................./...............-.....-....-..|................\ +.................\.\...........................................-../......\.....-...............|...\.......... +..|....\............................................./.........|...-\.........-...\..|..........\............. +..................................|...........-....-./-.\.-..................-............................./.. +....................................\-.....\\...../..................-............-........../........-....\.. +...........\......./...../|\..../-....|........|.|-.....-....|.....||.....|...........\..........\....|.-..... +...\..........\./..............-........................././..........\././...-...........-............-...../ +\........\.....-..............................\................../.............-........................\..\.. +.........../.\...............-.\...-.....\............\....\......--.....\...................................\ +............\...............\.........\\....\....|......\.......-.................|...|....\.....\...\........ +.....|.....-............../............-............../.............../...................-......\...........- +..........................-...|......\.....\.......\........-................./..........-......../.../...-/.. +../........|....\........|..../...........|...-..|..........\............\..../........-................|.\... +..........-............./........................................-.......\.|/......./.................\.../.-. +......................\.........................../.../...../../.......|...................|............|..... +..............\..........-/........|/................................\...........................-............ +........\....\....../.......|.-........\........-..\.................................|.....\-................. +........\......|.\.................-..-.../.............\..................|.../.-.............-/............. +.|/.............-.\.........................|...|./........-...........\../...............\./.......-......\.. +..................-....|.....................-........|/.................\.........../..-.............../..\.. +......-......-.........../......................-......./...../.../.|........\.../....../............\.....|.. +...|../..................-.................\.....................\............-...........|.....|.|.........-| +..............................-...........|..-/.................|................................../.......... +.../......../.............-./.............|...../......./...|...........\..............-..........-....|..-./. +/..\...|...........|...........................|/................../......./......................\.....\..... +..|.........-........|..|......-...................\.........|...........................-.................... +../...-.....-.............../...|\...\.......|.................|.\.........-...................-\.........-./. +../..............................|.......|..............\...\......................\..........|............... +............/....|../....../.............-............................./......./.................\............ +/.....\...../.........../.............../...-.../\.....|.....|............|....|..........\.....\..../........ +....\....-/.........................|............-...........\........\...\.....\\................\........-/. +.....................-..-\...............././...........................\....-./......|..............\..-..... +................./........|.......-.-....................\.-.||...-.......\./.|./.....|...-.../......./....... +........-..-...../.......\.........................\.....././.\.../..|...../.................................. +.............|...............--.........../.|\/.....\.........................|..|.....................-...... +..........-...|.......\/...................|....../.-...-...|....................\..../.-...../..../..-....... \ No newline at end of file diff --git a/2023/Day16/solution.cs b/2023/Day16/solution.cs new file mode 100644 index 0000000..9f3159d --- /dev/null +++ b/2023/Day16/solution.cs @@ -0,0 +1,17 @@ +using System; +using adventofcode; + +namespace aoc2023; + +public class solutionDay16 : ISolver +{ + public void SolvePart1() + { + Console.WriteLine("Day 16, Part 1"); + } + + public void SolvePart2() + { + Console.WriteLine("Day 16, Part 2"); + } +} \ No newline at end of file diff --git a/2023/Day16/test b/2023/Day16/test new file mode 100644 index 0000000..c78b2e7 --- /dev/null +++ b/2023/Day16/test @@ -0,0 +1,10 @@ +.|...\.... +|.-.\..... +.....|-... +........|. +.......... +.........\ +..../.\\.. +.-.-/..|.. +.|....-|.\ +..//.|.... \ No newline at end of file From 32c1b72589bd70c1627ad890590c78348d6d63ef Mon Sep 17 00:00:00 2001 From: deckelmouck Date: Sat, 16 Dec 2023 21:23:45 +0100 Subject: [PATCH 14/14] solved day 16 part 1 test but not input --- 2023/Day16/inputClean | 110 +++++++++++++++++++++++ 2023/Day16/solution.cs | 195 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 305 insertions(+) create mode 100644 2023/Day16/inputClean diff --git a/2023/Day16/inputClean b/2023/Day16/inputClean new file mode 100644 index 0000000..a8007d9 --- /dev/null +++ b/2023/Day16/inputClean @@ -0,0 +1,110 @@ +...../.....-...|........\.|...........-..........-......|....././..........\..|............................... +.../..|.......-............\...........-\|...............\.....|......-...........................-./.......|. +......../.-.-....\...\-.......................................|..........-.......\.....-.........|......|..... +....\........./..............|.............-..|.|.\.|.-......\........./..................|..........\........ +...|/.|..........................-........................|............|-..|...../\................./.../..... +...|.|.......\...................|/..........\\....|....................-..................|.................. +..................\-|..........|.\......|........\.....\...........................-..............\.....\..... +........./.-./..............................-..........|......|................/.............-......./...|./.. +....-...\..........-......\...............-/.....................\.........-\.........|..........|.....|...... +./............\......./..-......................../.|.-.|........................./.|......|...\.......-.-.... +...........././.............|..........-....../..............-.....\.-......-.............................-..\ +......................\.|.\..................-./.....\....|......................|..\...|..................... +...|.-...|.............../..//....-\...-.-...........|......-....\.|-.............\....-.|.............\...... +......|.....\-....\.............|../..|......\....--................/....|..../|../.....-........../.......... +.............|.........-.../.|....................\........................................................... +....\...\.-..-.....|.|...........-........./..../..........-.-....|....-..............-....|........|....../.. +..........|..............\..|........../..........................|.....|\.-...........-......\....../........ +...../.......|..../........-........|./\..\..\.\././.\.............--.......-..................\./......-..... +....................//...-..........-.............|................/............./.\....../...........-....... +.\-...|-/.......-........-...-...............\../...........................\/.....\...........\........|..... +.............................\-......|......\../......-..........|...........|.........-.....\..|......-...... +./................/........-.......|..\..../|............................|...........|.-.|.................... +.\.....|...............-\............|.................|...././.-...\..........|...........-...|...-.....\.... +.......-..../.........\|.....................|....../..|/./|..........|.......|-.......\\./......-............ +.....................\|......../-.............\...|...........................\.....\.\....................... +...|\.././...................|..................-.../\.-............\.-.........../............../.....\...... +.......\..................\..|../...........................\....\....\..../...\..\\./.-....................|. +...............|./...\..........|...|....\........./......\...\.............\.\-......|......-...-........|..| +.........-...........................-...-............\...\.\.................................-....|./........ +.-.|............-.....................-.................\..../......\....\....\....................|.......-.. +.....\.|......|..../................|......|.....-...\|../................./...................//............. +.|.........\..../......-........-............--...................../........|.......\.....\..........-....... +../.....|.|............-.................|\.....|....||...-..-....|/......................|.|-..-..........||. +...-............|.-.............-.....................\.|.............\.\............\...|........|...../.\... +\...........................\.|................................................/.|......-.......\........../.. +...................|....|.......|.-.............-..-\...-...............................|..................../ +/...../.....\............../...........|..|./...-.../...............................\........../|.........\... +..-.......|.........../.......|......../.......\.............../..........-|.................................. +...\.\........\............|......................\........|...\.............................................. +../..........--........|....-..............\..\.............\...................-........./...../..-.......... +..................|.................../\..-..|..................\....././..|......-.................../....... +-...\.............\..-..-.................../...|.|.........|../|./............/...../............../......... +.|\............................-....................|......./..............................|..-|...|.\........ +-........../...-....-.......................|...\........|.......\................../......................... +........................................................././.|..|.........\................/|........\........ +-.....\.........................|...........|..||..|......................................\...\....../.......| +....\...|........\.........................//...........|........-.........\..........\-.....\................ +....|........|.........../........../....\........|......-../..............|...............|.........../...... +......\................-...........|.................\...../........|................-........................ +...............|......|...\............\............/.../.......-.-../............................\......|.... +............-........-..../.......................\..-./.....\...................................-\.....|..... +...|...../......\...........\......\...\......./...........-../..|......................../...|............... +...........................-...../....-.....//................../..........-.......|.................|..-..... +................-...\.............\.../.../.\../...|.........-.\...../.................\.............../\...\. +.....-..................../......................................-...-............/...........|...-..........| +.........-..........\.\................-..\............................|...................-........./........ +...............-....../.....\...|.........\.../\.......-......|............\-.................|...-..........\ +.....\/......../../|......\......|.....--............|....../........-.../....-...-........................... +..../....\....|.............../..|........./............-.........................................../......... +.........../.................|....-..........................................................................\ +...-.....-./....................\..../.\\.................-.....-....|..\.....-....|.......................... +.....-..\..........|....|...........|.|....................................\.......-.../.../-.-........-.../.. +............../......./...-.......-..|.......-|..........\..............-.-....|..............\............... +-........../.........|.......................\....-........../.........\.................../.............-.... +.......-....\.....\..................\..../-.//.....-\..........|........................../....|.....\....... +..-./............./|..|........|...\\.........\...|......|.....\.........../.\......................\........\ +...../|.......\............../....................|.............-...........|......|....../.........../....-.. +.............-...-...|..\-.........................................|.......-.........|.........\.............. +......|......|............/.........................|.............\.............../....................|..-... +../../|\......|..//....../......................................................./-...................../..... +.....-........-................-.............|.-./..............|...-...../......................../..../..... +...........\......|.............|....|.|.........../........|....................\.\......./..\.\..|.......... +.\................/....................-..............................|...........\....\.......-....../.../... +...............|................-.....................................-..................\...............\.... +..........|\..................../............................./...............-.....-....-..|................\ +.................\.\...........................................-../......\.....-...............|...\.......... +..|....\............................................./.........|...-\.........-...\..|..........\............. +..................................|...........-....-./-.\.-..................-............................./.. +....................................\-.....\\...../..................-............-........../........-....\.. +...........\......./...../|\..../-....|........|.|-.....-....|.....||.....|...........\..........\....|.-..... +...\..........\./..............-........................././..........\././...-...........-............-...../ +\........\.....-..............................\................../.............-........................\..\.. +.........../.\...............-.\...-.....\............\....\......--.....\...................................\ +............\...............\.........\\....\....|......\.......-.................|...|....\.....\...\........ +.....|.....-............../............-............../.............../...................-......\...........- +..........................-...|......\.....\.......\........-................./..........-......../.../...-/.. +../........|....\........|..../...........|...-..|..........\............\..../........-................|.\... +..........-............./........................................-.......\.|/......./.................\.../.-. +......................\.........................../.../...../../.......|...................|............|..... +..............\..........-/........|/................................\...........................-............ +........\....\....../.......|.-........\........-..\.................................|.....\-................. +........\......|.\.................-..-.../.............\..................|.../.-.............-/............. +.|/.............-.\.........................|...|./........-...........\../...............\./.......-......\.. +..................-....|.....................-........|/.................\.........../..-.............../..\.. +......-......-.........../......................-......./...../.../.|........\.../....../............\.....|.. +...|../..................-.................\.....................\............-...........|.....|.|.........-| +..............................-...........|..-/.................|................................../.......... +.../......../.............-./.............|...../......./...|...........\..............-..........-....|..-./. +/..\...|...........|...........................|/................../......./......................\.....\..... +..|.........-........|..|......-...................\.........|...........................-.................... +../...-.....-.............../...|\...\.......|.................|.\.........-...................-\.........-./. +../..............................|.......|..............\...\......................\..........|............... +............/....|../....../.............-............................./......./.................\............ +/.....\...../.........../.............../...-.../\.....|.....|............|....|..........\.....\..../........ +....\....-/.........................|............-...........\........\...\.....\\................\........-/. +.....................-..-\...............././...........................\....-./......|..............\..-..... +................./........|.......-.-....................\.-.||...-.......\./.|./.....|...-.../......./....... +........-..-...../.......\.........................\.....././.\.../..|...../.................................. +.............|...............--.........../.|\/.....\.........................|..|.....................-...... +..........-...|.......\/...................|....../.-...-...|....................\..../.-...../..../..-....... \ No newline at end of file diff --git a/2023/Day16/solution.cs b/2023/Day16/solution.cs index 9f3159d..c084fc3 100644 --- a/2023/Day16/solution.cs +++ b/2023/Day16/solution.cs @@ -1,17 +1,212 @@ using System; +using System.Collections.Generic; +using System.Data; +using System.Linq; using adventofcode; namespace aoc2023; public class solutionDay16 : ISolver { + public static char[,] Map { get; set; } + public static int WidthX { get; set; } + public static int HeightY { get; set; } + + public static HashSet Beams { get; set; } = new HashSet(); + public static HashSet VisitedPlaces { get; set; } = new HashSet(); + public void SolvePart1() { Console.WriteLine("Day 16, Part 1"); + + solutionBase solutionBase = new solutionBase(); + var input = solutionBase.getInputLines($"2023/Day16/test").ToArray(); + //var input = solutionBase.getInputLines($"2023/Day16/inputClean").ToArray(); + + WidthX = input[0].Length; + HeightY = input.Length; + Map = new char[WidthX, HeightY]; + + for (int y = 0; y < HeightY; y++) + { + for (int x = 0; x < WidthX; x++) + { + Map[x, y] = input[y][x]; + } + } + + //PrintMap(); + + var beam = new Beam(0, 0, Direction.Right); + beam.AddBeam2Lists(); + + while (Beams.Any(b => b.Moving)) + { + var beamsToMove = Beams.Where(b => b.Moving).ToList(); + foreach (var b in beamsToMove) + { + b.Move(); + } + } + + foreach (var vp in VisitedPlaces) + { + Map[vp.X, vp.Y] = '#'; + } + + PrintMap(); + + Console.WriteLine($"Result visitedPlaces: {VisitedPlaces.Count}"); + + HashSet hash = new HashSet(); + foreach (var vp in VisitedPlaces) + { + hash.Add(new Point(vp.X, vp.Y)); + } + + Console.WriteLine($"Result points: {hash.Count}"); + } public void SolvePart2() { Console.WriteLine("Day 16, Part 2"); } + + public class Beam() + { + public int X { get; private set; } + public int Y { get; private set; } + public Direction Direction { get; private set; } + public bool Moving { get; set; } = true; + + public Beam(int x, int y, Direction direction) : this() + { + X = x; + Y = y; + Direction = direction; + } + + public void Move() + { + switch (Direction) + { + case Direction.Up: + Y++; + break; + case Direction.Down: + Y--; + break; + case Direction.Left: + X--; + break; + case Direction.Right: + X++; + break; + } + + if(X < 0 || X >= WidthX || Y < 0 || Y >= HeightY) + { + Moving = false; + return; + } + + var nextPlace = Map[X, Y]; + + if (VisitedPlaces.Any(vp => vp.X == X && vp.Y == Y && vp.Direction == Direction)) + { + Moving = false; + return; + } + + if (nextPlace == '|' && (Direction == Direction.Left || Direction == Direction.Right)) + { + Moving = false; + var newBeamUp = new Beam(X, Y, Direction.Up); + var newBeamDown = new Beam(X, Y, Direction.Down); + newBeamUp.AddBeam2Lists(); + newBeamDown.AddBeam2Lists(); + } + else if (nextPlace == '-' && (Direction == Direction.Up || Direction == Direction.Down)) + { + Moving = false; + var newBeamLeft = new Beam(X, Y, Direction.Left); + var newBeamRight = new Beam(X, Y, Direction.Right); + newBeamLeft.AddBeam2Lists(); + newBeamRight.AddBeam2Lists(); + } + else if (nextPlace == '/') + { + if (Direction == Direction.Up) + { + Direction = Direction.Left; + } + else if (Direction == Direction.Down) + { + Direction = Direction.Right; + } + else if (Direction == Direction.Left) + { + Direction = Direction.Up; + } + else if (Direction == Direction.Right) + { + Direction = Direction.Down; + } + } + else if (nextPlace == '\\') + { + if (Direction == Direction.Up) + { + Direction = Direction.Right; + } + else if (Direction == Direction.Down) + { + Direction = Direction.Left; + } + else if (Direction == Direction.Left) + { + Direction = Direction.Down; + } + else if (Direction == Direction.Right) + { + Direction = Direction.Up; + } + } + VisitedPlaces.Add(new VisitedPlace(this.X, this.Y, this.Direction)); + } + + public void AddBeam2Lists() + { + Beams.Add(this); + VisitedPlaces.Add(new VisitedPlace(this.X, this.Y, this.Direction)); + } + } + + public enum Direction + { + Up, + Down, + Left, + Right + } + + public class VisitedPlace(int x, int y, Direction direction) + { + public int X { get; } = x; + public int Y { get; } = y; + public Direction Direction { get; } = direction; + } + + public static void PrintMap() + { + for (int y = 0; y < HeightY; y++) + { + for (int x = 0; x < WidthX; x++) + { + Console.Write(Map[x, y]); + } + Console.WriteLine(); + } + } } \ No newline at end of file