From 7550573f8ed884ce24d15cd220bafe668e76909a Mon Sep 17 00:00:00 2001 From: Matthew Pugh Date: Sat, 23 Dec 2023 14:44:36 +0000 Subject: [PATCH] Catching up before Christmas --- solutions/2023/pughmds/bash/day01/main.sh | 2 +- solutions/2023/pughmds/bash/day02/main.sh | 2 +- solutions/2023/pughmds/inputs/day10/input.txt | 140 ++ solutions/2023/pughmds/inputs/day10/test1.txt | 5 + solutions/2023/pughmds/inputs/day10/test2.txt | 5 + solutions/2023/pughmds/inputs/day10/test3.txt | 5 + solutions/2023/pughmds/inputs/day10/test4.txt | 5 + solutions/2023/pughmds/inputs/day10/test5.txt | 5 + solutions/2023/pughmds/inputs/day10/test6.txt | 3 + solutions/2023/pughmds/inputs/day11/input.txt | 140 ++ solutions/2023/pughmds/inputs/day11/test1.txt | 10 + solutions/2023/pughmds/inputs/day11/test2.txt | 10 + solutions/2023/pughmds/inputs/day11/test3.txt | 2 + solutions/2023/pughmds/inputs/day12/input.txt | 1000 ++++++++++++ solutions/2023/pughmds/inputs/day12/test1.txt | 6 + solutions/2023/pughmds/inputs/day12/test2.txt | 6 + solutions/2023/pughmds/inputs/day13/input.txt | 1351 +++++++++++++++++ solutions/2023/pughmds/inputs/day13/test1.txt | 15 + solutions/2023/pughmds/inputs/day13/test2.txt | 13 + solutions/2023/pughmds/inputs/day13/test3.txt | 13 + solutions/2023/pughmds/inputs/day13/test4.txt | 17 + solutions/2023/pughmds/inputs/day14/input.txt | 100 ++ solutions/2023/pughmds/inputs/day14/test1.txt | 10 + solutions/2023/pughmds/inputs/day14/test2.txt | 3 + solutions/2023/pughmds/inputs/day14/test3.txt | 50 + solutions/2023/pughmds/inputs/day14/test4.txt | 6 + solutions/2023/pughmds/inputs/day14/test5.txt | 3 + solutions/2023/pughmds/inputs/day15/input.txt | 1 + solutions/2023/pughmds/inputs/day15/test1.txt | 1 + .../2023/pughmds/python/day10/__init__.py | 0 .../2023/pughmds/python/day10/__main__.py | 144 ++ .../2023/pughmds/python/day10/__main__old.py | 211 +++ .../2023/pughmds/python/day11/__init__.py | 0 .../2023/pughmds/python/day11/__main__.py | 163 ++ .../2023/pughmds/python/day12/__init__.py | 0 .../2023/pughmds/python/day12/__main__.py | 164 ++ .../2023/pughmds/python/day13/__init__.py | 0 .../2023/pughmds/python/day13/__main__.py | 177 +++ .../2023/pughmds/python/day14/__init__.py | 0 .../2023/pughmds/python/day14/__main__.py | 118 ++ solutions/2023/pughmds/python/day14/test.py | 0 .../2023/pughmds/python/day15/__init__.py | 0 .../2023/pughmds/python/day15/__main__.py | 79 + solutions/2023/pughmds/python/shared/file.py | 3 + solutions/2023/pughmds/timings.csv | 10 + 45 files changed, 3996 insertions(+), 2 deletions(-) create mode 100644 solutions/2023/pughmds/inputs/day10/input.txt create mode 100644 solutions/2023/pughmds/inputs/day10/test1.txt create mode 100644 solutions/2023/pughmds/inputs/day10/test2.txt create mode 100644 solutions/2023/pughmds/inputs/day10/test3.txt create mode 100644 solutions/2023/pughmds/inputs/day10/test4.txt create mode 100644 solutions/2023/pughmds/inputs/day10/test5.txt create mode 100644 solutions/2023/pughmds/inputs/day10/test6.txt create mode 100644 solutions/2023/pughmds/inputs/day11/input.txt create mode 100644 solutions/2023/pughmds/inputs/day11/test1.txt create mode 100644 solutions/2023/pughmds/inputs/day11/test2.txt create mode 100644 solutions/2023/pughmds/inputs/day11/test3.txt create mode 100644 solutions/2023/pughmds/inputs/day12/input.txt create mode 100644 solutions/2023/pughmds/inputs/day12/test1.txt create mode 100644 solutions/2023/pughmds/inputs/day12/test2.txt create mode 100644 solutions/2023/pughmds/inputs/day13/input.txt create mode 100644 solutions/2023/pughmds/inputs/day13/test1.txt create mode 100644 solutions/2023/pughmds/inputs/day13/test2.txt create mode 100644 solutions/2023/pughmds/inputs/day13/test3.txt create mode 100644 solutions/2023/pughmds/inputs/day13/test4.txt create mode 100644 solutions/2023/pughmds/inputs/day14/input.txt create mode 100644 solutions/2023/pughmds/inputs/day14/test1.txt create mode 100644 solutions/2023/pughmds/inputs/day14/test2.txt create mode 100644 solutions/2023/pughmds/inputs/day14/test3.txt create mode 100644 solutions/2023/pughmds/inputs/day14/test4.txt create mode 100644 solutions/2023/pughmds/inputs/day14/test5.txt create mode 100644 solutions/2023/pughmds/inputs/day15/input.txt create mode 100644 solutions/2023/pughmds/inputs/day15/test1.txt create mode 100644 solutions/2023/pughmds/python/day10/__init__.py create mode 100644 solutions/2023/pughmds/python/day10/__main__.py create mode 100644 solutions/2023/pughmds/python/day10/__main__old.py create mode 100644 solutions/2023/pughmds/python/day11/__init__.py create mode 100644 solutions/2023/pughmds/python/day11/__main__.py create mode 100644 solutions/2023/pughmds/python/day12/__init__.py create mode 100644 solutions/2023/pughmds/python/day12/__main__.py create mode 100644 solutions/2023/pughmds/python/day13/__init__.py create mode 100644 solutions/2023/pughmds/python/day13/__main__.py create mode 100644 solutions/2023/pughmds/python/day14/__init__.py create mode 100644 solutions/2023/pughmds/python/day14/__main__.py create mode 100644 solutions/2023/pughmds/python/day14/test.py create mode 100644 solutions/2023/pughmds/python/day15/__init__.py create mode 100644 solutions/2023/pughmds/python/day15/__main__.py diff --git a/solutions/2023/pughmds/bash/day01/main.sh b/solutions/2023/pughmds/bash/day01/main.sh index d3e9abe..5729bbc 100755 --- a/solutions/2023/pughmds/bash/day01/main.sh +++ b/solutions/2023/pughmds/bash/day01/main.sh @@ -20,6 +20,6 @@ run() { echo $total } -#result=$(run "../../inputs/day01/test1.txt") +#result=$(run "../../inputs/day01/test5.txt") result=$(run "../../inputs/day01/input.txt") echo "Result: $result" diff --git a/solutions/2023/pughmds/bash/day02/main.sh b/solutions/2023/pughmds/bash/day02/main.sh index 716956f..ff55ab7 100755 --- a/solutions/2023/pughmds/bash/day02/main.sh +++ b/solutions/2023/pughmds/bash/day02/main.sh @@ -41,6 +41,6 @@ run() { -#result=$(run "../../inputs/day02/test1.txt") +#result=$(run "../../inputs/day02/test5.txt") result=$(run "../../inputs/day02/input.txt") echo "Result: $result" \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day10/input.txt b/solutions/2023/pughmds/inputs/day10/input.txt new file mode 100644 index 0000000..9307e72 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/input.txt @@ -0,0 +1,140 @@ +777FJ.F|-|FFF-L-J7.7.F-7--L-7-L-LF-7-FFF.FLF7.FL7-J77F-7.L7-7.-F77F|FLJ7.L---7.7---J77F|.F|-J7FFF|7-F7-77.FF7|-7-F77F-.J7.777FF|F|-F77|-77.F +L|F|JJ||.FL7L-JFJLJFFJFJJ|FFJFJ-LLJJ.7.F-.LJJFF|L7.F-.LJFLFJ|7|||.|FJ|LJ7J...-J77.L|F|7.--.LLF-FFFL7||7LF-F7-J7JF|77L-|L-L7LFL-F-7JLJ-|.L7.F +L--JJ|L-.LLJ-L-J||FJJ-JJFF7JFL77.LL-|J7|J.-L-LFJ7|-L.FFJ|7|.L7FFJFJ|LJ-FL.-77|7|F7FLJ|.F-L7|.|JFL-.L|JF|L-L77J7.|JL7F7|7LLJ...||-J-FL-L|JJF| +FF|-L7.J..-JFJ.L7-|J.FL7F7J.|-7-F7L--F-JL-J|-FJ-||7L|7J-J77F-L-JLFJF7|L|-L-J7-J7.J-J--.|F||-J7-|J|-FJ.FFJ.||JL7-L--L--J-F.LF7LL.--77.F.|||L| +F|.7F-7-|.|.||.|F7JJ.LL||LJ-JFL-JJF|.|JJ-7.F.7||L-F--7-7.F7JFLL7FF-|L-7|J|.L|7-7.|J7-LL--JJ|.JF-7L|.7FLL..L7FJ|J.F|7-JJ|LL7L||.7L-7J-J-F77-7 +F7.LF|.FJF77JF-FLJJ.FL.L|J..L|J.|.LF-77.L7FLFJ-JJJ|F-J.L.|L7J77F77JL-7L77|.|.|JL|.-7..L-FL7-|LFL7FF-FL-LL-F|7.-7F7F-7|FF7|F.J-|JLFJJJ-7-7|-J +7JFFL--J.7|F-F7||J-F.|.|.L-|FJ-7J|L|FJ-L-77J|7L|.FJ|JJ-L7--JLF-||JFF7L7|777F-7.L-7.F7.FF7LF7L-|FJ7JL|||LL7FJJ.L-LJ||L--J-|L7-|L--J.F-7LL|J77 +|--77|LJFL-|FLF7JLFF7-L7F7.|F-F-.|.||7.||LF7-|77FJFJJ.---7|F|LFJL--J|FJL-7JJJJ|7J|.|-F-JL-JL7-|7FJJ..F7F|7J7.-.J|FJL.L|7LL-JF77FL.FJFF.JL-JF +LLJL|7LFFJ7FJ-|77.L||7L-L7FF7-|J-FFJ|7F7-7L|-F-7L7|LF..FLJ-F|-|F-7F7LJF7FJ7-|J...L|JLL7F--7FJF7-7|..F77F|-----J-|J|.|.J7-||F7J77|LF-JJ..FJ.7 +|L|.L|.J.7F|..JLF.F||7J..FF|L777J|L7L7||J7|F7L7L7|L--77-L7FJ|.|||LJL-7|LJL7777F|7--7|.LJF7||7||.L7..|JF-JFLJL7J-|7-F|F|77-L7|.7---L-.F|.|FF| +L.|.L|L.LF-JF7.|F--J|J-FFF|L7||F77|L7|||--FJL7L7LJF--JJJJ|L7L-LJF--7FJL7F77F-7LJJFLF7-F7|||L-JL77FJ7F-77FF-F-|7|L7FL77|F7-|L|-|..7J..|J-7|.| +|FF77FJL-L|FF77L|F-7|7JF--7FJL-J|F--JLJL7FL7FJFJF-JF-7JJF--7-FL.L-7|L-7LJL7|FJ7|.J-|L-JLJLJF--7L7-JFL7L-7|FJL|-JLJ.LF7LLJ7LJ.F|7.|.L7L|-JFFJ +77L--7.L-7JF||7.LJL||F7|F-JL---7|L---7F7L7FJL7L7|F7|FJ-F|F7|-|JFF7||F7|F--J||F7-F7.L----7F7L-7L-JJ-F7|F-J-L-7J.|7J7.L|-LFFJFFFL--LJ.F-FJF77J +.-JL-L-LLFF7||7F7F7|||LJL7F----JL7JF7||L-J|F7|FJLJLJ|7-FJ|LJ7F7FJLJLJLJL--7||||7F7-|F--7LJL7FJF7F77||||7|.|-J.FJJLJ-|L-7|JJFJJ|.|.LF7LL7LFJ. +J7FJ.|||FL|LJL7||||||L-7FJL--7F-7|FJ||L--7LJ|LJF7F--JF7L7L7JF||L------7F--J|||L-J|F-JF-JF7L|L-J||L7|LJL77F-77F-F-7F7|F-7J|F-7FF7|.LL|JL|LLJ. +LLJ-FFL-|F|F-7LJLJ|||F7|L7F7LLJ-||L7LJF--JF7|F-J|L--7||.|FJF-J|F7F7F--JL7F7|||F--JL-7|F7||FJF--J|FJL-7FJF7-LJ-L|FJ-L|7-JFJJLF-LJ-L----.|.L77 +FJ||F7LFJFLJJL---7||||LJFJ||F7F7|L7L7FJF-7||||F-JF7FJ||FJL7L-7LJLJ|L--7FJ|||LJL7F7F7|||||LJFJF--J|-F-JL-JL77JF-JL7.-|J.LL7FL|7.|.LJJ.|.L|F-7 +-7JFL|JLF7L-F----J|||L-7L-J||LJ||FJFJ|JL7|||LJL-7|LJ|||L7FJF7L---7|FF-JL7|||F--J|||||||LJF7L7L--7L7L-7F---JF7L-7FJ--J-|L|77.FL7-7JL||77|L|FF +LLF|7J..||J.|F---7LJL-7|F--J|F7LJL7L7L7FJLJL7LF7|L7F-JL7|L7|L7F7FJL7L--7||||L7F-J||LJ|L7FJL-JF-7|FJ7FJL---7|L7FJL7-7JF-7F7||J.F77..7|F|7..FL +..FJ-.7FLFJ7||JF-JF7F7LJ|F77LJ|F-7L-JFJ|F-7FJFJLJFJ|F--JL7|L7|||L-7L-7L|||LJFJ|F7|L-7L7||F7F7L7LJ|F7L-7F--JL7||F-J-F7|FJ|L-7LF7.F7F|||F-|-|| +|7LF-FJFJFJFJ||L--J||L-7||L7F7LJJL--7L-JL7LJ-L--7L7|L7F7FJ|FJLJ|F7L-7|FJLJF-JFJ|LJFFJFJ|||LJ|FL-7|||F7||F7-FJ||L77FJLJL7|F-JFJL-7---J-|||.-- +|7LJF|-|F|-L-JF7F--J|F-JLJFJ||F77|F7L7F--JF7FLF7|FJ|FJ|||FJ|F--J|||FJ|L7F7|F7L7L--7L7L7|||F-JF7FJLJLJ||||L7L7|L7L7L-7F-J|L7LL7F-J|.LLJJF-||| +JJ.LF|F-7JFL-FJ|L-7FJL-7F-JFJ||L7FJ|FJL7F7|L7FJLJL7|L7||||-|L7F-JL7L7||LJ|LJL-JF--JFJFJ|||L77||L7F---J|||FJFJL7L7L-7||F7|FJLFJL77J7.FF.L7|FJ +||FFL-7-77FL7L7|F-JL7F-JL-7L7||FJL7||F-J|LJFJL---7||FJ|||L7|FJL--7L-J|F7-L7F--7L7F7L7L-J|L7L7||FJL7F7FJLJL7L7FJFJF-J|LJLJL-7|F7L7-F-JJF.77FJ +FF|.LJ|7|F7-F-JLJF-7|L---7|||||L7FJ|||F7|F-JF-7F-JLJ|FJ|L7LJL-7F7L-7FJ|L-7||F-JFJ||LL--7L-JFJ|||F-J|||F---JFJL7L7|F7|F-----J||L-J7L|JF.FL-JJ +J|J.|F77L|-FL-7F7|FJ|F---JL7||L7|L7||||||L7-L7|L--7FJ|FJ7L7F7FJ||.FJL7|F-JLJL-7|7||F-7FJF--JFJ|||F7||||LF7LL7FJFJLJLJL----7FJL7-F--7.|L|||JJ +L|JFFFJF7.LFJ-LJ||L7|L7F7F7LJL7|L7||||||L7|F7||LF-JL7||F7FJ|LJFJL7|F-J|L7F7LF7|L7|||FJL7|JF7L7||||LJ||L7||F7||FJF7F7F-----J|F-JFJF-J---|-J.F +L|LF-L7L-J-||||.LJ.|||LJLJL7F7LJFJ|||LJL7|||||L7|F7FJ|LJ|L7|F7L-7LJL-7|FJ||FJ|L7|||||.FJL7|L7|LJLJF-J|FJ|||||LJFJ||LJF-7F7|||F-JFJ-J7JF||FF7 +.LF-F--7|LFF-|7F7F7LJF7F---J||F7L-J|L-7FJ|LJ||FJLJ|L7|F-JF|LJL77L-7F-J||FJ|L7L7|||LJL-JF-J|FJL7F-7|F7||FJLJLJF7|.LJF7|FJ||FJLJF7L7-J|J7|FLJ| +-77F7.L-|L||-77|||L-7||L--7FJLJL--7L--JL-JF-J||F7FJFJ||-F7L-7FJF7FJ|F7|LJFJFJFJ|||F-7F-JF7|L7.LJJ||||||L7F---J|L---JLJL7|||F--J|FJJ7JFF--J.7 +|FJLJ7--.-LFF7FJ|L-7|||F7|LJF7F---JF--7F--JF-J|||L7|F|L7||F-JL7|||FJ||L-7|FJFJFJ||L7LJF7|||FJF7F7||||||J||F7F7L--7F7F--J|||L--7LJ7F7--JJ|.-J +FF---77|7FF7||L7|F7|||LJ|F--J|L---7|F7LJF-7L7FJ|L-JL-JFJ||L7F-J|||L7|L-7||L7L7L7||FJF7|||||L7|||LJ||LJ|FJLJLJ|F7JLJ||F-7|||F7FJF7F7LFJ7FF77J +|JL77FL7JFJLJL-JLJ|||L-7|L-7FJF---JLJL-7L7|FJL7L--7F--J|||F|||FJLJFJL7FJ||-L7L7|||L7|LJ||||FJ||L-7LJF-JL7F---J||F7-LJ|FJ|||||L-JLJ|-L7L7|F7J +777FF7J|FJF7F7F7F7LJL--JL7FJL7|F7F-7F--JFJ|L-7L7F7||F7F7||FJL7L7F7|F7|L7||F7L7||||FJL7FJ|||L7|L77L-7L7F7|L-7F7|LJ|F-7|L7||||L---7FJ|.L7|||.| +L77LLLJ-L7|||||LJL7F7F--7||F7|LJLJ|||-F7|FJF7|FJ|||||||||||F-J|||LJ||L7|||||7||||||F7||L||L7||FJF77L7||||F-J|||F-J|FJL7||||L---7LJL77.J7.F77 +-|-F7L.-LLJLJLJF7-LJLJF7||LJ||F7FF7|L7||||FJ||L7|||LJLJ|||||F7FJL7FJ|FJ||LJL7|||LJ||||L7|L7|||L7||F7|||LJL--JLJL-7||F7|LJLJF---JF---777FL-F7 +L|JJL-JF||.F---JL-7F--JLJL--JLJL-JLJ7LJ||||FJ|FJ|||F---J|||||||F-J|FJ|FJL--7|||L7-||||FJL7||LJFJ|||||||F---------J|||||F---JF7F-JF7FJJ7-7.L- +FL7.|FLLF--L7F---7|L--------7F-------7FJ||||FJL7|||L-7F7|LJ||LJ|F7|L-JL7F-7|||L7L7LJ||L7FJ|L-7|FJ||||||L--7F-7F---JLJLJL----J||F7|LJ|J|F7JJ7 +JJ|.77.LFJJLLJF--JL-77F--7F7LJF------J|FJ||||F7|||L7LLJ||F-JL-7LJ|L7F--JL7LJ|L7L7||FJL7|L7|F7|||FJ|||||F--JL7LJF-7F7F7F--7F-7LJ||L77|JF-J.|L +FFF-FJL-|||LF7L--7F-JFJF7LJ|F7L7F----7|L7LJ|LJ||||FJF7FJ||F7F7L-7|FJ|F7F7L-7L7|FJL7L7FJ|FJ||LJ||L-J||||L----JF7L7||LJ|L-7|L7L7FJ|FJ7|F|.J--J +FL|..7J|FF--JL---J|F7L-JL-7LJL7||F---JL-JF-JF7|||||FJLJFJ|||||F-J||.LJ||L7FJFJ|L7FJJ|L7||FJL7FJL-77LJLJF-----JL-J|L-7L--JL-JFLJ.LJFFJJL|F|-L +LL|..--7FL-------7LJ|F7F-7L-7FJLJL------7L7FJ||LJ||L7F7||LJLJ|L-7|L7LFJ|FJL7|FJFJL-7|FJ||L7FJ|F-7|F7F-7L-7JF----7L--JF-7F-----7F---7J.LL7J.| +L|LFFL-LF-7J.F---JF7LJ|L7L--J|F7F-7F7F-7|FJL7|L-7||FJ||L--7F-JF7|L7|FJFJL7FJ||FL7F7|LJ||L7||FJL7||||L7|F7L-JF7F-JF-7J|FJ|F----JL7F-JJ77|L77. +|.F-|.|LL7L--JF7F-JL-7L7L---7LJ|L7||LJFJ||F7|L--J|||FJ|F7FJL-7|LJLLJL7L7J|L7|L-7|||L--7L-J||L7FJ||||FJ|||F--JLJF7L7|FJL-JL---7F7||F7F7FF7.77 +F7|-|.FF-JF-7FJLJF7F7L7L-7F7|F7L-J|L-7|FJ|||L---7||||L|||L7F-JL-7F---JFJFJFJ|F-J|||F7FJF7FJ|-||LLJ||L7|||L-----JL7|||F-------J|LJLJL-7-J.FF- +FLF-77LL7FJLLJF--JLJL-JF7LJLJ|L7F7|F-JLJ-LJ|F7F-JLJLJFJ|L7||F7F7||F-7FJ.L7L7|L-7LJLJ|L-J|L-JFJ|F--JL-JLJL-------7LJLJL-----7F-JF7F--7|F|F-7J +L-|.FLJ.||7JF7L--7F7F7FJ|F7F7L7LJ|LJF7F7LF7LJLJF7F---JFJFJ|||||||LJFJL-7|L7||F7L--7F|F7FJF-7|FJL--7F7F7F-------7L7F7F7F-7F7LJF7||L-7LJ77LLL. +|LJFL|JFLJF-J|F--J|||||FJ|LJL7|F-JF-J|||FJL7-F-J|L---7L7L7||||||L7LL-7FJF-J||||F-7L7|||L7L7|LJF---J|||||F-7F-7FJ7LJ||||LLJL-7|LJL--J|JL7L|J7 +L.L|7F-JJLL-7LJF7FJLJ||L-JF7LLJL--JF-J|||F-JFJF7L7LF7|FJF||LJ||L7L--7|L7L7FJ|||L7|FJ||L7|7||F7L-7F7|||LJL7LJ-|L---7LJ|L----7LJ|F7JF77L|L7.|J +L7FLFLJF--7.L-7||||F7LJ.F-JL-7F---7L-7||||F-JFJL-JFJLJ|F7LJF-J|7|F7FJL7|FJ|FJ|L7|||FJL7LJFJLJ|F-J|||||F-7L--7L----JF7|F7F-7L--7||FJL7-77L|-J +J7F7L-FL7FJ-F7LJ|L7|L---JF--7|L--7|F-J|||LJF7L-7F7L--7LJL7LL-7|FJ||L-7|||FJL7|FJ|LJ|F7|F7L--7|L--JLJLJL7L---JF-----J|||LJ||F-7LJLJF-JJF7|LJ. +|LFJLFF-JL-7|L7-L7||F7F7FJF-JL--7||L--JLJF7||F7LJL-7.|F--JF--J|L7||F7|LJ|L7FJ|L7L-7|||||L---JL-----7JF7L-----JF--7F7||L--7|L7|F7F7L-77FJJ7L. +J|LL-LL---7LJFJF7||LJLJLJ.L----7LJ|F7F7F-JLJLJ|F-7FJFJL-7||F-7|FJ||||L77L7|L7L7|F7|LJLJL----7F7F--7|FJL-------JF7LJLJL---JL7|||LJL--J7J.LF.| +F-J|J7FF7LL-7L-J|LJJF7F--7F----JF7LJLJ|L-----7LJFJ|JL7F7L7LJFJ||FJ||L7L7FJ|-L7||||L--7F7F---J|||F-J|L-7F--7F---JL7F7F----7JLJ|L-7-|LLJL|-|F- +FLF-7-F||F--JF--JF7FJ||F7|L---7FJL-7F7L--7F--JF7L-JF7||L7L-7L7||L7|L7|FJ|FJF7||||L7F7||LJF--7||||F7L-7LJF-J|F----J|LJF7F7L--7|F-J7F-7-7JJLJJ +L.L7|F7||L--7L7F7||L7|LJ||LF--J|F--J|L-7FJL--7|L77FJ|||7|F-J|LJ|FJ|FJLJFJ|FJLJ|LJ-LJLJL7FJF7LJLJ|||F7L-7L--JL7-F--JF7||||F7FJ|L7J-7L-JFJLLJ7 +J7L|LJLJ|JF7|FJ|LJ|FJL7FJ|FJF--JL--7|F-JL----JL7|FJFJ|L7|L7F---JL7LJF7L|FJL--7L---7F--7LJFJL---7||LJL-7L--7F7L-JF7FJLJLJ||||7L-JJ|.|7.|.|JL- +L7LL---7|FJLJL7L-7|L-7|L7|L-JF7-F-7LJL---7F7|F7|||FJF|FJ|FJL7F--7L--JL7LJF---JF---JL-7L-7L----7|LJLF7|L7F7LJL---JLJF7|F7LJ||JFJ|F77|LFF.|.|. +FLF----JLJF-7FJF-J|F7|L-JL---J|FJFJF7F7F-J||FJLJLJL-7LJ.LJJJLJF7|F7F7FJF-JF7F7L7|F---JF7L7FF7FJL7F7||F7||L---7F7F--JL-JL-7LJ||LF|J-J.7J.|F.| +F7L------7L7|L7L-7|||L-------7||FJFJLJLJJFJLJF7F-7F-JF7F7FF7F-JLJ|||||JL-7|LJL7L7|F7F7|L7L-JLJF7LJLJ|||LJF--7LJ||F----7F-J.|FF-7J7.F|JFFFJFJ +||F7F7-F7|FJL7|LFJ|||F7F77F7FJLJL7L-----7L-7FJLJFJL--JLJL-J|L7F-7|||LJF--JL--7L7|||||LJJL7F---JL---7|||F-JF7L-7||L-7F7LJF77FFJFLJL7-L.JJJ--J +|LJLJ|FJ|LJF-JL7L7||||||L-JLJF-7FJF--7F7L--JL-77L------7F--JFJL7|||L-7L7F7F7FJFJ|||LJF7F7||F-------J|||L--J|F7LJ|F-J|L--JL7-F7|L7.F-J-L7F.J7 +L7F-7|L7|F7L--7|FJ|||||L--7F7|FJL7L-7||L-7F7F-JF---7F7LLJJF7L7FJ|||F-JLLJLJ|L7|FJ||F-JLJLJ|L--7F-7F7LJL---7LJL--JL7FJF--7FJ-|L77F-7J||LFJ7-F +FLJFJL-JLJL---JLJFJ|LJL---J||||F7L--JLJF7||LJF-JF-7LJL----JL7||FJ||L-77JJ.FJFJ|L7LJL------JF--J|FJ|L7F7F-7L----7F-JL7|F7LJF7|FJ-L7L--7LL--.F +|JFL7F-7F-7F--7F7L-JF7F-7F-J||||L7F7F--J||L--JF-JFJF-7F-----JLJL7|L7FJJFF-L7L7L-JFF--7F-7F7L--7|L7L7LJLJFL----7LJF7FJLJL-7||||F7.|F--J7.FJ-J +F7F7LJFJ|FJ|F-J||F-7||L7LJF7LJLJLLJLJF7FJL7F7FJF7L7L7|L-77F-7F7FJ|-|L-7-J.LL7L7.L-L7FJL7LJL7F7LJ-L-JF--------7L7L|LJF----J|||||L-JL--7-L-7F| +|LJ|F7L7|L-JL-7|||FJ||FJF-JL7F7F-----JLJF7LJ|L-JL7L-JL-7L7|FJ||L-JFJF-JF|.F-L7|7-|L||F7L--7LJL--7FF7L-7F----7L-JFJF7L--7F7|||LJF-7F--JJLL|-| +L-7LJL-J|F7F7FJ|||L7|LJLL-7FJ||L----7F7||L7FJF-7FJF7F7|L-J||FJL-7-L7L7L-L|.LLLJF-7FJLJ|F7FL----7L-JL--J|F-7FJF7J|FJL---J|||||F-JFJL--77.||FJ +JLL-----J|LJLJFJ||FJ|F----JL-J|F7F--J|L7L7|L7L7LJFJ|||F7F7|||F--JF7L-JFF|L-.|L-L7|L--7|||F7F--7L--7F---JL7LJ7|L-JL7F7F7FJLJLJL-7L--7FJ|FL-|| +F|LF-----JF7F7||LJL-JL-----7F7LJ|L-7FJFJFJL7L-JF7|FJ|||LJLJLJL---JL--7-7F7JL|.L||L---JLJLJLJF7L---J|F----JF--JF--7LJLJLJF7F7F--JF-7|L-7JJ.LL +|7-L-----7|LJLJF7F7.F--7F7FJ|L-7L-7LJFJ-L-7|F7J|LJL7|LJF-7F-----7F-7FJLL|L7-J.F-JF7F7F7F7F-7|L7F---JL----7|F-7L-7L7F----JLJLJFF7|FJ|F-JJF777 +L|-F-----JL7.F7|LJL-JF7LJLJFJF7L7FJF-J7F7.|LJ|FJF--J|F7L7|L----7LJLLJ7FLF7|.LFL-7|||LJLJLJFJ|FJ|F-------7LJL7L-7|-|L---7F77F-7|LJL7LJJLFJ||7 +||.L7F7F7F7|FJLJF7F-7||F--7|FJ|FJL-JF-7|L7|F-JL7L---J|L-JL-----JF-7F-7-7L--7.-LJLJLJ.F--7.|FJ|FJ|F7F---7L---JLFJL7L---7||L7L7||F--JF7.F|L7-- +F---LJ||||LJL-7FJLJF||||F-J|L7LJF---JFJ|FJ||LF-JF7F--JFF7F7LF7F-JFJ|FJFF-FL777|7F7LF7L-7L-JL7||FLJLJF7|L-----7L-7L--77LJ|FJFJ|||F7L||F77.|7. +|||||-||LJF---J|F---J|LJ|F7L7L-7|F7F-JFJL7|L-JF-JLJF7F7|LJL-J||F-JFJL7J|.7-F-7F-JL-JL--JF7F-JLJF----JL-------JF7L---JF7FJL7L7LJ||L-JLJL-7-77 +FL7J|7LJF-JF--7|L----JF7LJL-JJFJ||LJF-JF7LJF7FJ.F7F|||||F----J|L-7L7FJJ-7|.|FJL---7F--7FJ||F--7L---------7F7F-JL7F---JLJF7L7|F7LJF------JJ-J +7J.||FF-JF7L7FJ|F----7||F----7L-JL-7L7FJL-7||L7FJL-JLJLJL-----JF7L-JL-77-|F|L7FF7FLJF7LJFLJL-7L7F7F7F7F7.||LJF-7LJF7F--7|L7LJ||F-JF7F77FJLFJ +F777|7L-7||FJL7|L---7LJLJF7F7L----7L-JL--7||L7LJF7F-7F--------7|L7F-7FJ-F7FJFJFJL---JL----7F7L7||LJLJLJL7LJF-JJ|F-J|L-7|L7L7FJ||F-JLJL77FFJJ +-JL-F-F-J|LJF7LJF---JF-7FJLJL7F--7|F-7F-7|||L|F-JLJFJL-------7|L7LJ.LJFL|LJFJ-L------7F7F7LJL-JLJF-----7L-7L--7|L-7|F7||FJFJL7|LJF--7FJJ|F|| +J77F|JL-7L-7|L--JF--7L7||F7F-J|F-JLJ||L7LJLJFJL--7FJF-7F7F-7FJL-JF7F7F7-L-7L7|FF---7.LJ||L----7F7|F----JF7|F7FJL--JLJLJ||FL--J|F7L-7LJLLL-F7 +|7FFJJ.FJF-JL----JF-JFJLJ||L--J|F7F-7L7L---7L7F-7||FJL|||L7|L---7|LJLJ|F7FJFJF7L--7L--7LJF----J||||F7F--J|LJ|L--7F-7F7LLJF-7F-J|L--JL|-||JLL +||L7.LL|FJF----7F7|F7L-7.||F7F7LJLJFJ-L----JJLJ|LJ|L7FJ||FJL----JL-7F-J||L7L7||-F7|F--JF7L-----JLJLJLJF--JF7L---JL7||L-7FJFJL-7L---77J7-|.F7 +||L--.LLJJL7F-7LJLJ|L--JFJLJLJL-7F7L-------------7L7|L7|||F7F7F7.F7||F7|L-JFJ|L-J||L---JL-------7F7F7LL---JL--7F7FJLJF-J|FJF7FJF7F7L7F|J|777 +||7F|.FLJJ.LJFJF7F-JF7F7|F-7F7F7LJL--7F-7F-----7FJFJ|FJ|LJ||||||FJ||LJ|L--7L-JF--JL7F-7F-7F7F7F7LJLJL-7F------J|LJF--JF-JL7||L7|LJL7L7J.LLFL +L7F||F7J.FFF-JFJ||F7|||LJL7LJLJL-7F-7|L7|L----7|L7L-JL7L-7|LJ|||L7||F-JFF-JF7FJ-F7JLJFJL7LJLJ||L7F7F-7LJF------JF7L---JF-7LJ|-LJF7-L-JF777.L +FL-|--7.FL|L-7L7LJ||||L7F-JFF7F--J|FJ|FJ|F7F--JL-JF--7|F7||F7LJL-JLJL7F7L-7|||F7||F-7L--JF7F7||FJ|LJJL--JF-7F7F7|L--7F7L7|F7L7F-JL7JJFFF7JFJ +F||||.L77FL7FL7|F-J||L7LJF--JLJF--JL7||FJ||L----7FJF7|LJLJ|||F7F---7FJ||LFJ|LJ|||||FJ-F-7|LJLJ|L-JJF7-F--J|LJ|||L--7LJL-JLJL7LJF--J|LFJL||-. +7JL-7-|JLJFFL|LJL-7|L7|F7L-----JF---J||L7||F7F--J|FJLJF--7LJ||LJ|F7|L-JL7L7L7FJ|||||F7L7|L----JF7LFJL7L--7F-7LJL---J|F----7JL-7L-7F77.L-7.JJ +LL-J7-JL|-||LF----JL-JLJL------7L--7-LJ|||||LJ.F7|L7JFJF7|F7LJ7F7||L7F--JFJFJL7LJ||LJ|FJL7F7F--JL-JF7L---J|FJF7-F7F7FJF---JF7JL-7LJL77FJLJ.| +..|.F7|F77JJLL7F7F7F--7F7F7F--7||F-JF7F7LJLJ.F7|LJFJFJFJLJ||JF-JLJL-J|F7-L7|||L-7LJF-JL-7|||L-----7|L7F7F7|L-JL-J|||L7L----JL7JJL7F-J-7J.F|7 +.|--.L-JJJ77LFJ|||LJF-J|||||F-JL-JF-JLJL7F7F7|LJF7L7L7L--7|L7|F7F---7||L7FJL7F--JF7|F7F7||||7F7F--J|LLJLJ||F---7FJ||FJF7F---7L-7L|L77-J-|--F +FFJJ-FLJ.7-|.L7|LJF7L--JLJ||L---7FJF7F7FJ||||L7FJL-JFJF--J|FJLJLJF-7|LJFJ|F-JL-7FJ|||||||||L7||L---JF-7F7LJL--7|L-JLJFJLJLF7L--J-L-JF7J.||F| +LJ7J||J|FJL77FLJF7||F7F--7LJ-F7F||FJLJLJFJ|||FJL---7L7L7LFJL7FF7FL7LJF7|FJL7-F7||FLJ||||||L7|||F-7JFJFJ||F7F-7||F-7F7|F7F7|L---7LF--J|.|JFJJ +.LL.F77-|-F|F---JLJ|||L-7|F7FJL-J|L-77F7L7LJLJF7F--JFJFJFJF-JFJ|F7L--J|LJF7L7|LJL7LFJLJ||L7||||L7L7L7L-JLJLJFJ||L7|||LJLJLJF---JFJF--J-F.7J. +7.|-|7|F7.-7L-----7|||F-JLJLJF7F7|F-JFJL-JF-7FJLJFF7L7|FJFJF7L7|||F7|FJF-JL-JL--7L7L7F-JL7|||||J|FJFJF-7F--7L-J|FJLJL-7F---JF7F7L7L--7|L-F-J +LF-.LFL-7J7F|FF---JLJLJF7F7F-JLJLJL--JF-7FJ-LJJF-7||L|||FJ||L-JLJLJL7L7L---7F7|FJFJFJL-7FJ||LJ|FJL-JFJ.LJF-JF-7|L----7LJFF7-|LJ|FJF--JJ77|7| +F||JFJFL|FLFL-L--7F-7F7|||||F---------J-|L----7L7LJ|FJLJ|F7L-------7L7L7F--J|L7L7L7L7F-JL7|L-7|L----JF-7FJF7|FJL7F7F7L---JL-JF-J|FJJLJ7L7JLF +||F.7.J-777J|FF--JL7LJLJLJLJL--------7F7L-7F7FJJL7FJ|F--J||F-7F7F-7|FJFJL7F-JFJ-|FJ|||-F7||F7|L----77L7|L7||||F7LJLJL7F7F7F7FJ.FJL-7|FJJ||JL +F-L7L|77||7JF-L----JF7F7F7F7F7F7F----J||F7LJLJ.F7|L-JL-7FJ|L7|||L7|||FJF7|L-7L7FJL7FJL7|||S|||F-7F-JF-JL7LJLJLJL---7FJ|||||LJF7|F--J7JJ-7L7. +7.L7-L-|-L|7|LJF--7FJLJLJ||LJ|||L-----JLJL7F7F7|||F-7F-JL7|FJ||L-JLJ||FJLJF-JFJ|F-JL-7|||||||LJFJL7|L--7L---7F-----JL7||||L--JLJL--7JJ-L-.|J +F-F-.LL|..|F|JJL-7LJF-7F7LJF7LJL-----7F7F7LJ||LJLJL7LJ7F7|||FJL7F7F7LJ|F-7L-7L7|L7|F7|LJLJ||L-7L7FJF-7.L---7|L------7||||L7F7F-7F7FJJ7LL|.L7 +L--|-7-F77F-J|||FL7FJ|LJ|F-JL-------7||LJL--JL7F---J7F-J||||L7JLJLJL-7||FJF-JFJ|FJFJ|L7F-7||F7L-J||L7L-----JL-------J||||JLJ|L7||LJJ|F-7|-|F +7JF--F7JL||..FF---J|F---J|F-7F7F7F--JLJ.F77F--JL7F7F7L-7LJLJFJF7.F7F7|LJL7L-7|FJ|.L7|FJL7LJLJL7F-JF7L-----7F7F----7F7LJLJF-7|FJLJ-|FL-JLJ7L| +7.||FL-.FF--FFL----JL-7F7|L7LJLJLJF--7F7|L7L---7|||||F7L---7L7|L7||||L7F7|F7|||FJF7||L-7L7F7F7|L7FJ|F7F---J|||F7F7LJL---7|FJLJ|7..L7.|-L.7L| +LL-|7-L.|LFF----------J|||LL----7FJF-J|||FJJF7|||||||||F7F7L7|L7|||||F||LJ||||||7||||F7|FJ||||L7||FJ||L---7||||LJL7F---7LJL7|FL7F7L7--7..F77 +.|.|L7.||.LL7F7F-----7FJLJF77F--J|FJF7|||L7FJL7|||||||LJ||L7|L7||||||FJ|F7|||||L-J||||||L7||||FJLJ|FJ|F7F7LJLJL7F7LJF-7|F-7L-7.LL-7|.|JFLJLJ +77.LJ--L7-FLLJLJF7F--J|F--J|FJF-7|L7||||L7|L-7LJ|||||L7FJ|FJL7||LJ||LJFJ||||||L-7L||||LJFJ|||||F--J|FJ|LJL7F7F7LJL-7|FJLJ|L7FJ77J.|.LLJ7.L7| +LL-7LLJF-7JL|LF-JLJF7FJL7F7LJFJFJ|FJ||||FJL7FJF-J||||FJL7|L-7||L7FJ|F-JFJ||LJ|F7L7|||L-7L7|||LJL-7FJL7L-7FJ||||F--7LJL----7|L--7.---J.FJ-7.J +L|-F-7F--|.F7LL7F7FJLJ|JLJL7FJFJFJL7|LJ|L7FJ|-L--J|||L7FJL7FJ|L7|L7|L7FJFJ|F-J|L-JLJL7FJFJ|||LF--JL7||F7|L7|LJLJF7|F7F-7F-J|F7FJ-|L-J.L|||-| +-JF.LL-J-FLJJ.LLJ||LFF7F7F7LJJL-JF-JL-7|FJL7L---77||L7||F-J|FJF|L7LJL||-L-J|F7L--7F--JL7L-JLJFJF-7FJFJ||L7||JF--J||||||LJF7LJ|L7FJF---.F-7-J +LFJF---L.-7JF-7LFJ|F-J||LJL------JF-7FJ|L-7L7F7FJFJ|FJ||L7FJL-7|FJF--JL--7FJ|L7F-JL7F-7L-77F-JFJFJL7L7|L7||L-JF7FJ|||L---JL7FJFJ7LLJ7.|.7L7J +-L7L77.|.FJ|J.J.L-JL-7|L-7F7F-7F-7L7||FJF7L7||||7L7|L7||FJL7F7||L7L-7F7F7||FJFJL7F-J|FJF7L7L-7L7L7FJ7||FJ||F-7|LJJ||L7F---7|L-J|J.|7||7JJFL. +L7L-J7-F|J-FF.|.|L.F7||F7LJLJFJL7L7|LJL7|L7|LJLJF7|L7||LJF-J|LJL-JF7||LJLJ||FL7FJ|F7||FJL7L-7|FJFJL-7||L7|||-|L--7||FJL--7||JJ.-.|FL7|.|F--7 +FJL|.|LLLL7|L7-F|7F|LJLJL----JF7|FJL7F-J|FJL7.F-JLJFJLJF-JF7L-7LF-JLJL7F--JL7FJ|FJ||||L7FJF7||L7L7F-JLJFJ||L7L---JLJL-7F-JLJJ-|.|L7-FJFF|--- +F|---7.L-|-LFJ-FJLJL-7F------7|LJ|F7||F7||F-JFJF7F7L--7L-7||F7L7L---7FJ|F-7FJL7||FJ|||FJL7||||FJFJL7F-7L7|L7L--------7|L7F7JJ-7.L7JFF.7||7|7 +.L-7.L-.F7..-JLF.LF--J|F-----J|JFJ|LJ|||||L-7L-J|||F7FJF-J|LJ|FJF---J|FJL7|L-7LJ||FJ|LJ77||LJ||FJF-JL7L-J|FJF7F7F7F-7|L7LJL-7-JF|--L|F|-J-FJ +FF-L-||.F|..||.|7.|F-7|L-7F7F7L7L7L7FJ||||F7|F--J|||LJFL-7|-FJ|7L7F-7|L-7||F-J.FJ|L7L7F7FJL7LLJL7|F--JF-7|L7|LJLJLJJLJFJF-7FJ|LL-.|.L|JJFLL7 +FJ-J-||F-JLF-7F.L7LJLLJF7LJLJ|FJFJFJL7|LJ||||L-7FJ|L7F---JL7L7L-7||FJL7J|||L--7L7L7L7LJ||F7L---7||L7F7|JLJ||L-7F7F77F7L-J7||F-J.|F|-7|J7F77| +|7J|.FLFJF7J.LJ7F7FLF--JL----J|FJFJJJ||F-J|||F-JL7L7||F-7F-JFJF7||||F7L7LJL7F7L7L7L7L7FJ|||F7F7|||FJ|||F---JF7LJLJL-JL-77F|L7LF7|F|-LJF|F77. +L7-|7L-JL|--|.FLJLJ7L-----7F7FJL7L--7LJL7FJLJL7F7|FJ|||FJL7-|FJLJLJLJL-JF--J|L7L7L7|||L7||||||||||L7|LJL7F7FJ|F7F-7F7F7L7FL-JJLL7-F..|LJ-LF7 +L-.L-JJ.FJ|-|777F---F-----J||L-7|F7FJF--J|F---J||||FJLJL7FJFJ|F7F-7F-7F7L7F-J||FJFJ|FJFJ||||||LJ||LLJF--J|||FJ||L7LJLJL7L7|7L.FFJJ|7.77FF7L- +7--|J7.F77|FLLF--JFL|F7F-7FJ|F-JLJ||LL--7||F7F7||||L7F7L||.L7LJLJFJL7LJL-JL--7LJ7L-JL7|FLJLJ|L-7||F--JF-7|LJ|FJL7L--7J-L7L-7J.LJJ7L-7JF7LJ7. +7|..F|J7|.|JLL|7J.|.LJLJFJL7|L-7-LLJF7F7||LJLJ|||||FJ|L-JL-7L-7F7L7JL7F--7F-7L---7F--JL7F77FJF7|LJL--7L7|L7FJ|F7|F-7L7F-JF-JL7J|J|F7|FLJ-L-7 +FJ7FFLJ|||..|.L--L|-F---JF-JL7FJ|7-L|LJLJL7F--J|LJ||J|F-7F7|F-J||FJF-J|F-JL7|F7F-J|F--7LJL7|FJLJF----JFJ|FJL-J|LJ|-L-JL-7|J-FF7F77|-J-FJ.|F| +7|.-|J-FJL|-|--J..L.L---7L7-F||-F---L-7F7FJL-7FJF-J|FJ|7LJLJL-7||L7L7FJL-7FJ|||L7-LJF-JF-7|LJF-7|F7F-7|LLJF7F7|F7L---7F-JL77L|FJL-JJ|7.FFF-J +LJ-L7.F---JL|F|7-7J-JFLL|FJ7-LJFJJ|F|-LJ|L-7FJ|-L7FJL7|F------J|L-JFJL7F-J|FJ|L-JF-7L-7|J|L--JFJ||LJFJL---JLJ|||L7F7FJ|F--J.|.7|7LJ7L7JJLLJJ +F|.F---7LJF-FJL--|.|.FF-|L7F-7J|77FF|FF-JF-JL7L-7|L7.LJL7F-7F-7L--7L--JL7FJL7|F7LL7L--JL7|F7F7L7|L7FJF--7F7F-J||FJ||L7|L-7JF|7|-J||--|J.7.L| +|.F|-JLLJ-F--J-L|LF--FJFL7LJFJ|LL7FLLFJF7|J.LL-7||FJ.F--J|-|L7L7F-JF----JL-7|LJ|F-JF7F7FJLJ||L-JL-JL7|F-J||L7FJ|L7|L-J|F-JJJL7JJJ|J|-L--F--7 +77||FJ||.|JFFJ-FJF|.|LF-JL--JLJ7L|LLF|FJLJ|-|FLLJLJ.LL--7|FJFJFJL-7L--7F7F7||F7|L7FJ||||LF-JL-----7FJ|L-7|L-JL-JFJL--7LJJJ-|-|LL.L7|.J7FF.FL +LL|J7JF|.|FF7FF---|F|.77FLJ7||.|.F77LLJ-L|--|JLJ7.F-JFJLLJ|FJFJF-7|F--J|||||LJLJFJL7LJ|L7L-7F7F-7FJL7|-FJL7F7J|LL-7F-JJ.|J.F7--J-LJLJJFF7||7 +-JJLF7J|FJFJ|FL-J7L-J7|-|-L|FF7L-F-7J.L.L|---J.LL-|..F||LFJL7L7|-LJL-7FJ|||L--7.|F-JJFJFJF-J||||LJ|-LJ.L-7LJ|L-.L7LJ-|..|77JL7-|J.F7--|||J|7 +F|7.77.-7LL7F|F-JF-7LL7-7-|L7|.FL|-F-7.|.7J|J-|-L.LF---F-JF7|FJL-7F7||L7||L7F-J.||-F-JFJFJF7||L---7FJ.-LFJF7L7J-|-||-7F7|JL7LJ-LF7-JJFLLJ|.L +FFJ7|F|L--L7--JJ7LL|7.LLL-777F-JFL7||LJF-J-J|L|.FJJLFJLL--J|||F7FJ|L-JFJ||FLJ-L7||FL7FJLL7|LJL-7F-JJL7|LL7||FJJ-7.L7FF7L|-|-77.||LJF777..-7J +||LL7|.7..|L-J--F7F---7.|FLF-LJ7F7FF7|LJ-J77||F-7-F.J7J..J.LJ|||L7L--7|-|L-7JJ.FLJ7LLJ7..|L7J.FLJJ|L.L7.FJ|||JFF---FFJ|F|F|7|7--7FLFJJ-L.||. +.LLL-|F|JFF-|F-.L|L|-|LL7F-JJ|7FLFFJFJ7|--77|LL..FL7F7.|-7FJ.LJ|FJF--JL7|F-JJ7F-J--J|LFF-L-J7J7|LFLJF-F-L-JLJLJ-|.F|LFLLJF7LJ.-7L||||L77.-J7 +.|.|L|L--7J-|J.7F7F|LF7F7-JJF--.LLL-.FJJ|FF--|LF-7-|7.|.L|J..|.LJ-L-7F7||L-7.|FJLF7FJ7|77|L-7|LJ.||F|L-7-FJJ7.|J.F-|LJLF7--7J.LJFJ-|-7L77|LJ +FLF||LL|7J|J|.FFJL||.FJLJFJ-L-|L-LJLFJ.FL-|7.F7|F|F||.FJ..L|-7-J.F--J|LJ|F-J-FJ||FLJFF|L-J||L7FL7J77F-|JF7JFFF|7-|.|...J|.F|LF-L|J.LFJJL77|. +|F-77LLL|-J----L|7LJ7L-|-JJ7|F-|.LL77LJ7|.LLF|FLFJ7FL-|L77.|L|LLFL--7L-7|L7.FJF|--LL--F--|F|F--JF.FLJ...||7FFJLJ-77L7J-LF7F7FFF7|F7.J|FLJFF. +L7L|-7-||L7.||FLJ7FJ7JF7.|.|FL-J7.FL-JF|-7FL|LL-LF|L||.FLJFF7J-7FLF-JF-J|FJFL7||.FJL||J|-JJ.L|.FF-L--L7F|FL---7|F-77FJFL.F7.L|LL-|-FLJ-J-FJ- +LLF7.J.L7-J-L-|.L|JL|JLL-FL7JLL7.L-JJL-J-LJ.LJL77-|-J-.F-LF-JJ.LJLL--JLLLJ-L-FLF-7...J-J-LJF.L.L7JL|JLLFF7J-LFL--L|-JLJ.--L7.|.LLJL|-J.F-JJ. \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day10/test1.txt b/solutions/2023/pughmds/inputs/day10/test1.txt new file mode 100644 index 0000000..73b3d66 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/test1.txt @@ -0,0 +1,5 @@ +..... +.S-7. +.|.|. +.L-J. +..... \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day10/test2.txt b/solutions/2023/pughmds/inputs/day10/test2.txt new file mode 100644 index 0000000..2417530 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/test2.txt @@ -0,0 +1,5 @@ +-L|F7 +7S-7| +L|7|| +-L-J| +L|-JF \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day10/test3.txt b/solutions/2023/pughmds/inputs/day10/test3.txt new file mode 100644 index 0000000..682499d --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/test3.txt @@ -0,0 +1,5 @@ +..F7. +.FJ|. +SJ.L7 +|F--J +LJ... diff --git a/solutions/2023/pughmds/inputs/day10/test4.txt b/solutions/2023/pughmds/inputs/day10/test4.txt new file mode 100644 index 0000000..1ddc980 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/test4.txt @@ -0,0 +1,5 @@ +7-F7- +.FJ|7 +SJLL7 +|F--J +LJ.LJ \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day10/test5.txt b/solutions/2023/pughmds/inputs/day10/test5.txt new file mode 100644 index 0000000..61e8144 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/test5.txt @@ -0,0 +1,5 @@ +...... +.S-7.| +.|.|.| +.L-J.| +.....F \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day10/test6.txt b/solutions/2023/pughmds/inputs/day10/test6.txt new file mode 100644 index 0000000..2c1a565 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day10/test6.txt @@ -0,0 +1,3 @@ +S7.J|FLJFF. +||FLJ-J-FJ- +LJ|-J.F-JJ. \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day11/input.txt b/solutions/2023/pughmds/inputs/day11/input.txt new file mode 100644 index 0000000..02d4f30 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day11/input.txt @@ -0,0 +1,140 @@ +.......#...........................................................................#........................................................ +.............#...........#..................#.............................................................#..............#.......#.......... +..................................................................#.........#......................................#........................ +.................#...........................................................................................................#.............. +.............................................................#.............................................................................. +......................#.....................................................................#............................................#.. +.....#...........................................#.......................................................................................... +............................#..........................................#...............................#.................................... +...........#......................................................................................#......................#.................. +....................................................#.....#................................................#......................#......... +#..................................................................#.............#...........................................#.............. +......................................#..................................................#...............................................#.. +.................................#.......................................................................................................... +...............#........#..............................................#...............................................#.................... +.......#.................................................................................................................................... +............................................................................#...................#..................#.......#.........#...... +...................#......................#......#.......#.......#.......................................................................... +............#...........................................................................#................#.................................. +.....................................................#..................#................................................................#.. +.............................#.....#..........................................................................#...................#......... +...#.......................................................#...............................#................................................ +............................................#........................................................#...................................... +...................................................................#..................................................................#..... +..........................................................................................................................#................. +#.......................#............................#.......................................#.............................................. +..........................................#.................#.....................................#................................#........ +..................#............................................................#........................#..............#.................... +............................................................................................................................................ +......#........................................................................................#.............................#.............. +...............#........................#.........#.....#......#...................#..............................#......................... +.........................#.....#..........................................#................................................................. +.................................................................................................................................#.......... +...........................................................#..................................................#..........#............#..... +.............#.................................................................#............................................................ +.....................#............#..............#.......................................#.................................................. +#..........................#...........................#..................................................#................................. +.............................................................#....................................................................#.......#. +......................................................................................................................#..................... +............#..................#...........#........#...............................#..............#...........#............................ +.......#..............................#..................................................................................................... +........................#...............................................................#..............#.................#.............#.... +.#..........................................................................................................#............................... +.........................................................#.....................#.................................................#.......... +..........................................#..........................................#...........................#.........................# +.....#..........................#.................#..........#........#..................................................................... +..........#...........#.................................................................................#................................... +.............................................................................................................................#.......#...... +..........................................................#.................#............#.................................................. +.....................................................#..........................................#...........#............................... +.......................................#...............................#.............................#...................................... +..................................#...............................................#........................................#.............#.. +.......#.......#.......#..........................................#......................................................................... +.............................................#...............#.............................................................................. +............................#................................................................#.............................................. +........................................................#..................#.............................#........................#......... +...................................................................................................#..........#............................. +......#............................................................................#....................................#..................# +..................#.....#...............#.....#......#...................................#.....................................#............ +..................................................................#...........#............................................................. +#.............#..........................................#...............#...................#.........#.................................... +........#.............................................................................................................#.............#....... +......................#......................................#............................................................................#. +..............................#....................................................#........................................................ +............................................................................................................................................ +...............#.............................................................................................#.............................. +........................#............#............................#................................................................#........ +...#.....................................................#................#..............#...................................#.............. +.............................................#.............................................................................................. +...........................#................................................................................................................ +.....................................................#......#....................................................#.....#.................... +.....#....................................#.....#...........................#...................#........................................... +..............#.....................#...................................................................#................................... +#........................................................................................#.................................................. +.....................#........................................................................................#............................. +..........................#.......................#..................................................................................#...... +.........#................................................#.........#.......................................................#............... +...............................#................................................................#.....#..................................... +...................#..........................#.................#..................#..............................................#......... +......#......#.............................................................................................................................. +............................#......................................................................#........#............................... +....................................................................................................................#....................... +................................................#...........#.................#........................#.................................... +.................#.......................................................................................................................... +..........................#......................................................................................#..........#..........#.... +#...............................................................................................#.....................#..................... +............#......................#...................#.................................#.........................................#........ +............................................................................................................................................ +....................................................................#....................................................................... +.....#........................................#...........................................................#...................#............. +..........................................................#..................................#.............................................. +.............................#............................................#................................................................. +......................#............................................................................................................#........ +..#.....................................................................................................................................#... +...........#..........................#............................................................................#........................ +..............................................#.................#....................#...............#........#............................. +...........................#...........................#......................................#...........................#.....#........... +.........................................................................................................#.................................. +.........#......#................................................................................................#........................#. +...#.....................................................................#..............#................................................... +.............................#......#...............................#................................................#...................... +.........................................#............................................................................................#..... +.....................#............................#............#.................#...........................#...............#.............. +.............#..........................................#...................................#............................................... +..#.............................#...........................................#.....................#................#........................ +...........................................#...........................#.................................................#..............#... +........#...........................#.......................#.......................#....................................................... +...........................#.............................................................................#.......................#.......... +............................................................................................................................................ +...............#...............................................................................#..........................................#. +............................................................................................................................................ +#...............................................#......#.......#...............#............................................................ +.........#.................................#...........................................................#.................................... +......................................#............................#...............................................#........................ +......................#.........#.............................................................................#............................. +....................................................................................#............#.......................................... +..........................................................................#...............#................................................. +...........#.....#................................#.........................................................................#............... +..................................................................#.......................................#.........................#....... +.........................#................................#........................................................#........................ +........#...................................................................................#......#....................................#... +...............................................................#...............#............................................................ +.............................................#.........................#.....................................#.............................. +...................#...............#........................................................................................................ +..........................#..............................#....................................#..................................#.......... +...........#.....................................................................#.....#.................................................... +...#.................................................#...............................................#...........#...........#.............. +...............#........................#................................................................................................#.. +....................#..............................................#.....................................#.................................. +..................................#.....................#................................#.................................................. +............................................#...................................................#.............#............................. +........................................................................................................................#.....#......#.....# +...........................................................#..................#......................#...................................... +...................#.........#....................................#.........................#............................................... +....................................................#...............................................................#....................... +.............#........................#....................................................................................#................ +....................................................................................#...................................................#... +.......#................................................#................#.................................................................. +.#.................................................................#..............................................................#......... +...................#.....#...................................................................#.........#.........#.......................... +............................................#.....#............#..................................#.........#................#.............. \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day11/test1.txt b/solutions/2023/pughmds/inputs/day11/test1.txt new file mode 100644 index 0000000..a0bda53 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day11/test1.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day11/test2.txt b/solutions/2023/pughmds/inputs/day11/test2.txt new file mode 100644 index 0000000..6346357 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day11/test2.txt @@ -0,0 +1,10 @@ +...#...... +.......... +.......... +.......... +.......... +.......... +.......... +.......... +.......#.. +.......... \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day11/test3.txt b/solutions/2023/pughmds/inputs/day11/test3.txt new file mode 100644 index 0000000..9096eb8 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day11/test3.txt @@ -0,0 +1,2 @@ +##. +..# \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day12/input.txt b/solutions/2023/pughmds/inputs/day12/input.txt new file mode 100644 index 0000000..218188c --- /dev/null +++ b/solutions/2023/pughmds/inputs/day12/input.txt @@ -0,0 +1,1000 @@ +???#...#.?#??#?#? 1,1,1,8 +#?.???????#????#???. 1,1,12 +????.#??##??? 1,2,3 +??#.#????#???#.??. 2,10,1 +??????.?.???##?#?. 6,1,7 +?#????????????###?? 1,3,9,1 +?.??#?#?#.???? 7,1 +.????????..??.#?. 5,2,2 +.?.??#???.. 1,1,1 +???#?????????#?? 2,1,3,2 +??#?#?????. 4,2 +?####???.???#? 6,1,2 +#?.?#?#?????.?#.?.? 1,5,2,1,1,1 +??.##?#?##??.??? 1,7,1 +???.###?#?# 1,7 +?????##?#..#? 1,3,1,1 +??#??#?.???.?#??#? 1,1,1,2,1,2 +?#?#?.???.?? 4,1,1 +.?#?????#?? 3,1,2 +?#??????????.??? 3,7,1 +???????##??###???#?? 2,3,5,4 +?.???#.??? 1,1,1 +???.#?#?????.?#???#? 2,5,1,3,3 +?.#?.#????.??## 1,2,1,3 +?????????##?#??????? 1,5,9,1 +?###????#??##?#... 9,4 +????.#?#????..???. 5,1 +????#??.##??#?#??.?? 1,2,5,3 +..?????#.???.??##? 1,1,2,1,3 +?#?????#??##.??# 12,1 +?#??#?#.#????? 1,4,2,2 +???#?...???????.? 3,2,4 +??#??#?#?#?????#?.#. 1,1,12,1 +???#??..?###. 5,4 +?#.??#?#????????# 2,2,1,7 +????.?????. 1,2,1 +?.??????#??.???#.?? 1,1,2,1,4,1 +???#??????.??????. 6,1,1,1,1,1 +?#??#?#??##??? 1,4,5 +?..??#??????.??. 1,4,1,1,2 +?.??##???..??? 1,3,1,1 +?##???.????#?? 3,3 +??????.??#????? 1,1,5 +?##.????#????.#??. 2,8,1 +????#????#??# 1,10 +???.?#??????#???.? 1,2,1,1,1,2 +.?###.##??? 4,2 +??.????#???#???###.? 1,15,1 +?#????#?#???. 3,1,1,4 +???????.????#???? 6,4 +..??..???# 2,1 +.?.?#?????..????..? 1,4,1,1,2,1 +?#?.?.???????? 3,1,1,5 +?###?.??#??.?###?# 4,3,6 +..?#?.??#??##? 3,2,2 +.?????#?????#?##?? 1,3,2,5 +?#???#??.?.#?????? 8,2,3 +??.??????#?#???? 1,2,5,1 +?.??????#? 1,3,1 +?...#??.?????#? 1,3,6 +?.??.?..?#???? 1,1,1,4 +.#??????.? 1,1 +?????..?#????#.? 1,2,2,4,1 +#.###?#????. 1,5,1,1 +.???????#.???#?. 1,1,3,1,1 +?#?#?.???????. 4,2 +#????????#? 8,1 +#?.?#????????? 1,2,6 +?#??#????##?.???.? 5,1,3,2,1 +????#????#???#?.???? 1,10,1,4 +?##??????.???#?..?? 9,1,2,1 +?#.??#???.. 1,1,2 +.?#?????#.? 3,3,1 +??.????.#??? 1,2 +#??#??.????#??.?.??? 1,1,1,7,1,1 +##????.???. 2,2 +??##?.?##? 3,3 +?#?..?.??..??.?? 1,1 +?#????????? 3,1,2 +?##??.???.?.?# 3,1,1,2 +?.####???????? 1,4,1,1 +?..#.???#????? 1,7 +?.??.??##???? 1,1,4,1 +.#?#?????#?.#??# 1,1,1,1,4 +??.?????#????.??##. 8,4 +????????.??.##? 1,1,2,1,3 +??##???#???#?#??.? 6,1,3 +?..??#???#??. 1,8 +????????#????#??#??. 2,11,1 +?.???????????#?#. 1,3,1,1,4 +?#?#.??#.???#???##?? 1,1,2,11 +??#?#???#?#??????? 11,1 +.#.??#?????#? 1,6,1 +..?????????#?. 3,2 +????.??.#.?#?#?????. 1,2,1,1,4,2 +#??????????##?.??? 5,1,1,3,1,1 +????????..???? 3,2,3 +??.????#??#???# 1,7,1 +..??#.?????????? 1,5 +?#?#???#??#??##?#??? 1,3,1,2,8 +?????#.?#???.???# 2,1,4,1,1 +?.?#??.??.????#??#? 1,8 +??#??.?????? 3,3 +?#?..??.?#? 2,1,3 +.????##???. 1,6 +???...?.????##?? 2,7 +???..?###?#? 3,6 +??.?#?#??###?????#? 1,4,8,1 +.????#??#?# 1,6,1 +?????.??.? 1,2 +?#???##??.?..### 1,5,1,3 +.???#???#??. 4,3 +???#?.?#????. 1,5 +?????..??.#?#?###??# 1,2,1,10 +????#??????.?#?..#?? 5,2,1,3,2 +#????#???????#???#.? 6,10,1 +????#??????.?.?..?. 9,1 +.??????##????.???#.? 2,8,2,1 +.??##?.???#?# 1,3,1,3 +????##??##??#?#. 1,11,1 +???#?##.?.??? 4,1 +?????#?#??? 1,6 +?...????????.? 1,2 +#??????##??..??? 2,1,4,1 +.????????#??. 3,1,1 +??#??????##..?.????? 3,6,3 +??###??.??###?. 6,5 +???.???#???.#?.?? 1,6,1,1 +?????#??????? 1,6 +.#??#?#?#??.??? 2,7,1,1 +#??..??????#? 1,1,1,5 +?#..?##??#?. 1,7 +?#?#?#??..?.?. 7,1,1 +.????????????.?##??? 1,1,8,6 +??????####?..# 2,6,1 +?????#???#???????? 10,1,1 +??#??#???.??#??? 3,1,2,1,3 +.#..?.?.?###??#...# 1,1,1,6,1 +?#?#???.#??#????..? 1,3,4,1,1 +.?##???#????#???? 3,2,4,1 +###?..#??#??? 4,1,1,1 +???.??#??#??. 1,7 +????#?##??? 1,1,5 +?.????????????##? 1,1,3,1,4 +??#????#??. 1,4,1 +.??#???#?.???#???#?? 8,6 +##???#??.???#?.?? 6,1,1,1,2 +#?#??#???#? 3,2,3 +??#??????#??#?? 2,6,1 +?.????#?#..??????.?? 6,2 +.??.??.#?#?##? 1,1,1,4 +????...?????????? 3,5 +??#####.###???.?? 7,3,2 +?##.??#??#???#??? 2,11 +??????.??.?.???? 3,1,1,1,1 +?.##?????##?? 2,4 +?.???#?????.??????? 1,5,1,1,1,1 +?????????#??? 2,9 +?#???#?.#?.???.# 2,1,2,1,1 +?#??????#?#? 1,1,1,3 +?#??????#??.#????? 9,1,1,1,1 +#???.?.?#????#???# 4,1,2,5,1 +??#??????? 1,6 +?????.?#?? 1,1,2 +?????##.?.?# 1,3,1,1 +???#?????#??# 1,2,2,4 +.?#??????..?# 4,1,1 +.#???.?.??##.???? 3,1,4,4 +???.???#.????.#????? 3,5 +#??#??#... 4,1 +??.??#??#..???.?? 5,1 +??.?#?????..##????? 1,6,2,1,1 +..?#??#???????#?#? 8,5 +?.??#??.?.??????. 3,6 +.#??###???????##??. 1,6,5 +??????#???#? 1,3,1,1 +??#.?##?.?? 1,1,4 +.??#???.?#????.?. 6,2,1,1 +.??????#??#?? 6,2 +#.?#??##?.??? 1,6,1 +.?.##?????. 1,2,1 +.?#?.????# 2,5 +.????#?.#? 1,2,1 +?.???.####???#.?. 1,8 +?.#?????.??.???#?? 1,1,1,1,1,6 +??#.?#???##??#. 3,9 +??.#???????.???#???? 1,1,1,1,2,4 +??.???????##? 2,2,3,2 +.?.??#..??.. 1,1,1,2 +????#?.???###?#???# 4,1,6,1,1 +????#??????...???? 4,3,1 +#?.#?.?????#??? 2,1,1,4 +.????????#???#??.?#? 2,2,8,1 +?????.##?? 2,3 +##??.##???? 2,4 +?????#??#?#?.#??.?? 10,3,2 +?????..??????#?. 4,3,4 +..?#.?#?#???. 1,5 +..?.?##??? 1,2,2 +#??#???##?? 1,3,3 +??.#?????.????. 1,2 +?##?????#?? 6,1,1 +????#??###? 3,4 +??????#???????#? 6,5,2 +?#.??.?#?.#????#.? 1,1,2,1,4 +?????#?#?###???##?? 1,5,3,6 +#???#?#?#??????.?? 10,2 +?.??#???.#.?#?.?#?? 1,5,1,2,3 +?#??##?#.????.. 7,3 +??#..??.?#?? 3,2,1 +???#??.???.?? 5,1,1,1 +??.??#.?#.??.??? 1,2,2,1,1 +??.#???#?. 1,2,1 +??.??##???. 1,5 +?##?#????#??.???.# 3,1,5,1,1 +??###?###?#????.???? 1,13,1,1 +.???.??##.? 1,4 +??????.??###??????? 2,5,5 +.#?#?#???#?? 1,7 +????#?#..#??.? 3,1,1,1 +??#?.##?##?###???? 1,11 +.?.#??????##???? 1,1,1,4,1 +#??.##??#???#?#???#? 1,15 +?????#???#?#?.? 1,8 +?#???##??..?## 7,3 +????????#? 1,4 +##????#???????? 2,4,1,2 +?#?##.?###??..?.? 4,4,1 +??##???##?.??? 8,2 +.???????#.?##??### 7,8 +#????????????.##?? 6,1,2,3 +?.??????#?????..#? 1,2,1,1,1,2 +????#??..?.#???#???? 6,1,1,2,2 +.??????#?.?#??.? 3,2,2 +?????.??##? 3,1,4 +.?.???##.##?### 5,6 +?##?????##???#?.?.#? 3,1,8,1,2 +????.?##.?? 3,2 +?.??.??.??#?###??? 1,1,1,1,6 +?.??????#?# 2,3 +??#?#?.?????# 6,1,1,1 +?.#?#??#?? 1,2,2 +??????.#???# 2,1,3 +?.#..???#. 1,1,1 +#???.????? 4,1 +??#?????##???.??? 10,2 +??.??#.??? 1,1,1 +??..???????#??? 1,1,1,1,2 +#??.????#?? 1,2,1 +.#?.#???.?.? 1,1,1,1 +??????.##?#?. 3,5 +?##???????.?##??#?? 3,2,1,8 +??#?????.?#?#. 4,4 +.???????#??#???.?# 12,1 +.#??????.??#?.? 3,2,2,1 +?????#????.??#???.?? 10,5 +??.#..??#? 1,1,2 +?????#?.??#? 2,2,2 +?.#???.#????..??#? 1,1,1,2,2,2 +?##??..#.#?.?#. 4,1,1,1 +?????#.??.#??? 1,1,1,3 +??????#??.???##??.?. 8,5 +?#????#??????.??? 3,2,2,1 +#??????????##..??.?? 1,1,1,5,1,1 +##??#????????..?.?.? 13,1 +.????.#??#??.?#??# 1,1,1,3,2,1 +.?##??#????...?????. 10,5 +##.???????????.#??? 2,1,6,1,2,1 +.??#??#?.?#???? 3,1,4 +.???.??????## 1,2,3 +????????#??#?#?. 5,7 +???.??#??#?. 2,2,1 +..??????##. 3,2 +??????#????????? 1,5,1 +##?#???###?#?.. 10,2 +???..???##?.?#..?? 2,1,3,1,2 +?????##??? 1,5 +?.????#?.??#? 1,5,4 +..????#??.?.#?? 1,4,1 +#????#?.?.. 6,1 +.?.#??.?#???#???? 2,5 +.?#..??.????? 2,2,2,2 +???.??#????.?.??#??# 1,4,1,6 +.#???????..#????? 5,5 +##???.??#?? 2,1,5 +?##?????#??? 5,1,3 +??.#.#?????#??? 1,1,1,1,3 +??.??.?#?? 1,1,4 +?????.?#?? 1,3 +????#?#????? 1,8 +????????#?### 5,5 +.??.?.??#?? 1,1,1 +????????#???#?. 3,3,2,2 +??.#???..?.?.?. 3,1 +???????#.?????? 5,5 +.???#?.????. 4,1,1 +.??#??#??.?# 4,1,1 +.????..?.?? 3,1,2 +#??#?#?#####.?? 2,1,7,1 +.?#??#???.? 2,1,2 +#???#?#??#??.? 1,2,1,3 +?#?#.???#? 1,1,4 +??.????#?..??.?.?#? 1,1,4,2,1,2 +#??????#??.???##??. 2,7,1,5 +?#???.#.?????#?#? 4,1,6 +###???.??..###?#?.? 5,2,6 +??#?#??##?????# 1,1,5,4 +.##??######???#?? 3,7,2,1 +?#.?????.#?#?#???? 1,4,7 +??.?#???##?????#. 1,3,6,1 +??????#???????#??. 1,2,1,2,3 +.???.?#?????.?.? 1,3,1,1,1 +?.##??????? 1,3,2 +..????.??? 1,1 +..??#?.??? 4,1,1 +?##???#.#? 3,2,2 +???#?????.#???? 2,1,1,3,1 +.??.?????..# 2,1,1,1 +.????????#??? 1,3 +??.???#??????? 2,4,3 +?..?#?????.?##.# 7,3,1 +??.?#?#????? 1,9 +?#..???#?#??#.? 1,6 +?#?#?????.#??. 8,2 +??????????. 1,4 +.?#????#?.#?## 2,1,1,4 +#?#?###????.???????. 11,1,1 +.#??####.?#??? 7,4 +.???.#???#?###?? 2,1,1,4 +#??????#?? 2,1,3 +?.?.##?#?.?..#? 1,2,1,1,1 +???#?#???. 4,4 +?.???.??#??? 1,1,3,1 +???????..## 2,1,2 +?.???????.?? 1,1,5,1 +#???????.?#?#??##?? 3,1,1,6 +?.??.?.???. 2,2 +#??##???#??.??. 5,2,1 +????????#? 3,1,1 +.?????#??##?.#?##??. 8,5 +..??..????#?? 1,5 +?????#.?#???##??? 1,1,2,8 +???#....?# 1,2 +?.??????#??#?????? 1,1,7,2,1 +?##?.#??.. 2,2 +?.?.?..??#?#??? 1,1,1,4,1 +.##?.#.#??#??. 2,1,1,2 +.????????#?? 2,2,3 +?..#????.????#?#?#. 1,1,3,3,3,1 +?.#?.?????#???????# 2,12 +????##?#????#?#. 12,1 +?.?#???????.? 1,2,1,1 +##?.????.? 3,2,1 +.??#?#???#.??.???? 6,1,2 +.???????###?.????. 1,1,5,1,2 +..#?????????????? 8,1,1,1 +??.#??#?.?# 2,1,1 +???????????#????? 2,6 +?#.??.???. 1,3 +?#???.?.??.??????? 1,1,1,2,6 +??????#?????.?? 5,1,2,1 +.#???.?.???#? 2,1,3 +??##.??.???.??? 3,1,1,2 +???.????#??#??##??? 3,1,11 +????..##?..?? 3,2 +??????????? 1,1,5 +???.?#.?.?#?#??????# 3,1,1,8 +.??.??#??? 2,6 +##?..??????? 3,5 +??????#????#.?#???# 1,1,3,1,3,1 +?#?????.#?. 3,1,1 +?????.??#??##??? 1,1,7,1 +.????#??#? 1,4,1 +#???#??#????.??? 2,9,2 +?#????#??.???.?.? 1,6,1,1,1 +????????.#? 2,1,1 +???#??##.??#??#?. 7,4 +#??.????.??????#? 3,1,1,2,2 +?##?#??..?#. 3,1,1,2 +.?.?????##???#.?. 3,6 +#.?????### 1,2,3 +????.??.?# 2,2,1 +?????.????.#???#?.? 1,2,2,6,1 +????????#?#.????? 4,2,1,1,2 +?##????.#? 3,1,2 +????.??????? 3,1,1,1 +???????#?.? 4,4 +.#.??????????. 1,3,4 +?????#?.?#.? 2,3,2,1 +?#.?????##??.???#? 1,7,1,1,2 +#?????.????#?? 1,2,4 +???????.????#?? 5,1,2 +??.??.##?????.??#?? 1,6,5 +???.?????..?##???? 2,6 +???????###??##?#? 1,1,12 +????????.? 1,1,1 +??..???????#? 2,7 +??#???.#??##?????? 4,1,5,1,1 +.?.???????????#?? 2,5 +?????##?.? 1,3 +?????.#.??#??#?##?# 3,1,3,6 +???.????#? 3,1,1 +.??.???.#??.#?##???. 2,3,1,7 +..?????###?#???????. 11,2 +????????.???????#??# 1,5,3,2,1 +??????.##?##?.? 2,5 +??.??#???#???.?.? 3,5 +?#?#.??#????#.??# 3,2,1,1,1 +????#??.##?????.#?. 6,4,1,1 +?.?.??.???? 1,2,2 +#.?????????#? 1,8 +.?????????#??????? 1,3,3,4 +???.??????.#.??? 1,1,1,1,3 +???.?#?#??? 3,4 +????????.???##.??? 1,1,1,1,3,1 +??.?.#.?.????.?.? 1,1 +???###?##???# 1,6,3 +?.?.????##??. 1,1,4 +?.????.??.###???? 1,1,1,4,1 +?#??????.?????#???. 1,1,8 +??????#?.? 1,3 +####??#?..#?????# 7,1,2 +.????#??.#.???? 1,1,1,2,1 +??..#??.?#?##? 3,6 +?.??.??##???#????#? 5,7 +??????#??.?.??? 3,2,2 +?.???..?????#??.. 1,1,8 +..?????##?? 2,3 +??????.?????#??? 1,1,1,8 +????#...?#.?? 1,3,2 +??#??.??#??#?? 2,8 +#???????..? 1,1,3 +?#.??#.?#??# 1,3,5 +#???????????###??#?# 2,1,1,1,9 +.??##?.?????? 4,5 +.????.??.?#. 1,2 +#??????????#?..? 2,4,3,1 +#?.???###?##????.?? 2,10 +??#?..??????. 1,3 +#??#?????#?? 1,3,5 +??..?#..??.?? 1,2,2,1 +?.??.????.# 1,4,1 +#????.???? 2,1,2 +.????#??#?????#.? 7,2 +?.?.??????? 1,3,1 +#?#?###??##?#???.#?? 11,2,2 +#?..?????#???? 2,2,3 +?.??????.????.?# 1,3,1,1,1 +??????#?????.? 1,1,3,1 +???#????.?#????. 4,1 +##?####?#?#?.???? 11,2 +??.#?.?.?#?.? 1,1 +????#????###?#????? 2,1,11,1 +#??#?.?#????#?#????# 4,2,1,5,1 +??.???#.??#.#?#?#??# 1,2,1,1,1,8 +?#?????????.?? 1,5,1,2 +???#????#???#..? 4,1,2,1,1 +???..??##?# 1,5 +??.?.#?#??#???#?# 1,1,4,3,3 +?#??#?##?#???? 5,4,1 +????##??#? 4,1 +#?.?????.#?.? 2,3,1,1 +??.?#????????? 2,4,1,2 +??.?.???.?????#? 1,1,2,2 +??.????.??? 3,3 +??.??????##???? 1,3 +?#????.??##? 2,1,3 +??#?##??#?#? 1,4,1,1 +.?.#???.#.???#??#?? 1,1,1,1,8 +???#.??..#??????.?? 3,1,5,1,1 +?##??.#?.??.?? 2,2,2 +???#?.???.?##?? 4,1,1,2 +.?????????#. 3,1,3 +???###?.#.#?#?.#? 6,1,4,1 +????#???#?? 2,7 +??#??#????#?? 7,3 +..?.?????? 1,2,1 +?#?#??#??. 1,4,1 +??##????.? 5,1,1 +.???#?##?#??? 1,1,2,4 +??#???.?##??. 4,4 +??##?#?#???.#?????. 4,1,4,3,1 +.????##?????#?? 1,1,2,6 +?.##????.#?#?.#?? 1,4,3,1 +?????#?#?? 1,6 +.#?##??????.?##.??. 6,1,3,1 +??#?.?????.?#??.? 3,1,3 +.?????###?? 2,4,1 +?.?#?#.??...#..?? 1,4,1,1,1 +??.????.??????#? 2,4,1,3 +.????.?##?#?? 2,3,2 +#?#?####?#???.#????? 12,5 +??#.?????? 2,3,1 +.#???#??#???#?#?..?? 1,1,1,7,1 +??#????#???.#? 7,2,1 +#?#?#..#???#??? 5,1,2,1 +.?#?#####??.? 8,1 +???#?#?.??#???.?# 6,3,2 +.??#???#??? 1,2,3 +???#???#??#? 2,3,1 +?????.??????.?.?? 2,3,1,1 +.?##????.????? 5,3 +##?.#??#?. 3,2,2 +???.#?##?#?#??.#?? 2,1,6,1,1 +??#????.??????#?#?? 6,5,1 +??#?#?...???# 4,1,1 +??.?#??.?##.?.#??? 3,3,4 +#?#????.??????#?? 7,1,4 +.??????#??? 2,5 +#?#?..????????????? 4,6,2,1 +..#?#????#?? 3,4 +#??#?#??????#??#?#? 10,7 +?????.?#?#??? 1,6 +??###???.???#?.## 6,2,1,2 +????#??#?##. 3,1,4 +#????#??#?????#?.?? 1,8,2,1,2 +#.???#?????.? 1,4,1,1 +#?.??.?????#?##.? 1,1,4,4,1 +.??.???????? 1,1,1,1 +??.?##?????.. 1,6 +??#???.???? 1,1,1 +.?.?.??##?????#?? 1,1,10,1 +?????????????? 9,1 +??#.#.??#???? 1,1,5,1 +.???????#?#????.?.#? 5,4,2,2 +.#??#??#?.? 1,5 +?##?#??##??#??#?.??? 15,1 +?#?#????????#?.?.# 3,3,2,1,1,1 +???#??.?????#??.. 3,6 +???#??..???#?.?.??? 1,2 +##???#.?.. 3,1,1 +??.??#?#?#???##?#?.? 2,1,1,1,9 +.#????#?#????#?#?. 9,4 +???#?###.##. 1,1,3,2 +????#.?..???#?? 1,3 +.#.????#???.#??? 1,6,1,1,1 +??#.?.?#???.#?..#?. 2,1,2,1,1,2 +?#????..?? 2,1 +????.?#???#.???? 3,5,3 +??????????##.???#.#? 1,3,1,2,4,1 +?.?#.????#???##.? 1,8 +#?.#????.? 1,3 +.#???#.?#?????.?? 1,3,5,1 +?.#????##?? 1,3,3 +##?.?.#.??????#?? 3,1,1,4,1 +????.??.?.????? 1,1,1,1,2 +.?#?##.??#???? 4,6 +?.?????.?#.. 2,1,1 +????.?#??# 1,1,1 +#.####??#?.#??# 1,8,1,1 +.??.##???? 1,2,1 +??..???.#. 2,1,1 +?..????.??? 1,2 +.??????#...?.????? 1,1 +???.??#???##?? 1,3,4 +????#??#?#??????##?? 1,5,1,1,5 +?#???..???#???#??? 2,6 +??????.??##?. 2,3 +??#?????##??#.#?#??# 3,7,6 +???.?????##?? 1,7 +.?#??#?.?.?? 1,1,1,1 +??.????#?? 1,2,1 +???###.#???? 4,2,1 +?.?#????.???????.. 3,1,6 +???.??.#?#..??##. 1,1,1,1,4 +????#????#.?##? 2,1,2,3 +??#?##?#??.??????? 8,3 +..#???#????.??? 1,3,1,2 +??#?.?.???????.#.?? 3,1,1,5,1,1 +?????#??.?? 1,2,1 +????????..?#??#??.## 1,1,2,6,2 +.#??????##??.?.??.?? 9,1,1,1 +??##??#?????. 8,2 +#.?.?????? 1,2 +.????#?#???#..??# 2,7,3 +?.?#?????????.#? 1,1,1,3,1 +..#????.?????? 3,1,1,2 +??#??#?.????.???.? 3,2,1,1,2 +#???#.??.##??# 3,1,5 +?.?.?#?##.???? 1,1,4,2 +.?###..??#??????## 4,1,4 +???#??????#. 2,4 +??####????#?.??.. 7,1,1 +#?.??????#? 1,2,1 +.?##?#????????#?.??? 3,1,1,1,5,3 +?.???#?##?.. 2,4 +????#???..?##?# 1,1,1,3,1 +??#??.#?.?????.? 4,1,4,1 +???#.???.??. 4,1,2 +?#?#...??#. 2,1,3 +????#.?#..??. 1,2,2,2 +?.#??#????#?##??? 12,1 +??#??????#? 6,3 +???.????#??? 1,1,1,2 +???#.????.????? 1,2,5 +??.?.??#??.??#??? 1,1,5,1,3 +??#??????? 2,2 +?.??#???????##??? 1,6,3 +???#?#?.???#????#?? 7,1,8 +.????????????? 3,1,2,1 +?????##?#?#??.... 1,8,1 +.?##???????#.???. 3,2 +???.???????? 1,1,1,1 +???#.?????????#?#..? 1,1,1,9,1 +?##???#????.??#?#? 10,4 +#??.????????? 3,2,1,1 +?#?..???#?#?? 3,1,6 +?##?#.?##?. 4,4 +?#.#?..?#???? 1,2,3,1 +??.##??#??#?#? 2,5,4 +????##?#???.#.??... 8,1,1 +##???????..?.?#??.? 2,4,2 +?.?#.?#???. 1,4 +.?#.??.????? 1,1,1,1 +??????.???.?#?##??.? 2,4 +???.????.??#??.?? 1,1,2,4,2 +###?#??#.???????? 8,3 +???..??#.????. 2,1,1 +???.?##???.??????# 2,6,4 +.?#?##.?#?????.?? 5,4,1 +.??..??.?#? 2,2 +.?#??????.##?#? 4,2,2,2 +???##.?.?.#???. 2,1,1 +?????#???#? 7,1 +.#?.???#?.??# 1,3,1,1 +?.#?..?#??#####?# 2,10 +??#?##???#?#???#?#? 1,8,1,1,1,1 +??????#.??#?###. 2,1,6 +?#?#?#???#??##???# 1,3,9,1 +?#???.????#.??#?#?? 1,1,2,2,3,3 +?#?#.#.??.?#??????? 3,1,2,3,1,2 +.?#?...?????#.??? 3,4,1,2 +?????????#?#?.?# 1,1,1,5,1 +##?#?#.???????#?? 6,4 +?#??#?????????# 3,1,4,2 +???#???#????.?? 1,6,1,1,1 +?#.????##?.? 2,6 +?.???##??.?#??#? 3,4 +??#?????#.?#?. 2,1,1,3 +?.?????#?#??#.?.#??? 11,2,1 +????#???#?? 1,3,1 +???.?#.???.???. 1,1,2,1,1 +??????#?..??#? 5,2 +.?.?#.?#??. 1,4 +?#.??????##????.???? 2,7,1,1,1 +?#?#?.?????. 3,1,1 +???.##.?.#?. 3,2,1,2 +..????????#.####??? 6,5 +??#.??..?##?##????#? 1,1,9,1 +?#???.??##?.??????. 5,4,3 +.?...??#?????#.# 1,7,1,1 +??????.?#??.?.? 5,2,1 +???..??##?????? 2,5,1 +???##?#??????.#.??. 7,2,1,1,1 +?????????#?? 1,2,1,1 +??.##??.?### 1,2,1,4 +??####?#?###..?????? 1,10,1,1,1 +??.??#???#??? 1,2,4 +????..???#???. 1,6 +??????????#? 8,1 +#?#.?..????? 1,1,1,2 +.?????##???#??? 12,1 +##??#?..?#..? 2,2,1,1 +###???????. 5,1,1 +??.?.##?##??#?.?# 1,1,8,2 +???####?.????#?#???# 1,5,10 +??.??#???.?????#?#?? 1,1,4,6 +???.#??#??..??.?# 2,4,1,2 +.?.??##?###.???##? 8,2 +.#??.?#.??#?? 3,1,3 +????#????#??#??#??? 5,8 +#..#???.???#???. 1,1,1,1,3 +?.##?????.?#?????. 6,4,1 +.????????.??#?? 2,1,1,1,1 +.?.????????##?.?.?#? 1,1,5,3 +??.#???????## 1,1,1,2 +??????#??#???#??#??? 3,1,9,1 +??.#??.???#?. 3,4 +????.???##. 3,5 +#??.??#????? 2,2,1 +#?????#??.# 1,6,1 +????.??#????.??. 1,7,1 +##???????????. 6,1 +.??#?????.????#???? 5,1,1,3,1 +?????#??#??.?? 1,8 +???#..??.???.. 1,2 +???#?.#..????#?# 2,1,1,1,1 +????.?.??#??#?? 2,1,7 +.???#?##????#?? 2,1,4,1 +??#?????#?? 4,1 +.#????#?###?. 2,7 +..????#??? 3,1,1 +####???#..??. 6,1 +?#???#???##????#?#?. 2,1,10 +??#?#?#?.?????# 1,6,1,1,1 +?????.##?#?#?#?.??#? 1,2,9,1 +.?.????.?. 1,1,1 +?????????? 1,3,1 +#????#?????? 1,3,3 +#.?#..???? 1,1,1 +?#?????..????#.?? 1,2,4,1 +#?##??????.??. 1,2,3,2 +???#??#??. 5,1 +?##???.?.??#.?# 3,1,1,1,2 +?#?????????? 2,7 +??#?#???#?#?????? 2,5,1,1,1 +..#?..?.##?.? 2,2,1 +???????.???.#?##.?.? 1,4,3,4,1,1 +??##??###.# 7,1 +?###?#??.#.??..?? 4,3,1,1,2 +??????#??#?. 2,2,2 +?#?##??????..#?? 6,2,3 +?#?#???????..#.#?? 9,1,1,1,1 +#?#?#?#????.?? 1,5,2,1 +?????#??.?#? 5,1,1 +??##???.?#??#.??.? 5,5,1,1 +.?#?.?##?? 3,2 +.???????#??..?#?? 8,1 +?????.???# 4,1 +?#?....???..??#? 3,2,1,1 +???####?????.???#??? 1,5,1,1,1,1 +???.??????...#??? 1,5,3 +????#??.???????? 1,1,1,1,3 +?#.???.#### 1,3,4 +?.?#???#?#?#???.? 1,10,1 +???.??#.?.? 2,1 +??.??.??????.??.?? 1,1,3,1,1,1 +.#??.?#????.#?###? 3,4,1,1,3 +#?.???#?.?. 1,2,1 +???#???.?? 4,2 +????.#?#?#.?#####?# 3,1,3,6,1 +..??????##?#?????#?? 2,1,5,2,4 +#??.??#????#???#???? 1,15 +???????????.? 1,5,1 +?#??#???#?? 5,3 +.???##????.?????.#. 1,4,1,1,1,1 +?.?#?#??.?#?????? 6,2,2 +.????????????? 7,1 +...?.#???????#? 1,1,2,1 +?????.?#?? 2,1 +?#.??????? 2,2 +#????#???##? 1,6,2 +.?#?.?.???#?# 3,1,4 +?#??#.??.?#?? 1,1,3 +????#.?????#?##.?? 5,1,6,2 +???..???????.##?? 2,6,2 +..?#???.#?? 2,2 +???##?.??#????????. 4,2,2 +????#?????.?#??#. 1,5,2,1,2 +##.??..#?..?#???? 2,2,1,3,1 +??????#???#?#??? 5,7 +.?#??.#??#???.#.#? 4,1,1,1,1,1 +?.?????#?#?.?? 1,5 +?????????#?????#?# 10,2,1,1 +??????#??##????#??? 1,5,2,2,2,1 +.??#?#????.??### 1,1,1,1,4 +?????#?????#????? 4,2,2,1 +??.?.?#??????#.??? 1,2,3,1,1 +.??.?.???? 2,1,1 +.??#????????? 1,2,3 +???#?????#??#????#? 1,1,1,5,1,2 +?????##???#?? 3,4,1 +##?????????# 5,1,1,1 +???#??#??????.? 4,1,2 +????.??#?#?? 1,1,4 +#??????.#???. 1,4,4 +????##.??#???#?.??? 3,5 +????.?#??#.##???? 1,1,4,2,3 +#?#???#??????#. 1,6,2,1 +???.???##?#? 1,1,4 +?????#.???? 5,3 +?#??.????#?????# 1,1,5,3 +????#?.?#?.?.?. 1,1,2,1,1 +???.???#?#?#??? 1,9 +.?##??.??#???#???#? 3,3,6 +?????##??.?? 1,6 +#????????#####.? 2,1,7,1 +#?..??.??#?? 2,1,1,3 +?##?#???#???.#??? 5,3,1,1 +.?????????????????. 1,1,2,1,1,4 +?.???#??.?#?????? 4,5,1 +?.????#??#?? 1,1,1,1 +??????.#???# 3,1,3,1 +#?#??..???##?#?.? 4,6 +#??#?.????.?.? 5,1,1 +?.?????.??#?#?##??? 1,1,1,10 +???#?#.???##???.?.? 1,3,7,1,1 +#?#.?#??.??? 3,3,3 +.?#???#???.???# 7,3 +?#????#??. 3,3 +????####?#?.???? 2,5,1,2 +?#???#??...??.? 2,2,2 +?????????????#?###? 2,11 +??.???????###?# 1,4,4,1 +????#??.?.???.#???? 6,1,1,1,1,1 +??#?#???????? 6,1 +#??#?#????#???.? 9,4 +?.#?#?#????????#??.? 8,1,3 +.?.???#???????????? 1,7,1,2,2 +?#???###????.??#?# 1,5,2,5 +??#?????.??# 1,2,3,2 +?##????.??.?# 4,1,2,1 +#.?#?#???? 1,1,5 +????.##??.?#??????? 3,4,4,3 +?#.??????#??? 1,1,1,3 +?#?.#?..??.??? 1,2,1,3 +..???????? 3,3 +?#????????. 1,3,2 +.?#.???#.?? 2,2 +?.??????????.?? 3,3,1 +?#.??????..?#? 1,4,3 +????????.??.#??? 6,2,2,1 +?#???????.?????? 2,4,5 +???.?#???. 1,1,2 +??????#.?##??????#?# 1,5,3,6 +??#?????#??.???#??. 4,2,1,5 +.?#??.?.?. 2,1 +#??#?.#?.#??.???? 5,1,1,1,1 +???#????.#.? 2,1 +??????#???.#.?#??##? 3,1,5 +????#???????.# 9,1,1 +????????#?##?#..#?. 1,2,3,2,1,2 +??.?##?##.??????#? 2,2,2,4,2 +###??#???#??? 3,1,3,1 +.?.?.?#?.???#?# 1,1,3,1,1 +.?..?#?????.???#??#? 1,2,1,1,2,3 +?#.?????????#??#?#?? 2,1,14 +?##.#???#?????? 2,1,1,1,1 +???#.##???.? 3,5 +???????.???#?? 4,1,2 +??.#?????#??? 1,10 +?#???##???? 2,4,1 +?????.????? 3,3 +??#?#?#??#????#?#? 2,1,2,1,1,3 +#?????????#???????#? 1,3,11 +..???#???????.? 2,6 +??#???.?#??.? 1,2 +..?#.?##?#??.. 2,2,1,1 +??.????.?? 1,3,1 +?????#?????#.# 1,5,1,1 +..?#????#? 2,1 +???#????#???.? 1,6,1 +?.??#.???#. 2,1,1 +..???.??#??. 3,4 +???#??##?.???? 5,3,1 +.??##?#?.???#?#? 5,7 +#.?.???#???? 1,5,1 +?????#??.??? 1,3,1 +????????####??.##? 3,7,3 +???????##???? 1,8,1 +???..###??#??#???# 2,3,8 +??##????#? 5,1 +#??#?#?#?#.#?##.. 10,1,2 +##?#?#?????#??? 7,1,2,1 +??????????#?##????.? 2,11 +##????????.#.?#?# 2,6,1,4 +?#?#????#.?### 1,6,3 +#?#?#?#..??? 1,1,3,1 +???.#?#### 1,6 +????????#?.???# 2,4,3 +#?????###????.??#?? 12,3 +??#.#???#?????.#? 1,5,1,1,1 +??#?.???#?????#???? 3,1,5,1,1,1 +????#?.????.???? 2,2,2 +???#??????????.? 4,7 +?.??###???###?#???#? 11,1,1 +???????..?? 1,3,2 +???#?#?#??#???# 9,1,1 +????.????#? 2,4 +??#???.?.?.??.?##? 2,1,1,1,1,4 +?#.#..???#? 1,1,5 +??????????????#???#? 2,3,8 +????#?..#?.?##?#? 1,1,1,6 +?#.##???..??#?#????# 1,2,2,1,5,2 +????#?##?#.? 8,1 +..#?#????#? 3,1 +???.????.?????## 1,1,1,1,6 +#??.????????##??? 1,1,4,4,1 +#??#??????. 4,1 +??????.???#?????.. 1,1,7 +?#.?.????????##??? 1,1,2,2,2,1 +????.?##????? 1,1,8 +?###?.?#.?##?.# 3,1,2,1 +????????.??? 2,3,1 +?#?#...##?? 4,2 +??#?.#??#.. 1,1,1 +#?#.?????.??.. 3,1,2,1 +?..?#??.?#? 2,2 +#??????#??#?.#???### 4,5,3,3 +#??#???????????? 1,2,6,2 +?#?????..#?? 4,1,1,1 +?.#???#??? 2,2 +?#..?.??##???#.?? 1,5,1 +???.?.?...?##? 2,1,4 +#???.#???#??## 1,1,3,5 +.????.?..????.#?? 1,1 +??#??.????##?.?.? 1,1,1,4,1 +#???.????? 1,1,4 +????#.#???.#?? 4,4,2 +?#??.#??.##?????..# 1,1,3,2,3,1 +???????##???.???.? 2,6,1,1 +?.???#?.?.???#???? 4,2 +?.??.????. 1,2 +#???#???#??????##? 10,2,3 +?.??????##???#???? 1,4,10 +????#???????.##?##?# 1,2,1,1,7 +?????#????#?? 2,5,1 +???..?????#??#??.?#. 1,6,3,2 +???????#?? 1,3 +.??.???.????# 2,3,1,1 +????#.#?#####?? 4,8 +?#???????????.?. 6,1,1,1 +????.?#?##???#????? 2,11 +.?.#.??????#??????? 1,1,1,1,7,1 +????###.??.. 7,1 +???#?.???? 4,1 +????.?????#?. 1,6 +?##?.????? 3,1,1 +?#.?#?#?????.?? 2,7,1 +#?#????#?#..????#??# 1,1,5,7 +?.##?#????? 4,1 +.??#?.###??. 3,4 +#??##?????#??#??. 6,6 +.#?#?????#?..#? 4,4,1 +?.?.??.?#?###? 1,1,1,3 +????.?????? 1,4 +??????..?.?#?#? 1,1,1,1,4 +????##???????#.?.? 5,1,3,1,1 +???#??##??##???#???? 12,4 +?.??##??#???.?#?. 1,4,2,1,3 +???.???#???##???.?. 2,4,5,1,1 +?#??..???##???.?? 3,5 +?????#????#?.??#.? 1,1,3,3,1 +??.????#..??.#?#?#?? 2,7 +??##??.????#? 5,2,2 +?????????????. 1,1,5 +.????.##?# 4,2,1 +??.??.?.?? 1,1,1 +?#??.???.??.? 2,1,1,2 +?.?#?????.?????#? 6,1,1 +??##?????#???. 10,1 +.?#???????##..#? 1,4,3,1 +???#.???.??? 1,1,1,1 +?.?#.???..#? 1,2,2,1 +?.?#????#??????# 9,2 +????#?#?.?##??????? 1,3,2,5,2 +?.????##???#??? 1,7,1,1 +.?#?.??.##???#??#? 3,2,3,1,1 +.#??##????#???#. 6,1,1,2 +?????.?.???? 3,1,1 +??#??#####??#??.? 2,6,1,1,1 +?.?.?#????#?#..? 1,4,4,1 +??????..??????#??? 2,5,3 +.#?#?#?.??.?#.. 5,2,2 +###.??.??????##?# 3,1,9 +??.?.####?..? 1,5 +????.??.??##. 3,4 +#???#??#.???.##??? 1,4,2,4 +????.??????. 1,2,2 +???#???#??.? 1,3,3,1 +????#?#?#?.??? 5,1 +#??.??#??????. 1,8 +??????#??? 3,2 +???##????#?.#?# 1,4,3,1,1 +????..????.??#??## 3,1,1,7 +???????##???? 2,2,4,1 +???.??##?????#.??##. 1,4,1,1,1,2 +#.????????????..?? 1,8,1 +???..?##???#?? 2,3,3 +.?????#..###?. 1,1,4 +???.?.???????? 1,1,2,1 +????#?#????? 1,1,5 +???.?#?#??#?#? 1,2,1,5 +.?.???.??#?###??# 1,1,7,2 +.???#??.?#??#?? 4,3,2 +?#.#??#?..???? 1,1,1,3 +#???#????.#??????#. 1,4,1,5,1 +..????#??#? 2,1,1 +?#...??#??? 1,4 +.####?????# 6,1 +???#?#??????..#??? 4,3,3 +#.???????.????#?? 1,3,1,5 +???.???????. 1,7 +??#.??#???##??????? 1,10 +?????.???.??#??#??# 1,1,1,3,6,1 +?.?#???..?# 5,2 +??#????##???..?. 3,4,1,1 +##?????.###?.? 3,1,4,1 +?..#?#??.?????? 1,4,1,1,1 +??...#??.??.?. 3,1 +.????#?..?#?# 5,3 +???#?????????.????.? 11,1,2 +.??#???.?#?#????#??. 3,5,3 +??#??#.????. 5,2 +??????#?.???.?????? 1,2,3,2,1 +?##???##?..#??#?? 2,3,4,1 +.???#??#????#??????. 7,7 +???#?..??# 2,1,1 +.?#.???.?????? 2,2,3,1 +.#?..#????? 2,2,3 \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day12/test1.txt b/solutions/2023/pughmds/inputs/day12/test1.txt new file mode 100644 index 0000000..ab9396b --- /dev/null +++ b/solutions/2023/pughmds/inputs/day12/test1.txt @@ -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/solutions/2023/pughmds/inputs/day12/test2.txt b/solutions/2023/pughmds/inputs/day12/test2.txt new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/solutions/2023/pughmds/inputs/day12/test2.txt @@ -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/solutions/2023/pughmds/inputs/day13/input.txt b/solutions/2023/pughmds/inputs/day13/input.txt new file mode 100644 index 0000000..ce4845e --- /dev/null +++ b/solutions/2023/pughmds/inputs/day13/input.txt @@ -0,0 +1,1351 @@ +...##.# +.##.### +.##.### +...##.# +#...### +.#..##. +##.##.# +...#### +#.#.### +#....#. +..#.##. +..#.##. +#....#. +#.#.#.# +...#### + +###..##.######.## +..#..#.#......#.# +#.##.#..#.##.#..# +#.#.##.#..##..#.# +#..#...###..###.. +#..#...###..###.. +#.#.##.#..##..#.# +#.##.#..#.##.#..# +..#..#.#......#.# +###..##.######.## +...#.#..######..# +..###....#..#..#. +#.###....#..#.... +##.#####.#..#.### +...#.....####.... +..#...#.#.##.#.#. +...###.#......#.# + +##.##.##### +#.####.#..# +#.####.#..# +##.##.###.# +########... +.#....#.... +###..#####. + +..#.#.#...####. +..#.#...#....## +##.##.#..##.... +...#..#.....#.. +##......#.##.#. +..####.#.#.#... +..####.#.###... + +.#..#.##. +##..####. +.#..#..#. +..##....# +.#..#..#. +.#..#.### +........# +......#.# +##..##.## +##..##.#. +##..##... +##..##.## +......#.# +........# +.#..#.### + +....###...#..## +#..####..##..## +.###..###.#.### +...####...##### +#..#..#..##..## +#.##..##.#..... +#........#.##.. + +.#.#.#. +.#.#.#. +##.#.## +#.#.### +..##... +..#.... +###.### +..#..#. +#.####. +.##.### +.##.### +#.####. +..##.#. +###.### +..#.... + +#..#.###.##.# +....#...#..#. +....#..#.##.# +....##....... +.##.##.###### +####....#..#. +.##..##.#.... +.##.#.#..##.. +####.#...##.. +.##.#.#.#..#. +.....#.###### +.##.....#..#. +#..##.###..## + +#....#.#. +####.##.# +#.##..### +##..#.### +.#....#.# +...##..## +##..#.... +##..#.... +...##..## +.#....#.# +##..#.### +#.##..### +####.##.# +#....#.#. +.#...#... +.#...#... +#....#.## + +..##....#.#.##. +.####..#.##.##. +##..##..#.##### +##..##.#.#..... +#######..###### +.#....####..... +.......#.#.#### + +..#.....# +.###.#.## +##...##.. +#......#. +#.###..## +#.#.#..## +#......#. +#.##..##. +#.###.### +#.###.### +#.##..##. +#......#. +#.#.#..## +#.###..## +#......#. + +#####....#### +..##..##..##. +###..#..#..## +##..##..##..# +##..#....#..# +###...#....## +..###.##.###. +####.####.### +..##.####.##. +###.##..##.## +##...#..#...# + +#.###.###.# +#.###.###.# +...##.#..## +#..#.....#. +.....##...# +#..##.##... +...#.#..... +###.#...#.# +..#.#.##..# +#.#...#.... +#.#...#.... +..#.#.##..# +###.#...#.# +...#.#..... +#..##.#.... +.....##...# +#..#.....#. + +###.#..####.. +###.#..#.##.. +###.#..#.##.. +###.#..####.. +.#.#..#.#...# +.#....#..###. +#...##..##### + +..#.###.#.####. +.....###.###.## +..#..#.#.###### +##.#.....###### +###.#..##...... +##..#..##..##.. +..##.#.######## +..###..#..#..#. +...#####...##.. + +...##..## +.#....... +#####.#.. +##..#..## +#..#.##.. +##..#..## +.###..### +#.#..##.. +#.....#.. +.####..## +.##.#.### +.#....#.. +.#.#..#.. +.##.#.### +.####..## + +..####. +#..#.## +.###.#. +#.##..# +###...# +.#.#... +.#.#... +###...# +#.##..# +.###.#. +#..#### +..####. +..####. + +#...##.####..##.# +###.##.###.##.#.. +.#...#.#####..### +##...####.##.#..# +.##..#.#.#.#.#### +#....#.#####..#.. +#....#######..#.. +.##..#.#.#.#.#### +##...####.##.#..# +.#...#.#####..### +###.##.###.##.#.. +#...##.####..##.# +....##...##.#..## +#.##....#.#.###.. +#.##....#.#.###.. + +##..###.##. +.####.#..#. +.####.###.# +#.##.###### +##..####.#. +..###..#.## +..##...#..# +########... +.#..#.##..# +..........# +.#..#.#..## +.####..###. +......##.#. +......##.#. +.####..###. + +##.#.#..#.# +.#####..### +.##.#.##.#. +..##......# +.###.####.# +#####....## +..#.######. +##...####.. +#.######### +.##.#.##.#. +.##.#.##.#. +#.######### +##...####.. +..#.######. +##.##....## + +.##.#.###.#.... +..#...#####..## +#.##.##..##..## +..#..##........ +.##..##.#.#..#. +#.........#..#. +#.#.###..###### +...#...####..## +.#.#......####. +......####....# +#..####...####. +..##.##.###..## +...##.#####..## +....##..###..## +##.##...###..## +##.##...###..## +....##..###..## + +#.###.... +.###..### +#..#.#..# +##.#..... +##.##..## +.##.##.## +#..###... +.#...#.## +#.##.##.. +#.#..#.## +#...#.### +#...#.### +#.#..#.## +#.##.##.. +.#...#.## +#..###... +.##.##.## + +.##.#....#. +....######. +.##........ +####..##..# +#..######## +#####.##.## +#..#..##..# +#..#..##.## +#..#......# +.##..####.. +.##..####.. +#..#.####.# +.....#..#.. +......##... +####.####.# +.##........ +#..#......# + +.##.###.#######.. +.##.###.#######.. +.##.##....##..#.. +#.#.####.###.#### +..##.#.#.....###. +###.#..##.#.##..# +.##..#..#..#..#.# +...#.####..###.#. +...#.####..###.#. +.##..#..#..#..#.# +###.#..##...##..# + +######..##### +###..#..#..## +###..####..## +######..##### +####......### +##..######... +..#..#..#..#. +..#.######.#. +..#........#. +..##......##. +###........## + +.#..#.####. +#.##.#.##.# +..##...##.. +.####..##.# +.#..#...... +##..###..## +.####.####. + +#####.#..###. +#####.#..###. +#...##.#..#.. +.#....#.##.## +#..#.#.#...#. +.##..####.##. +.#...#.#.##.. +.#...#.#.###. +.##..####.##. + +##.##.##.## +########... +.######.#.. +#.####.##.. +#.####.#..# +#......#.## +.#.##.#..## +...##...#.. +..#..#..#.. + +.#........#.# +###.####.###. +...##..##.... +.....##.....# +#.##....##.## +#.##....##.## +.....##.....# +...##..##.... +###.####.###. +.#........#.# +..###..###..# +##.#.##.#.#.. +.#..#..#..#.# + +##.#...#. +#...#...# +..##..... +.###..... +#...#...# +##.#...#. +#..#.#.## +####.#### +####.#... +..#.#.### +..#.#.### + +#..#..#..#. +#######.#.# +#######.#.. +#..#..#..#. +####......# +....##.#..# +.......#.## + +.#.#####.##..##.. +#..####....#..... +#..##.#....#..... +.#.#####.##..##.. +..##.......##.#.# +##...#.#.#..#..#. +#.#.##..#...##.## +#########.##..### +#.####.#..#.#.... +#.#.#.#.####...#. +##.....###...#.## +..#...#.......### +...###.##.....### +#.##.##.###...#.. +#.##.##.###...#.. +...###.##.....### +..#...#.......### + +..###.#....#.###. +##.###.####.###.# +..#.####..####.#. +..##.#......#.##. +.....##.##.##.#.. +##...##....##...# +..#..##....##..#. +...##.##..##.##.. +####.#.#..#.#.### +#######.##.###### +###.#........#.## +.....###..###.... +##.#..######..#.# +..#####....#####. +....#.##..##.#... +...#..#.##.#..#.. +..#..########..#. + +.###.##.# +#.###.#.. +.#...#.## +##.#...## +###...#.. +#.##..### +...#..#.. +...#..#.. +#.##..### +###...#.. +##.#...## +.#...#.## +#.###.#.. + +#..#.## +.##..## +#..#... +####.## +#..#.## +#..#### +....### +.....## +.....## +....### +#..#.## +#..##.. +.##.##. +####.## +.##.### + +##....### +#.#.##... +#..##.#.# +.###..### +###.#..## +###.#..## +.###..#.# +#..##.#.# +#.#.##... +##....### +###...##. +####.#.#. +####.#.#. + +#..#....##....# +#####..####..## +..###..####..## +.###....##....# +....##########. +..###..####..## +#.............. +#.#............ +..##.##.##.##.# + +######.#.#.## +..####..#.#.# +..####..#.#.# +######.#.#.## +.#..#.##.#.## +#######.##.#. +.#...#.###### +#...##..###.. +......###.### +##..#......## +###..##...#.. +###..##...#.. +##..#......## +.....####.### +#...##..###.. + +..####### +#.#...... +..##.##.# +###...... +###.####. +##.##..## +####.##.# + +#.###.. +#.###.. +.#....# +##.#.## +##.#..# +#.#..#. +.#..#.# +.#..#.# +#.#..#. +##.#..# +##.#.## +.##...# +#.###.. + +#....##...### +.####.#....## +#######.##.## +..##..#...... +##..####.#### +#....#..#..## +#######...... +.####.##..... +#....###...## +#.##.#.#.##.. +#....##.#.### +##..##.#..### +#.##.#.#...## +#....##.#.... +.#..#...#.### +......##.#... +#....#.#.#.#. + +#######.#..#.## +.#..#....##.... +......#.#..#.#. +#.##.#.#.##.#.# +##..##.#.##.#.# +..##..###..###. +##..###.#..#.## +#.##.#........# +#....##.#..#.#. + +..#....## +..#....## +##...##.. +#####.... +..#.#...# +..#.#..## +...#...## +...##.#.. +####..#.. +.....#### +##.###.#. +..#.#.### +##.##.#.. +......##. +#.####..# + +#...##### +#....#### +#....#### +#...##..# +.#.##.... +......##. +..##.#..# + +#......######.. +#..##..#.##.#.. +...##...#..#... +#.#..#.##..#### +########.##.### +##....##....##. +##.##.###..###. +#.#..#.#....#.# +#......#....#.. + +.#..#..#### +.#.....#### +##..##..##. +..#.#.#..## +..####.##.# +.##.######. +.##.######. +..####.##.# +..#.#.#..## +##..##..##. +.#.....#### +.#..#..#### +...####..#. + +###.#...#......#. +#..####.##....##. +..######..####..# +#.#...#.#..##..#. +...#.#..#..##..#. +....###..##..#... +#.#.#.#..##..##.. +.#.##..#..####..# +.##.##...#....#.. +........##.##.##. +.#..####..#..#..# +.#..##.#.##..##.# +##.#..#..######.. +##.#..#..######.. +.#..##.#.##..##.# +.#..####..#..#..# +........##.##.##. + +...##.. +#.#..#. +#.#..#. +##.##.# +.###.## +.##..## +#.#..#. +...##.. +...##.. +#.#..#. +.##..## + +#.#..#... +##.####.# +...#...## +...#...## +##.####.# +#.#..#... +#..#..##. +##....### +##.#..### +....##... +##..##... +##......# +##....#.# + +..#..##...#..#... +..#....##....#... +#####..##..###### +####........##### +##.###.##.###.### +....#.#..#.#..... +#...#..##..#...## +#..##.#..#.##..## +.####......####.. +#..#..#..#..#..## +.#.#..#..#..#.#.. +.#.#..#..#..#.#.. +.#.###....###.#.. +#.###..##..###.## +#.#..#....#..#.## + +....##. +##..#.# +##..#.# +....#.. +.#.#... +.##..## +#...#.# +.###.#. +.###.#. +#...#.# +.##..## + +#.#...###..#. +..###...##..# +..###...##..# +#.#....##..#. +#...##.#####. +#...##.#####. +#.#....##..#. +..###...##..# +..###...##..# +#.#...###..#. +.#.#..#..##.# +...#..##.#.#. +##..##..###.# +.###..####.## +##..####.##.# +..#.#.#...#.. +#.##....##.#. + +###.#.##.#...#. +###.#.##.#...#. +.#.#.#.#..#.... +..##.##..#.##.# +#.#.###.#.###.# +.####.....#.#.. +#.#..###.###... +#.#..###.###... +.####.....#.#.. +#.#.###.#.###.# +..#####..#.##.# + +......#...#.##... +####..##.#.#..#.. +.......##.##..#.# +.......#.###...#. +......###.##.#.## +#..#.###.#.##..## +....###...#..##.# +..........#.###.# +####.###...#..#.# +#######.#..##...# +.....###...##.### +.....###.#####... +####..#.#.#.#.#.. +....####.#.##.... +####.##.###.#.... + +.##.#..#. +##....... +#.##.##.# +#.##.##.# +###...... +.##.#..#. +#........ + +###.#..#.## +###..###... +.#####.##.. +#.##..##### +.####..##.. +...##.#.### +#....#..#.. +.#..#.##.## +#.#.#..#... +#..##.#.#.. +#..#.###### +.#.##...### +##....##### +##.#.#.##.. +#.##.###... +...####.### +...#.##.### + +.#.##..#..### +##.#.####.... +#.#.#.#.#.#.. +#.#...##.##.. +#.#.#.#....## +.###.....##.. +.###.....##.. +#.#.#.#....## +#.#...##.##.. +#.#.#.#.#.#.. +.#.#.####.... + +.#.##.#.##. +.######.##. +#......#### +.#.##.#.##. +#..##..#### +##.##.##### +#.####.#..# +.######.##. +########..# +.#.##.#..#. +#......#..# +#.#..#.#..# +###..###### +#.#..#.#..# +##....##### + +#..##..#....... +###..###..####. +.#....#..#.##.# +.######...#..#. +.#.##.#.#.#..#. +...##......##.. +##.##.####....# +.#.##.#...####. +.#....#..#....# +..####.....##.. +#########..##.. +##....##..####. +..........#..#. +#..##..#.###### +.........##..#. +..#..#..####### +.######.####### + +..#.#.##. +..#.#.##. +#######.. +.##.#.#.# +....#..## +..####### +##...##.# +##...##.# +###.....# +#####..#. +####.##.# +##.....#. +..#.##..# +###..###. +..##.#.#. +...#...## +..#.#.#.. + +.....###. +####.###. +####...#. +####..##. +####.###. +.....###. +.##.#..#. +.....#..# +....###.# +####..##. +#..#.#.## +#..##...# +#..#..... +#..###..# +.##.##..# + +..#...#.####### +...####.#...##. +.####.#.#.##..# +...#.#.###..##. +..##.#.##..#..# +.....#.#..#.... +.#####..###.... +.....#####..... +#..##.#..#.#..# +#..##.#..#.#..# +..#..#####..... + +.#..#..####.# +.#..#...###.# +#....#.#..### +.####.#..###. +#.##.##...#.. +######..##.#. +#.##.##.....# +..##..#..##.# +.####.#.##.## +.#..#....##.. +#....##.###.# +#.##.#...##.. +.####.....#.# + +##..#.#.##..# +##.###.##.... +.##.#####.##. +#.####.##.... +.##.#....#..# +.####....#..# +#......#.#### +#......#.#### +.####....#..# +.##.#....#..# +#.####.##.... +.##.#####.##. +.#.###.##.... +##..#.#.##..# +..#.##.###### + +##.#..#.##.#### +#..####..#.#... +###########...# +##.#..#.###.### +####..####...## +##......###...# +..######.....#. +###.##.####.### +##..##..###.##. +####..#######.. +#.#....#.#...#. +.#..##..#.#..## +.#..##..#.#.### + +##.##......##.### +###.#.####.#.#### +#..##..##..##..## +##..########..### +..###..##..###... +..#.##.##.##.#... +.#....#..#....#.. +##.#.##..##.#.### +.#.....##.....#.. +##.###....###.### +#.#..##..##..#.## +#...##....#....## +###.##....##.#### +##.###....###.### +.#..#..##..#..#.. +.#.###....###.#.. +..#.##....##.#... + +#....###. +######.#. +#.#..#... +#....#.#. +#######.# +#....#.#. +..##...#. +.......#. +.#..#...# +#.##.###. +#.##.###. + +######. +##...#. +##..##. +..#.#.. +###.##. +.#.##.# +.#....# +.#....# +.#.##.# +###.##. +..#.#.. +##..##. +##...#. + +.#.#.#.#### +.#....#.... +....##....# +...##..#### +.#...#.#..# +..##..##..# +#######.... +#######.... +..##..##..# + +#####.#..#.###### +###.########.#### +.#.####..####.#.. +#.#...#..#...#.## +..#.#.#..#.#.#... +.##.#......#.##.. +.....##.###...... +.###.######.###.. +.##.#......#.##.. +#.####....####.## +.###..#..#..###.. +...#...##...#.... +#.#..........#.## + +#.##.######.# +..##...##...# +.####..##..## +..##...###..# +.#..#......#. +.####..##..## +######.##.### +#.##.#.##.#.# +.......##.... +......#..#... +#######..#### + +..#.#.##. +..#...### +#.#..#.## +...#.#### +...##.#.# +###....#. +####.#..# +.....#.## +..##..#.# +..##..#.# +.....#.## + +##.##...###...... +########...#..#.. +#....##.#.#.#.... +###.#.#.##...#..# +##...##..###.#..# +##.####...#...##. +#.#####..##..#..# +.#...####..#..##. +.#...####..#..##. +#.#####..##..#..# +##.####...#...##. +##...##..###.#..# +###.#.#.##...#..# + +####.#.#.#..#.. +.#.##.######.#. +.#.##.#.....### +.#.##.#.....### +.#.##.######.#. +####.#.#.#..#.. +.##.#.#.##.##.# +.##..###..#.##. +#.#######.#.##. +#.#######.#.##. +.##..###..#.##. +.##.#.#.##.##.# +####.#.#.#..#.. +.#.##.######.#. +.####.#.....### + +#..##..###..# +..#..#....#.# +#.####.##.#.. +#.#..#.####.# +...##.....#.# +###..###..... +##.##.######. +..####.....## +##.##.####### +.##..##.##..# +.######...... +.######...... +.##..##.##... + +.##..## +.###### +##.##.# +##.##.# +..#..#. +#.####. +#.####. +.#...## +...##.. +...##.. +#...... +...##.. +...##.. +#...... +...##.. + +......#.##.##.... +.####..##........ +.####..##........ +......#.##.##.... +##..####.#...#... +.####......###### +##..##..#.##..#.# +#.##.##..####.#.. +##..##.#.##.##.## +..##..#.###.#.##. +#....#####...#### +##..##.....##...# +..##...####.#...# +#.##.##.##..##### +#####.....##..#.. +......##.###.#### +#....####.####... + +#..##...##.#. +.###...#.#... +####...#.#... +#..##...##.#. +..#.......##. +###....#.#.## +...####..##.# +##...#.#.##.. +##...#.#.##.. + +.##..## +##..... +.##.... +..##... +###.... +.####.. +.#.##.. +.#.##.. +#####.. + +####..####....# +####...#.#.##.# +.#....######### +##..#..#.###### +..#..#.#....... +..#..#..##.##.# +..#..#..##....# +..#..#.#....... +##..#..#.###### + +#.#.##. +..#.##. +..#.##. +#.#.##. +#...##. +##..... +..##### +#.##.## +#.##... + +...#.####.### +#.#.##..##.## +.#.#..###.#.. +#######.#..## +#######.#..## +.#.#..###.#.. +#.#.##..##.## +...#.####.### +####.#..#.... +.#.##.######. +#.#####..#... + +....###...# +..###...##. +..###...##. +....###...# +####.###.#. +#...##..#.# +##...###... + +.#..#..#. +.######## +#.##.##.# +..#.####. +..#.####. +#.##.##.# +.######## +.#..#..#. +#..###### +..##...## +...#.##.# +##..#..#. +..####### + +.#.##...###...##. +.#.##...###...##. +..###.##.###.##.. +##..##.....###..# +#.##.......#.###. +###..###########. +#...##...##.#.##. +##....#...#..#..# +##....#...#..#..# +#...##...##.#.##. +###..###########. +#.##.......#.###. +##..##.....####.# +..###.##.###.##.. +.#.##...###...##. + +#.#..###.#..#.# +#.#..###....#.# +#.#.##.###.#..# +#######......#. +####.#.#.##...# +#.###....#.##.# +.#####...###... +##.#####.##.#.. +##...#..#...### +#..####.....#.# +####.#..##.#..# +####.#..##.#..# +#..####.....#.# + +#....#....#.. +#.##.#....#.# +.#..#..##..#. +#.##.#....#.# +##..##....##. +..##..#..#..# +.####......## +#.##.#....#.# +#.##.#..#.#.# +.#..#..##..#. +#.##.######.# +######.##.### +##..########. +.####......## +.#..#..##..#. + +.#.....###### +#..########## +#.###..##.... +...##..#..... +###.#..###..# +...####...... +..###.####### +...#...###### +.##...#.##### + +.#..#.####.#. +.###........# +.###........# +.#..#.####.#. +#.#....#..... +###.##....##. +#.#...#..#... + +......#..##.. +.#..#........ +#.####..#.... +#.##.####...# +#######.##.#. +.####.#..#### +.####.#..#### +#######.##.#. +#.##.####...# + +#.##... +#..#### +.##.##. +.###### +.#.#### +#...... +..##### +###.##. +.###### +.#..... +..##..# +.###..# +.###..# + +#..##...##... +####.#...#.## +....##..#..## +######.###... +..#..##..#### +####.#..#..#. +....#.#..#### +.##.#..###..# +.##...###.... +####.#.#.#.#. +####.#.#.#.#. +.##...###.... +.##.#..###..# +....#.#..#### +####.#..#..#. + +###..##.##..# +##.##.######. +######.##.#.. +##...#.#####. +##..###..#.## +..#....##.### +###.#.##.##.. +##.#..#...##. +##.#..#....#. + +.###.....#. +.#...#.#... +#..##.##..# +....###.### +###..#..#.# +####...##.. +#...##..#.# +#...##..#.# +####...##.. +###..#..#.# +....###.### +#...#.##..# +.#...#.#... +.###.....#. +.###.....#. + +##....##.#..... +#..##..#######. +#########.....# +.######.###..## +#......##....## +#......##....## +.######.####.## + +#..##.... +###.#.##. +...#.#..# +..#.#.... +...#..##. +..####### +#.#..#### +###..#..# +#..#..##. +##.#.#..# +.....#..# +##.##.##. +...#.#### +##..##..# +##..##..# +.#.#.#### +##.##.##. + +#####.#.##..#.. +#####.#.##..#.. +..##.##..#..#.. +#####......#..# +#..##.##.###.## +#.#....###...## +#.....###.##### +###.###..#..### +...#..##.#.###. +#...####...##.# +##.#.#..#.##### +##.#.#....##### +#...####...##.# +...#..##.#.###. +###.###..#..### +#.....###.##### +#.#....###...## + +#..#.##.#.####. +.#.#.#...##..## +.#.#.#...##..## +#..#.##.#.####. +###..##.#.#..#. +###.#..#.##...# +#...#.####....# + +##..####.## +.##.#..#.#. +..###.###.. +###.#.#.#.# +.##.#.#.#.# +..###.###.. +.##.#..#.#. +##..####.## +.###..##..# +.###..##..# +##..####.## +.##.#..#.#. +..###.###.. + +##.....#.#. +#...##...## +..#####.### +..#####.#.# +#...##...## +##...#..#.. +#...##..... +#.##.###... +#.##.###... +#...##..... +##...#..#.. +#...##...## +..#####.#.# +..#####.### +#...##...## \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day13/test1.txt b/solutions/2023/pughmds/inputs/day13/test1.txt new file mode 100644 index 0000000..f226414 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day13/test1.txt @@ -0,0 +1,15 @@ +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day13/test2.txt b/solutions/2023/pughmds/inputs/day13/test2.txt new file mode 100644 index 0000000..a24e182 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day13/test2.txt @@ -0,0 +1,13 @@ +##..####.## +.##.#..#.#. +..###.###.. +###.#.#.#.# +.##.#.#.#.# +..###.###.. +.##.#..#.#. +##..####.## +.###..##..# +.###..##..# +##..####.## +.##.#..#.#. +..###.###.. \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day13/test3.txt b/solutions/2023/pughmds/inputs/day13/test3.txt new file mode 100644 index 0000000..4f0ff14 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day13/test3.txt @@ -0,0 +1,13 @@ +.#..#..#. +.######## +#.##.##.# +..#.####. +..#.####. +#.##.##.# +.######## +.#..#..#. +#..###### +..##...## +...#.##.# +##..#..#. +..####### \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day13/test4.txt b/solutions/2023/pughmds/inputs/day13/test4.txt new file mode 100644 index 0000000..9b1a39f --- /dev/null +++ b/solutions/2023/pughmds/inputs/day13/test4.txt @@ -0,0 +1,17 @@ +###..##.######.## +..#..#.#......#.# +#.##.#..#.##.#..# +#.#.##.#..##..#.# +#..#...###..###.. +#..#...###..###.. +#.#.##.#..##..#.# +#.##.#..#.##.#..# +..#..#.#......#.# +###..##.######.## +...#.#..######..# +..###....#..#..#. +#.###....#..#.... +##.#####.#..#.### +...#.....####.... +..#...#.#.##.#.#. +...###.#......#.# \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day14/input.txt b/solutions/2023/pughmds/inputs/day14/input.txt new file mode 100644 index 0000000..1aa3fb3 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day14/input.txt @@ -0,0 +1,100 @@ +...OO..##.......O..O....O..O#...O.OO#.#..O...O....OOO##..O##O#...#..O....#........#O.##O#..OO#..OO.O +...#.#.#.O#...OO.#........O#.#............#...O...#...OOOO#...#..#..#.O...#..#....O.#O###..O#..OOO.O +..##..##.O...#..OO.O.#.#O#.O.OO..#.....#.....#O##O.#..###.O.........OOOO#...O.#.........##O..O.#O.O. +.....#.##O##.#.#O#....#.#O.....OO.#.#OO##OOOO..#O..#.#.#.O..........O.#......O...OO.........#.OO.... +.#.O#O...#...#...O#O....O.......O#.O..OOO...#.##OO.#.O..O.#.O...O..O.#.#.#...#..O...OO..OO.....O.#.O +....#..#...#.##................O..OO.....##.........#...#..........#.OOO...O#..##.##.......#O..O.##. +.............OO#...O.#....O....O...##...OOO....O.O..O...#......O..O#.O#.#..........#.#....#O...#O..O +O.....O.O...O...OO..#...#.OO........#..##O...O.O.#.#..#O..##O.##..O......#.....O......#....O.....OO. +.#..O....O.O..O.#..#.......#OOO...#.O..O..O#...OO.#...##O.O..O.OO...O....#O.O.....O#....O....O.#.... +...#....#OO...O....#.##.O#####..O...#...#...#..O..#.##.##OO...O#.........O..OO......#..OO.#...##O... +...OO...........O....O.##..#.O##.....O..#.......O#..#....#O.#...#.#.O..O#..#..O..O##..O...#..O##.O.. +.....#OO#.O......#.O..O..O.....#.#.OOOOO..#......O.OO.OO.....#...#O....OO.O.#....##O..O..O......#... +.O#O.#.#O.....O.#..O..#O..#O.O..O.......O....O.....#...#........#.#....O#..#......#O....OO#.....O.## +.O..###.....O..##O...O..O..O.#....#.......#..##......O#O.#OOO...OOO...O..O#..#.#...OOO#..........O.. +#..O#OO..#O.O..OOO...#.#...O..O.O.......#..#...#..O...O.O#.O....#...#..O.O....O.#.#...#.....OO...#.# +...O..#O............#.......#..##OO..##....#OO.OO..##..#OO.#.O..O.O........O........O.##...O.O.O...# +.O...O.....#....OO#.O#.###.O....#.O...O#....#....O....O..OO.O....O#OO#.#O#......OO..OOO...O.#.O..... +.O..O................OO##O..#....O..#.O..#.#............#.##.........#..O.O.O..O#...O.#OOO#..#.#...# +O..O.........O##...#......#..#O....#O#....O.O.O.O...#......O#O..#...O..##.#..O.O.#O.......OO...O#O## +OOOO.#O.O#.....#..#...#..O...#O....#.#.O.#..O.##.O....#.##.O.O....OO...O.......#..#......#...O###..O +..#.......#...O..O..OO.O#...OO.OO..O#.O....#OO....#.#O........##O.#.....###....OO#..O.O.O.......O#.# +#.O.......#OO#...#O#O#..OO.O.OOO#O#....OO..O#.O.#.O...##.#.O..#...O.O.....O..#.OO#.O...O.#....O.O..# +.OO#.OO###....O........#..O..##.O...OOO.#...O......O#....#.O#.O......O.......O.#..#O..O...#..#...#.. +....##O....O.##......##.O.##......#....OOOOO#......#.#.....#O...#...#..OO##.##.....##.O...O.O##.#..O +.#...O.#OO........O..OO...##O.O..O.....O..#OOO....#..#O#.#O......O.O.##.....O......O.O.#..#.#..OO... +O...O....#...O##.....#......O.O..O..O..#...O..OO#..O#.#.....#....O...##.#.#O.O........#.O#O#OO.#..#. +#..#...#OO...O#..#.#.#O#O..........O..O...O.O#O...OOO..O...O.O#.O##....O.......O..O..#...OO..OOO.... +.#.OOO#....O#.....#.OOO.........O.........O.......#O#O......O#O.O.#O#.#..O.....#.....#..O.##O.O#...# +...#....O.O##.O...O.O..OOOO##.............OO....O.O....O..O....#OO..O....OO.OO.O..#.#......O.O#..... +#....O...OO.#.....O...OO.#O.#O....#....##.O..#O..O.O...#...O#.#OOOOOO......#.O.##......##..###.O.O.. +.#.O..O.##O.#.........O.O.#O....#......O.#....O...#O.#.OO.OOO..#..O.O.##..#.....#..O.....O#..O#....O +#.OO.#...O...O##O.O.O......#....O..O.O.......O.....#...OOO....O.O#.#..O.O..OO#.OOO..O...#..O..O.OO.# +.#..#........##O.O.....OO.....O...OO#O..#..O.....O...O....O.#.#.......OO.....O..O.O..O....#.#O.....# +...O.O.OO.O##OO..O.OO.......#O#O#..O#...O.#O.....#.....#.OO.#..#....O..OO.O.....O....O..#.OO.......O +O#..........O.#..OO...#OOO.O..O.##..#O##O.O.#O#.OO.O.O#...O#...OOO#.O.OO.O.#O..#O.#.......##O..O...O +.#.O.....#..O#....O.###.....##...O.....................O....OO#..O#.#.#...O....##...O.#...O..#.O##.# +..O...#...O#.#.O.O.O...O.......OO#.#........O...##.O...#..##..OO.#..O.#.#.O..OO....O.O..#...#O.O#.#. +....OOO#.O#...#...O#.O.OOO...##.....O...OO...O..OOO.O.O.O..##.#O#.#O.O...#O..O..#.#..OOOO..O.#.O#... +.O............#....#..OO...#..OO.OO....O..O.OOO......O....O#OO....#............#.OO#.O##.O#O..OOO.#O +.O......O.#.#.#..O.......O.........#O.O...#O#...#.OO...#...#.O..O..O.O.#.O.O.....#.#......##.O.O...O +...O..O.........#O..O.O..O###O#..#..#OO#OO..#O.#.....##..OO...OOO#...#O.........OOO.OO.##..#O.O..O.O +.#.##.#.#OOO#.OO.O.O#OO#O....O..#...O.......O.#.....##...#O..O.O...#..##O......OO.OOO..O...#.#.O#O.. +.#.O##O#...#.O.#O..OO##....##O................#..#..#..#.O....#....#.#.#..#O..#...O.#O..#...O...OO.. +.....O.......O##......OO..#...O...#.O..O..O#.O..##..#.O..#....#.O.#O....O..OO.#OO.#..#...#.O...OO.O. +..#O.###...O..###O..#..#....OO...O.O....O.#O#.#O..O..O..#..#..#....#..O.OOO...O.#O.....O..O....O.OO. +.O#....O.##O..........O.#OO..O...O...#..##.OO...#.#..OO.O.....##O..OO...O...OOO..#.#....OO..#OO.O... +O....O.#O#O....OO.......O..O.O.....O...#.O..#.OO..OO.....#....O...OO.##...O.....#O..O...O##.O.#O...# +O...#..O....#.O.O..O#.....O..#.OO#O#OO##O##...O.O.....O...#...O...OOO...O#O...O.#OO.##..O..##O.O#... +.#O..#O#..#.#........O..O#.......#...O.....O....O...O#..#.#..#...#.....#...#.#.....OO...O.##O....... +O#........O#...O.O.##...O.OOO.........##..........#O#............O...O.#O.O#.#.#.#.O..#....#........ +.........#.#......##OOO....O.#O....OO..O....O.##....#......O.O........#O..#.O....##.........#.O.#... +#.#.O..O....OO#......#.O#....#O..OO..O.....O..#.#O#.O.##O....O......#O......OOO....#O.#OO....O.O..## +OO.O.##O.....O#....O.O#....O..###.O.O...O..#...O..#O....O..#OO...O...##.....O.#OO.....O...#O.O..#..O +.OOO#...O..#O..O......OOO..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.........OO...OOO..#.O.....O.... +.O...##...O#.........O..O.O....O...#..#.....O.#..O.#O..O.#.O....#..O..#....#.#.OOO...O#...#O#.#O..#. +#.#........O#.#.O.O.#.#.OOO.#.#.#O.#....#O.#.O..#..........#O..O#.##..O#O#.O.OOO..##..O....O.#.OO... +O..O..O.........#OO.#....#....O..O#O..O#....O..O.O.........O............OOOO..OO#.O#......O..#.#..#. +#..O.....#........O.....O....O#O##..O.O...##..#O.#.OO..#......#.#..O.......#....O..O.....#..O.....O. +..O.#.##...O..##O.....#..........O........#.#.#O..O.OO..OO.....O.....O..OO..OOO.#.#.O#.....#.#..O#.# +.................O...O.#.....#...O#....OO..#O...O....OO.OOO.##..##..O........#O#O..#....#.....#....# +..#.#..O....##.#O.....#.OOO.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#..O#....##.O#...O..O.....#.#..#O.#.....##O#.O#..O.O....#. +#..O..#..........#..O##O....#.#..O#...O..O.##.....OO..#...##O..####....O.......#........O.O....O.O.. +.#.OO#.O.O...#OO.O#.O.#.#....O..#...OO..O.....#O.....#..##...O..###OO..O....#..O#..#O...O..O..#O...# +#..#OO#..O#.....#O..O.O.O...#.O..OO.O.O#..#....#O..O.OO........##..O......O#...OO#...#.....OO..#.#.. +.#.##.O.O..O.....OOO..OOO..#..OO#...##.O.O.#..#..O.....O#...O.#...O.......O#.#.#O#...O..#...##...O.. +.#..O..#.O.##O..O#.O.O....#.##....#.OO#.....##..OO#.#O.#.#...O#....OOOOO...O#.....##......O......... +.....###......#O...OO..O#.O.....O.#O.....#O##.#.##..#..#O..OO##..O...OO..O####O....O...O..O.#.O#.#.. +.O#..O.O.O...#O..#..#....###..##...O.OOO.....O.#..O#.O.OO.O..O#...#.O...#.O#.O#.....#.OO..OO#..OO.O. +#....O#...#.......O........#....O##.O#......O........O#.O...OO...O#.#.O...OO..O............OO...OO.# +#.##...#O..OO...#.....#.O..O.O....O..O.....#O.OO.O...O.O.OO.##.O......#O.#.#O.#.O....O.OOO...O#O..O. +..#.#OOO.O...#..O.O#O.O...#.#..........#.O.##.O.##.O....###.#.#...#.O........#...#.O......O..#.OO... +OOO......##.....#....O......O.....#O#O...O......OOO.O.O....OO##O#.OOO#..O..O.#.#...O....#.O.O..O..## +.....O.#....#.##O.OOO.O.....O.#O..#O...#....OO.#..#.O..OO.O.##...O#...O.O##.O......O.#..O#O.OOO....O +#O..#...#..O...O.O.O...#..OOO..O.O..#...#.#..O.O#...O.......OO...O.##O...O#.....O.O....O..O.O.#.#O.. +..O...#...O#......O....OO...#.#..#.O...#...O.O...O.O.......O....O...O..#....O...O.....##..O.#...#.#. +.#....#O#OO...O....##.#.O.O...O#........##.O.#...OO...O#.....O.......O.O.O##....#..OOO..........#... +...#..O....O#......O...##O.#.O.O.OO.O.#......##.O..O......O..O.#..O....O.....#O##...#.#O.OO.#O#.###. +#...#...#O.....#...O###......O#O..O.O.....O....O....#O....O#..#.O..OO###....O...O#......O.#O#....O.. +#.....#OOO##.....O...#.O.##O..##.O......#OO.O..#.........O#.O.#.O....O#OO.O.OO..O##O#.......O.....O. +.#..#..#O.OOO.#...###.O...#..OO#.OOO#................O...O.O.........O.....#...#O.OO...O...#O.#..O.# +.O#O..#.#O....O..O.#.....O....#.O#O.O...#.OO..O.#........#...O...O.O....O#O......OOO.O.....O#.#O..O. +#.#.O#..O...#O..#....O.........O....##...#.#..#.O.#OO...O...O.#...#.....O#..O#.O#.O..OOO.O....O..O.. +O..O.......#O#O.O......O.O....O#OOO.....##O....#.##..#.OOOO....#..O....#...#.O...#O.....#O#O..O..#.. +..#...O.#.O#.O.O#.O....#.#....#.#...O.#O.##..O.#.....O...#...#....O.#..O#..#.#OOO#..OO.#.#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#....OO......#O.#.O......O.OO.#O....O#........#..#..O.O#.#O#O..#...# +...#..O....#OO.OO#.OO.#.....OOO.OO##OO#......O....O......#O#.#.O..O....O..O.O..#O...#......#........ +......#.....O#.O..#..O......O##.#.O........##.##...OOOO..#...#.O...#..OO.O.#.#.O.#...#.#OO#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#.#.OO..OOO..O..O.O.#..OO#...#. +....#.O..OO..O.##.O.#O..O.O.O..#..#.O.O....###O..#OO#....#.........O.###.O...O#.O...O#.#.O#O.O#OO.O. +O.#......O...OO.#.#.O..#.O............O#.O#O........#..O.#O#.#.#..O.OO..#.OO#.O.#.#O###..##..##..... +..O#O....O...#....................O#..#.O.#....O.#OOO...O.OOO.#..#..O##.O...O.....O.#.OO.....O..#..# +#.O....##O..##...#.#.OO...#.......#.#........#####.O.O......##.....#...........O#OO.O..#....O...O#.. +..........#.O.#.#.#OOO.O..O.O.O.#O...#..O#....O..O##.O..#O...OO#O..OOO..OO#O#.O.....O..O##.O...#.... +O###...O#.O......##O#..O#.........OO...O#O#O..#O#O..#O#O.#..#OO.#...##..##..#.#...#O.O....O...O....# +.#.....O#OO.O#.#.OOO#.#.#.#...O.#..##.##...O.OO.O.....O..##..O.......O..#...O....##OO#..O#.OOO.#.##. \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day14/test1.txt b/solutions/2023/pughmds/inputs/day14/test1.txt new file mode 100644 index 0000000..b92d1a3 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day14/test1.txt @@ -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 diff --git a/solutions/2023/pughmds/inputs/day14/test2.txt b/solutions/2023/pughmds/inputs/day14/test2.txt new file mode 100644 index 0000000..93b225c --- /dev/null +++ b/solutions/2023/pughmds/inputs/day14/test2.txt @@ -0,0 +1,3 @@ +...OO..##.......O..O....O..O +...#.#.#.O#...OO.#........O# +..##..##.O...#..OO.O.#.#O#.O diff --git a/solutions/2023/pughmds/inputs/day14/test3.txt b/solutions/2023/pughmds/inputs/day14/test3.txt new file mode 100644 index 0000000..790c8f3 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day14/test3.txt @@ -0,0 +1,50 @@ +.#. +.#. +..# +... +.#. +... +... +O.. +.#. +... +... +... +.O# +.O. +#.. +... +.O. +.O. +O.. +OOO +..# +#.O +.OO +... +.#. +O.. +#.. +.#. +... +#.. +.#. +#.O +.#. +... +O#. +.#. +..O +... +.O. +.O. +... +.#. +.#. +... +..# +.O# +O.. +O.. +.#O +O#. \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day14/test4.txt b/solutions/2023/pughmds/inputs/day14/test4.txt new file mode 100644 index 0000000..f94a330 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day14/test4.txt @@ -0,0 +1,6 @@ +......O.. +.#######. +.#O...O#. +.#..OO.#. +.#.....#. +.O...O... diff --git a/solutions/2023/pughmds/inputs/day14/test5.txt b/solutions/2023/pughmds/inputs/day14/test5.txt new file mode 100644 index 0000000..2b8f76d --- /dev/null +++ b/solutions/2023/pughmds/inputs/day14/test5.txt @@ -0,0 +1,3 @@ +...... +...#.. +..O.## \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day15/input.txt b/solutions/2023/pughmds/inputs/day15/input.txt new file mode 100644 index 0000000..291d481 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day15/input.txt @@ -0,0 +1 @@ +qkm-,qtn-,msc=8,mfhk-,hk=6,tgp=9,grnfm-,gp=5,mm-,rxh=5,fql=3,krzb-,xcs=5,zm=4,gdqg-,sqdr-,bh-,cn-,dvh=5,tgp-,tf-,djg=3,xjkddf=4,jv=1,jlb=3,fsn=2,ktd-,ztn=2,rkxr=7,xfnccr=5,gsd-,lnb=6,djg=7,kz-,rxh=4,xgv-,mcj-,pln=8,td-,lvf-,grnz-,vxtbtr=1,llxv-,cj-,gj-,lmkh-,xcknz-,fq-,xzfrs=2,fzg-,fhx-,vzxxv=8,pz=3,kq-,zjbgh=3,tgp=5,fhx-,jxjtk=6,nck-,fqpqx-,hdvrn=6,fjqj=7,ztr-,vvz=3,cfnj-,jl-,gcbx=1,hxphc-,tnt-,bh=3,bpg-,gpkk=2,mxz-,pz=6,zs-,tq-,fjd-,dgkp=6,zvbn=3,hpg-,nzgqhh=7,df=2,ffnzq-,qjhs=5,mj=9,gsd-,hv-,ztx=7,rcp-,mcj-,knf=7,fbrrk-,ss-,lzsk-,ftcs-,fqzf=9,rdm=8,qjhs=1,vmp-,npb-,xgv=6,gdszll-,qrgx-,pzt=8,hbxq-,shm-,lbqfgn-,vmp-,bm-,jrbd-,tf-,psrt=9,hcgz=8,rjtg=7,tjpn=5,nntz-,tt-,bl-,gpn-,szs=2,jcj=3,mlj-,pm=1,jqb-,jmfc=9,jlh-,gj=4,svk-,hn=4,stx-,kkr=5,hdvrn=8,nzg-,mj=5,nmm-,psrt-,mvf-,gdqg-,kq-,sph=1,mlb=6,nl-,ldv=9,qnvr=2,ld-,dn-,pkgb-,fj-,mf=2,mxz-,ftxnm-,lgk-,lzcvmq=2,nnj-,shm=4,tgzfd-,qxl-,mxz-,vmp-,kph=7,snr=8,dj-,bpt=5,sgzn=8,kzcrx-,dgb-,pln=2,jxz=8,ldv=8,pm=9,gvk=7,phqp=1,xfc-,fql-,df=7,cndm-,qxl=3,jdp-,xjl=9,qbbb-,xcknz-,lgk=4,dpl-,zvbn-,tvzdr-,rf=6,jxz-,qnvr-,nn=4,dgkp-,pp-,sn=8,fqpqx=6,nrlr-,cmdv=2,vvz-,zjbgh=9,ng=6,nzgqhh=2,kl-,srm=8,jff-,ms=4,mtzvc=3,bfg-,mxz-,cnpzj=6,zmql=5,dfc=8,xjk-,vb=4,gb-,nthdl=9,kpn=7,vqt=3,mtzvc-,fbrrk=8,hbfp-,bqf=4,vf=1,gvz=4,gd=4,kgj-,hpr=6,cx-,hv-,pkgb=1,nntz=7,lh-,tjkfxg=8,jcj=6,jnd-,ds-,cnmr=2,shqtb-,bm=7,kbt=8,rkqqlz-,rlsd=2,xg=9,qlbr-,xkb-,dmpm-,hhm-,hmxgqd-,fnf-,cxph-,ck-,fhmjh-,nzgqhh=2,gvz-,cnpzj-,vqt=7,vqp-,qbbb=3,fnrjl-,fzg=1,gth=2,fn=6,cvk=1,lzcvmq=1,kz-,vgnn=4,nf=8,cxph-,hxphc=8,npb-,dgq=2,kjv-,nl=1,xjk-,dfx-,kgj-,cgppx=1,bnc-,fnrjl=5,kcgn=6,mdxkng-,jmfc=8,jpzs=9,zp=3,kfcrmh=3,dgm=8,npnvn=6,tgzfd=7,cndm-,chs-,mvf=4,jq-,ccvbl-,hrq=9,mhm=7,sg-,dp=4,fbkd=8,rtfh=2,ktdg-,fcszl-,zdrx=7,zdz=1,npnvn-,tpclf-,kzcrx=1,mp=2,qrgx=4,mn-,gb=5,dv=2,dg-,qgzq-,nl-,xssjj-,kc=2,jhn-,tdkcl-,krzb=3,zvbn=8,hgvbj=3,dv-,tdkcl-,jtmj=9,mn=3,fbkd-,pqhx-,fqpqx=5,jc-,xhd=2,gvk=5,hr-,bpg-,xzfrs=3,qjrk=9,rdm=5,kfzf-,jp=3,hrsx=1,dfmj-,zr=9,pvc=3,ztn=2,kl=5,mhm-,fjqj=3,gp=7,zst-,fjqj=4,rzx=8,ss-,rc=3,zrgctc=3,nt=2,bjt=8,zkx-,chph-,bqf-,rjk=3,rvz-,dgm=6,qhd-,qhd-,zkx=3,tvzdr=9,fjqj-,bbs=6,fj-,shm-,qhd=6,ss=9,qb=3,zr=6,lxj-,kzhq-,nlmh-,dx=3,nz-,zp-,lq-,brj-,hgvbj=5,pkgb=7,svk=6,jqbbht-,dmpm=6,zdrp=1,ktd=8,lnb=6,qgzq-,cz=7,sp=6,mggbm=9,pktd=4,mp-,nmm=1,pz-,bkt-,cgppx=3,bh-,rf-,zrgctc=1,dx=3,kjv-,dp-,brj=4,dl-,pqz=2,bpg=9,lzsk-,lnz=8,vb=5,df=9,bc=7,xd-,qlbr-,prj=5,ztx-,sjkg-,zh-,mgclg-,jqbbht=1,jx=2,pxc-,tdkcl=8,dxb=6,hb=2,pkgb-,jmp=9,fgd=8,mmz-,jlh-,ck=3,pxc-,xmhxk-,lh-,xcknz=4,pzs=4,mbtcm-,jtmj-,jn=3,jn=6,jfsn-,fmf-,npb-,hrq-,ndfr=3,lm=2,chph=6,dfx=9,sptllc-,cxph-,nq=1,svk-,jpzs-,qhd=9,rzx=3,rc-,pxc=6,tvzdr-,jpzs=1,hdb-,tnm=1,rlsd-,ktdg-,vxtbtr=3,bkt=8,nr-,dk-,cp-,jv-,pjbt=1,kjv=8,tkt-,cdvqnr-,xjl=9,lgk=7,vzxxv=3,dn=4,zdrp=9,dh-,jpn=1,dk=3,sn-,qt-,jpn-,gd-,lnz-,vjt-,xhd=4,lq-,svk=6,fvf=3,bmxnh=9,bkt=9,dch-,vm-,dxsch=3,jtd-,cnpzj=3,ktdg=1,mdxkng=2,jlb-,mv=2,dfc-,xcs-,sp=2,vc=5,ndfr=9,lzsk=5,kq-,svkh=1,cfnj=2,bl-,qbbb-,cfm=6,rzx=8,lkmqbg=5,jcd=1,nzg-,xdh=1,sjkg-,tf=2,vx=8,stx=8,zn=4,zs=1,dfc=6,sp-,gsd=6,jd=7,zkcfgm-,lkmqbg-,qzpdbt=3,bh-,fbrrk=5,kfzf-,vx-,ld-,pjbt=1,mcj-,jfsn-,qz-,vlqj=1,zjbgh=5,mbtcm=7,qf-,tjkfxg-,mkxx=6,fqzf-,jpn-,gt=9,tv=5,ccvbl=9,kl=8,vjp-,dkjc-,dgq-,jfsn-,zdrx=8,djg-,jhb=5,dj-,mgclg-,mtsr-,sgzn-,kdj=6,ftcs-,nl-,nrlr=7,mt-,svk=9,fjqj-,qrgx-,kdgb-,vjp=6,lh-,mgclg=7,xvn-,jz-,hbxq=8,lgn-,kdm=7,tv=1,nn-,cdvqnr=1,gcbx=5,zp-,dn=3,srqc-,tf=7,gcbcp=4,gth=8,zrgctc-,prj-,fjd=9,jn=1,vm-,ldl=9,lzcvmq=4,cpv=4,ndh-,pvc=5,cxph=1,grnz-,bl=8,rzx-,rqx-,xz-,pzs=9,nzg-,qz-,xkb=4,bkd-,xzfrs-,rc-,ftcs=7,tfpj=2,jslrh=9,svq=5,svq=8,bt-,sph=7,cfnj-,zfgsk=9,mv=2,lh-,zvbn=6,mfhk-,cfm-,dfx-,mvf-,fqpqx=2,cdvqnr=6,gxn=3,gsd=1,pqhx-,lc=3,tq-,xxpn=4,nkv-,nf=8,bq=9,kgj=5,hjbdrs=9,llxv=2,fsn=1,xcs=1,rf-,srqc=3,lcpg-,dz=9,chph-,rrt-,bqf-,nmm-,tnt-,mn=1,hnr-,zdz=8,hdb-,mtrlfr-,tk-,npnvn-,kbc-,fnf=9,vqp-,dkxzp=5,kgl-,xgv=6,qbp=1,gb-,xkvrx-,fqzf-,mtsr=5,zdz=7,tkt-,zf=1,jq-,jk=1,fvv=5,gvk-,mtsr-,gb-,kcgn-,lgz=3,sq=2,tvzdr=6,zf=4,jqbbht-,fmf=5,jn-,dch-,zrjn-,ktd-,vqp=6,cpv=7,ftcs-,pzs=5,tnt-,tptsg-,bfg-,lcpg-,ccvbl-,pz-,tt=8,cz-,zf-,zf=3,zs-,jlb-,dzdn=3,rjk-,gj-,jqb=3,vvz-,lkmqbg-,qnvr-,fjqj=4,xg=6,nmm=3,bvg=8,vvq=2,pqz-,sg=8,svk=2,jg=1,zxt-,zf-,vqpf-,jk=7,qnvr-,krzb-,vmp-,zvbn-,cgppx-,zp=8,jdp-,nnj-,vbps=6,cn=9,jmp=2,qbbb-,nntz-,vg-,pl=4,kbc-,zdz=2,sjb-,jmp=2,xsf-,srt=7,jcj-,vqpf-,lzcvmq=6,hrq-,mvf=4,hrq-,pz=2,vqp=1,lgx=3,mgclg=6,xmhxk=9,jrbd-,xd=3,fqzf=5,hxphc-,cvk-,kbt=9,tdkcl-,qbp-,gsd=6,dn=2,gvk=4,mgg-,vjt=4,hqg=6,vlc-,vvz=6,hqg-,hzc-,mr=6,hdb-,gb=5,fvv-,cnpzj=2,dj-,gvz=1,dd=5,fdhtxv=1,dn=1,hpg=7,svkh=2,kdj-,jqb-,rvz-,rxh-,kq=2,kgj=5,bl-,jd-,cx-,lbqfgn=6,zkcfgm=1,jh-,kph=2,hnmv-,qbbb=8,fdz=7,hqg=8,pghc-,jf-,dp=9,hdzr-,pl-,jp-,mt-,fnrjl=9,mdxkng-,ds-,kcgn=5,hqg-,sk=7,qz-,mtzvc-,rxh-,tkt-,hzc-,zfgsk-,sptllc-,nntz-,lh=7,fgd=3,vxtbtr=4,dg-,bk-,tgp=2,xmhxk-,mmcf=1,grnz=4,rkxr-,shqtb=7,lkh-,hnr=8,jt=8,tvzdr-,qz-,ckx=8,jhb=2,mzx-,ccvbl-,fsn=5,gxn=5,phqp-,kggkk=3,lq-,rvz-,fsn-,vvq=2,hlls=2,vqt=1,vmp-,vjp-,lmkh=6,snr-,dgb=1,vjt=9,nt=9,fgd=6,grnz-,zh-,hdb-,ndh=3,pzs=1,ttmj=2,zp-,rvz=3,jf-,jlh=5,kc=8,cx-,fcszl=2,vb-,kkr-,jtmj-,mtsr=7,lc-,kdgb=8,nz=8,hsl=7,lxj=3,dc=7,nntz-,ld=8,zjbgh=8,dzdn=4,vxtbtr-,jpzs-,hpbm-,qzpdbt=5,ktdg-,cd=2,fq-,qqvps=3,rj-,nzgqhh-,gzt-,gt=2,hk=4,xzq=6,mdxkng=4,hrsx=2,knf-,mbtcm-,dkxzp-,qsbgs=6,pj-,jxft=3,xd-,srt-,rxh=2,bq-,qtn-,tst=6,vxtbtr=2,jh=1,cxph=7,rdm-,stx=1,ttmj-,lgx=6,zn=3,rzx=6,ztr-,hv=4,zn-,npb-,qt=6,vjt-,ck=2,fdz=6,kfcrmh-,xsf-,lgz=7,lgk=2,zvp=1,qt-,dk=7,tjkfxg=3,sp=8,hn=2,nnj-,mn=7,dbd-,mp-,ztn=1,vb=1,rvz=3,bqf=8,sjgnj=2,qt=6,mggbm=1,nz-,vqp=1,tgp=5,jq=4,zr-,pqhx=5,ffg-,xdh-,ktdg=4,dfx-,pl=6,chph-,kdh=4,xkb-,lkmqbg-,qdv-,kgzj-,kfzf-,dxb-,kc-,cf-,zp=5,lq-,rvz-,dfx=9,bjt=9,mm=5,mt-,rj-,llx-,kzcrx-,fcszl-,zst-,rht=6,mq-,xjl-,dvh=4,zp-,jrbd=6,rj=3,rm=9,svk-,pl=3,qz=7,tjpn-,gth-,ng-,zb-,dfx=9,ftxnm=1,xzfrs-,kbt-,lcpg-,dgq=1,ndfr-,jrbd-,mhm=9,qs-,xcs-,vx-,pc=9,hhm=8,kk=8,psrt-,cps=4,zrgctc-,xz=6,vx-,tpclf-,lgz=8,rhz-,nmm-,tnm=8,zrgctc-,gt-,lm=3,cpv=5,ng=8,chs=6,dd-,hnmv-,cfn-,stx=4,vqp-,kgl-,ffnzq=1,svk-,kbg=9,qtn=4,tng-,kzhq-,dh-,ftcs=3,phqp=4,rqx=8,mtsr=5,qjrk-,sjf=7,qjhs-,vvq-,vvq=5,ftvjzf=6,ds=1,tdpr=5,hqg-,gcbcp=5,mmz-,dp=2,bq=8,dd-,vjt-,nr-,kr=7,pjbt-,ndfr=1,qkm-,vg=7,rdm=5,fql=1,hk=2,jt-,kfcrmh-,npb-,qnvr-,xlghf-,psf-,fsn=2,zrgctc-,zjbgh-,qhd-,rm-,nkv-,zvbn-,fvf-,dz=7,fcszl=8,qxl=5,kjv=7,dn=2,qbbb=4,dgq=6,tk=9,zkx=9,pc-,qs=8,fbrrk-,jqq-,ffnzq-,dj-,nt=3,pc-,kbt-,fnrjl-,xjk=1,mggbm-,hbxq-,kdm=2,vjp=3,hv-,rcp=6,srqc-,kgzj-,chph=5,dzdn-,xsf=2,ffg-,hgvbj-,ljf=7,xvn=6,vqp=8,xcs=4,tvzdr=4,lc-,tv-,qsbgs=6,dkxzp=8,hnmv=6,lbqfgn-,mp-,kzcrx-,xxpn-,fsn=1,ftcs-,mggbm=2,nq-,ftcs=1,hjbdrs-,hqg=1,ctx=4,vmp-,bvg=1,bq-,gd-,kdj-,lm-,ld=5,jxft=9,sjgnj-,gpn-,rks-,hgvbj=6,qs-,qbbb=1,dgq=7,nmm-,rxh=2,bjqbx=3,nz=3,xjkddf=7,fjqj=5,dpl=9,kbt=5,fbkd=9,kz=6,fjd=6,fvf=7,mvf=9,dkxzp=1,hpbm=2,qbbb-,dv=5,lnb=2,pghc=8,dz=7,pjbt=2,ztn-,rc=8,vbps=9,hv=2,fqpqx=5,jn-,jn=5,ztr-,jhn-,qrgx=4,cnpzj-,rkxr=8,zdrx-,gp-,bbs-,fbrrk=8,lnb-,dp=8,mcj-,mr=6,xfsd=6,ndfr-,pghc=4,hb-,ccvbl=5,qs-,qb=2,zf=9,rvz=4,cdrk=8,dn-,cps-,lh-,rc-,hk=8,qbx=2,dfmj-,jrbd-,lq=8,kkr-,fm-,mgg=8,lfk-,qlbr-,nck=2,kgzj-,zr=7,zr=5,knf=4,gvk-,rtfh=1,hnmv-,zrgctc=2,chs-,zmql=8,dpl=8,tnt=5,rhz-,lkh=4,qtn-,hpr-,dk=9,jg=6,dx=5,kgl-,xfsd-,cv=5,hhm=4,nntz-,kc=2,mhm=2,kk-,cgppx=5,dh-,rf-,kzcrx-,krzb-,rlsd-,jnd-,tdpr-,vqpf-,xfsd-,mgg=5,tq-,jxft-,xjkddf=5,kpn=1,ztn-,bjt-,rtfh=2,xvn=9,qbbb-,pc=9,dn-,lq=6,zdrp=7,jrbd=2,hv=1,ms-,hnmv=4,hcgz=7,kdm=1,pvc=8,lgk=8,svk=4,cfn-,tvzdr-,mr-,zrgctc=5,vb=7,nz-,sjkg=8,ljf-,rqx-,lvf=5,pk-,ttmj=4,hsl-,hzc=3,tf=3,hzc=9,msc-,gt-,rf=4,jfsn=4,lgx=2,msc-,djg-,ldv=3,sjgnj=4,qtn=4,bjqbx=3,dk=9,nt=7,kgl-,xvpqh=4,dgb=7,vlc=7,nkv=9,pc=6,lgz=9,fx-,xssjj=9,sn-,chph=4,zf-,fsn=9,kkr-,cf=7,kbc=3,gdszll=8,kfzf-,jpn=1,dv-,pg-,jpzs-,vvz-,nzgqhh-,mgg-,vvq-,srt-,fx=4,zjbgh-,xlghf=5,fql=8,cmdv=3,mmcf=7,cps-,jhb=1,hrq=2,brj-,hlls=3,prj=5,jq=9,fm-,kh=5,lbqfgn=2,npb-,kfr=2,npb=7,qkm=7,jdp-,mt-,djg=6,fdhtxv=4,vx-,tf-,mmcf=2,mtzvc=7,zmql-,jqbbht=7,xkb-,ttmj=1,gzt=2,ktdg=7,bpt-,kzhq=5,zs=2,nntz-,qbp-,qrgx-,kfr-,lgk-,nf=2,srm=6,tc-,kgj=7,kc=5,bx-,pghc-,nck-,hhfxj-,pm-,fq-,dp=7,fvv-,ndfr-,hlls-,jtd-,dk-,mhm-,dgkp-,gvz=5,hpbm-,mgg=2,rqx=4,rdm-,sph=4,bbsd-,fvv-,qqvps=9,pk=5,gp-,mlj-,lm=3,jxft-,lc=3,dbd=9,jtd=9,qs-,dg-,bx=8,qt-,lmkh=8,ttmj=5,jf-,qlbr-,cf=8,hbfp-,rtfh=8,djg=4,llxv=1,shm-,gxn-,ds=8,vb=3,jqb=3,ttmj=6,stx=2,hrq=8,tpclf-,phqp-,ftxnm=3,vc=1,sk=2,psrt-,tng=8,nnj-,mgg=6,gb-,kjv-,cj-,lfk=1,lgz-,qnvr-,ccvbl=8,shqtb-,gp=4,pqz=5,mtzvc=9,fhmjh=1,fhx=6,pl-,chph=5,df-,qs=8,bkd=3,bc-,zmql-,mp=7,fdz-,hdzr-,mcj=9,xjk-,qxl=8,zvbn=5,gdqg-,hhfxj=9,cj=3,rkxr-,xjl=5,dfc-,tjkfxg=5,ffh-,mlj=1,mv-,vqpf=8,cps=4,ccvbl-,hrq=2,pvg=5,nck=4,cndm=4,jqq=3,pln-,cf=8,bjt=9,fhmjh-,vq=8,pl-,zst=9,qbp=7,cv-,mcj-,mp=7,zn=9,npnvn=8,ftxnm=4,hk-,fhmjh-,jlb=1,mbtcm=3,bh-,mv-,rkqqlz=2,sjf-,jhn-,hb=6,npnvn=5,qsbgs=9,xmhxk=7,cz=6,mhm=5,gpkk=6,jjt-,nzg-,srm-,bvg=1,kr=5,kph-,vzxxv=2,kq=3,mlb-,sn=4,grnfm=7,dkjc=6,bm=9,jcd=4,fsn=4,cnpzj-,kjbn=2,kgzj-,jjt=9,jf=6,ldv=3,fvv-,kgj=5,df-,zkcfgm-,kfcrmh-,prj=9,sp-,xg-,qjhs=2,bpg-,xdh-,gvz=9,lkh=4,bbsd-,sjf=2,cnmr=5,phqp-,kph=7,kfzf=7,fjqj=2,psrt=4,mxz=7,kdh=1,qkm=8,mmz=6,tdpr=6,lfx=1,fvv-,qjrk=3,zvp=4,jhb=8,kc-,tq-,kgj-,dfc-,kk-,bbsd=6,nzg=7,jqq-,nzgqhh=1,dgq-,bh-,lgk-,lvf=6,zfgsk=8,xxpn-,rxh=4,jpzs=1,gth=4,dz=9,dg-,hpbm=9,pzt-,jfsn=5,qb-,hrsx-,fql=2,mmcf-,ckx=2,fbrrk=7,bjqbx-,pktd=4,xcknz-,gxn=3,qjrk=3,hr=2,jdp-,mcj-,hdzr=6,hbfp=8,cfn=3,brj-,kk-,pghc=1,qn-,dn-,dxsch=8,sqdr=2,lbqfgn-,cdvqnr-,sdvhbf=9,gq=9,dk-,zt=4,bm-,mp-,sptllc=1,nthdl=9,hzc-,cp-,ng-,dxb=8,lfk=3,zgnd-,dz=7,jz-,gvk-,dkxzp=3,zc-,pxc=8,kdm-,nrlr=5,rkqqlz=4,ldl-,gb=2,ftcs=8,jv=4,mlb-,mkxx=3,sjgnj=2,tt-,sgzn-,rvz=6,kk=2,td=4,tst=6,zgnd-,dbd=5,mt=8,vqp-,ldl-,ftcs=1,kph-,vc=1,rc=2,kzhq=6,jlh=4,zc=4,stx-,dl=2,cpm=7,jfj=7,mq=9,jxjtk=2,dmpm-,fhx=2,jxjtk-,cfnj-,svq-,hdvrn-,pxc-,rxh=1,qbx-,qs=8,jk=5,hv=7,bnc=8,bfg=2,cnpzj-,dk-,hjbdrs-,vf=2,jlh=3,szs-,mgg=8,djg=7,qtn=4,brj-,dch=6,jg=7,jxjtk=4,jtmj-,cdvqnr=1,gdqg-,vbps-,kfr-,dkxzp=8,zxt=3,nl-,mkxx=7,jg-,kr-,ktd=7,lxj-,gvz-,qdv-,sgzn=7,dd-,fmf-,gsd-,zrjn-,rht=4,lgk-,nlmh=6,lvf=4,bmxnh-,mxz=2,kfzf=6,zvbn-,hpbm-,ktd=5,kh-,qjrk=4,qg=1,hcgz=3,jjt=3,dgm-,zfgsk-,kc-,dmpm=4,bk=7,tv-,zb-,fhmjh=6,jqb=9,mfhk-,ckx=2,mn=8,sn-,bkd-,jqb-,llxv=7,rj=7,hbfp=1,chs=7,dch-,xfnccr-,hqg=7,llx=1,pjbt-,dn-,nl=6,ccvbl=9,bx=3,ng=8,fjqj-,ldl-,pxc-,jmfc-,hcgz-,lzsk-,jq=4,mgg=3,jqq-,bbsd-,bjt=5,nzgqhh=5,kbc-,ccvbl-,jqb-,lh-,vvq-,zvp=7,vvz=9,vmp=3,lnb=4,hv=5,gx-,cj=4,tq-,ckx=8,pvc-,fjqj=1,sq=3,fcszl=7,tv-,cj=3,dg-,xhd-,jlb=2,bjt=4,gb-,hlls=5,mbtcm=2,hpbm-,sg-,rdm-,srt-,pln=6,pzt-,zt-,bpt-,rdpc-,mxz-,ldv-,rks=5,vzxxv=1,qb=8,gj=2,td-,kpn-,gxn-,jrbd-,cdvqnr=5,fqpqx=3,sn-,gt-,zjbgh=3,vlc-,xg-,lq=9,xfc-,dkxzp-,grnz-,jcd=5,lfk-,dbd=9,bk=7,gpn-,fsn=9,zxt=8,vxtbtr-,mm-,xgv=8,rxh-,ss=7,bx=6,fm=2,dx=3,cgppx-,prj=6,cxph-,ztx=2,lgz=4,rtfh=6,ztx=5,cd-,xcs=1,qz-,jtmj=4,tnt-,sjf-,jk-,fvf=4,cmdv-,pkjs=6,jxz=6,xzfrs-,cvk-,mxz=9,cfm-,mmz=3,cn=2,jt=4,xkb=3,ccvbl-,pqz=7,lq=1,svk-,vjp-,mtzvc=1,rzx-,xjkddf-,bpt=7,tnt=1,qqvps=3,qnvr-,kpn=2,jl-,dh-,vqt-,ztn=2,pqhx=5,kq-,kgj-,kfr-,pvc=7,bpt-,cnpzj=6,cv=2,rqx=7,fhx=8,jf-,dzxmm=2,zb=2,vf-,zp=1,cnpzj-,jqb=4,rdm=7,cfnj-,cps-,fgd-,mdxkng=6,jqb=8,qgzq-,qsbgs-,tnt-,rrt-,lcf-,npnvn=6,rdm=5,cpm-,lbqfgn-,lbqfgn=7,xcs=9,dn-,qgzq=7,jtd=4,cp-,zbdb-,fdhtxv=7,zvp=3,vn-,qf=7,kk=4,jhn-,qz=9,jk-,rvz=1,cx=2,hzc=4,dl-,zbdb-,gth-,ffg-,zdz=8,zb-,szs-,pl=1,bkt=1,dkjc-,prj-,vx=9,xd-,ndtm-,mzx-,xfnccr=1,npb-,pvc=3,tgp-,fdz-,cfn=8,zkx=9,jxjtk-,vf-,gt-,gp-,mgg-,gcbcp-,zjbgh=5,kgq=2,gx=7,gt-,ccvbl-,kbg-,zxt=1,zdz-,nck=8,nzg-,vzxxv=4,qtn-,qjhs=5,gpn-,nzgqhh=5,jp=5,hnr-,zmql-,gdszll-,psrt-,nthdl-,dgb-,gth-,fbkd=1,pqz-,vn=1,kdgb-,gzt=6,lzcvmq-,jhn-,tv-,jxz=7,nthdl=2,tk=2,gvz=9,cz-,qtn=4,dd-,pghc-,kzhq-,jx=3,bbs-,sn=5,fsn=6,jrbd-,fnf=1,hsl=6,mtrlfr-,kgzj=3,zrgctc=4,vqt=3,zvp-,kfzf-,fvf=9,hnr-,cfm=5,ctx=7,kgj=6,hqg-,tpclf-,tng=9,tjpn=6,svq-,tt-,gp=7,jslrh=5,qqvps-,hhfxj=3,lgx=6,cgppx=1,mznq-,ckx=3,ndtm=1,qqvps-,xdh=2,dk=3,cdvqnr=6,rhz-,bjt-,rkxr=9,zp-,kzcrx=3,ldv=6,gd-,lbqfgn=3,xssjj-,bx-,jl=5,zvp=5,ctx=9,fdhtxv-,hr-,gxn=1,zgnd=1,ffg-,zgnd=5,zdrp-,hpg-,pkjs=8,nck=1,hpr-,fdz-,rjk=8,qsbgs-,mkxx-,sjkg=8,mm=2,rjk-,kz-,sph-,dvh-,ck=4,jp=2,mtsr-,gp=6,qb-,jmp-,sjf=2,cxph-,kc-,bkd-,hbxq-,jpzs-,fbkd-,dfmj-,vqpf=5,df-,xxpn=2,vb-,rcp-,kgj=7,qt-,xz=1,fzg-,jdp=3,tdpr=1,tpclf-,qkm-,vx-,qbx-,bpt=8,sjb=9,srqc=1,bnc=3,dch-,xlghf-,jfsn=6,snr=5,kh-,srt-,ndfr-,qjhs=7,dqh=7,sjf-,lgz-,hdb-,jxft=9,mv=9,mbtcm-,gb=6,jd-,xcknz-,xvpqh-,shm=9,fql=9,mtzvc-,jc-,vmp=1,gxn-,ndfr-,fbrrk=1,hlls=4,xk-,krzb-,hrq-,kzhq=6,lmkh=6,ffnzq=2,bpg-,zjd-,hjbdrs=9,vf-,mj-,rkqqlz-,gd=2,ztn=4,lzsk-,zf-,vjp=2,zdrp-,ftcs-,kdm-,djg=4,lvf-,bqf=7,tng-,jslrh-,qf-,qnvr=1,cpm=4,ftxnm-,mcj-,pz-,psf=8,kfzf=8,mr=3,dfx=6,sp=2,hsl=4,rzx-,rzx=2,kjbn-,hgvbj-,zvp-,fx=1,zbdb-,jmp=9,qhd-,bm=2,xcknz=7,xssjj-,mm=5,pg=4,gpn=9,pk-,zgnd=2,jxz-,kgq=3,tc=9,xfc-,mggbm=3,sjkg-,xhd-,mvf=6,mggbm=9,bm-,kq=9,gdqg-,mq-,hdzr-,tst=6,lkmqbg=6,pj=2,pln-,xhd=6,gb-,hpr-,ckx=4,nt=3,kzhq-,lgz=9,cxph-,tnm=4,kjv-,zbdb-,xhd-,mzx=3,tgp-,nq=3,cdrk-,ldv-,cpm=1,dj-,mlj-,sgzn-,lzsk-,sjkg=2,vc-,xdh-,pjbt=1,vb=1,fvv-,tt-,xzq=7,pkgb=9,xcs=1,bqf=3,stx=3,srt-,ktd=3,lzsk-,qt-,npb-,rzx-,lmkh=2,fzg-,dkjc=6,kjv=6,jfj=1,vx-,chs-,zkcfgm=8,jlh-,jlh-,dch-,fj-,vg-,lgz=1,jl=2,nl-,kfr=2,dh-,zkx=5,lkmqbg-,tpclf-,hqg-,kfzf=2,qbp=8,gdqg-,pqz=6,fbrrk-,fn=9,dkjc=7,fzg-,bc-,xdh-,stx-,kjv-,hlls=5,lfx-,dgb=4,pjbt-,mtzvc=2,xd-,dxsch-,hb-,rj-,cz-,cgppx=9,svq-,zkx=9,hhfxj=8,ldv-,pqz-,ccvbl-,tt=2,zt=9,ffnzq=9,hnr-,nq-,mxz-,srqc=6,gcbx=7,tdpr-,qbbb=5,hbfp-,tfpj-,jl-,zdrx=8,bkt=6,zrgctc-,lnb-,xhd-,grnz=8,sq=8,fhmjh-,ldl=4,xk=5,zgnd-,qkm-,gvk-,sq-,xlghf=1,jmp=1,qgzq=7,bvg=8,sq-,jtmj-,xfsd-,bvg=8,dk=3,dz-,jqb-,vbps=2,dfc=2,qxl=2,jmfc-,dp=6,hmxgqd=4,mznq-,kq=5,xkvrx=9,jlb=2,jc=7,nzg=1,jl-,bnc=3,lzsk=1,hpbm-,hb-,qbbb=6,qbx=5,xmhxk=3,vlqj=7,cv-,qs=1,mt=3,cmdv-,zdrp=4,sg-,qlbr-,kc=9,prj-,fn=1,kk-,rjk-,zrgctc-,ktdg=3,fdz=5,cz=7,hmxgqd-,vg=9,mmcf-,xkvrx=5,brj=8,sp-,sptllc=8,tc=1,fdhtxv=3,qlbr=1,fgd-,bmxnh-,vgnn-,nq-,ftvjzf=7,jqb-,qkm=2,mlb-,srt-,dxb-,dkjc-,jx=1,gt=6,hcgz=1,dkjc=6,jk-,kgl-,jg=3,dx-,szs=7,tjkfxg=9,tdkcl-,vf-,fmf=2,srt=8,xfc=9,lgx=4,zb=9,kdj=3,hhfxj=2,kgl-,rqx-,rzx=6,ztn-,mfhk=6,kbt-,zjbgh-,xsf-,vqp=9,cnpzj-,qrgx=5,fvv=6,sg-,mcj-,jdp-,cnmr-,gdszll=5,tv-,jq=9,dkjc=4,tnt-,vvz-,rc=4,mmcf=2,gq=2,zm=1,lq=9,fvf-,vjp=7,zjbgh-,jhn=9,bq-,xfnccr-,kl-,vjp=3,dx-,mgclg-,tng-,mq-,zvbn=4,jhb-,mt-,ffnzq-,ztn-,ljf=4,qt-,nmm-,kbt-,nmm=5,jp-,xxpn=3,kgzj-,cps=9,gcbx=7,zm=2,hv=8,lm=7,hrq-,gt-,cp=8,dv-,fmf-,dbd=6,mgclg-,kbc=7,ck-,rrt=2,sjb-,krzb=2,srqc=7,bpg=5,vxtbtr=6,mtzvc-,xd=3,dj-,xkvrx=1,qgzq=6,kh-,kbc=7,pvc-,cxph=3,fj-,qg-,zgnd-,vqt-,bkt=9,dc=9,rks-,tc=7,lzsk=2,srm=1,ffg-,fqzf=3,zkcfgm-,fmf-,gcbcp=7,nmm=2,zh=8,mmcf=9,kggkk-,sgzn=9,rht=5,jcd-,npb=7,bkt-,mlj-,vn-,ms=5,ktd=2,qjhs=1,nl=6,fnrjl=4,gx=5,cd-,mdxkng-,qsbgs-,chph=5,rht-,ffh=5,fhmjh-,cfn-,jqq-,pm-,pp=7,kr=7,pvc-,bc=7,fhx=3,tv-,tgp=9,qb=3,xfnccr-,lzsk-,hrsx-,tf-,fqzf=7,bjqbx-,dgkp=8,bm-,mr=7,zkx-,qbp=8,dl-,gd=2,pkgb-,kgj-,bc-,rqx=8,xzfrs=9,stx=8,zdrx-,fmf=8,qjrk-,mlb-,cpm-,dch=5,rht-,xfsd=7,jxjtk-,zc=2,cfn=6,cv=6,jjt=1,kr=3,pghc=5,kfcrmh-,jhn=3,xkvrx-,gt=3,bvg=7,pvg-,jpn=7,bbs=8,rvz=4,lnz=9,mkxx-,jfsn=2,qdv=6,qjrk=1,zvbn-,fm=3,tk=9,stx=5,qg=6,rzx=4,vjp=8,xcs=5,fx=7,bmxnh-,mfhk-,dk=3,mmz=4,jc=6,szs=3,hbxq-,vjt-,tnm-,cndm-,lgk=2,qbbb=3,hpg=5,rvz-,nzgqhh=5,lnb=3,xgv-,gcbx=7,ffg=5,fbrrk-,zm=5,xkvrx=4,chs-,dzdn=7,tt=8,snr=1,cmdv-,lbqfgn=3,jc=8,kzcrx=6,ms-,vvq=7,gt-,jlb=7,bnc=1,dl=3,ttmj-,ld-,kgl=1,tc-,gpkk-,kbg-,qbx=9,bnc=2,ndh=7,lgn-,cndm-,rhz=2,pln-,kdm-,qzpdbt-,qbx-,sn-,qbp-,dqh-,lkh=4,kdgb=1,mmcf-,qbbb=9,gxn=2,kr=7,fhmjh=2,xssjj-,jlb=6,mv-,lvf-,dfmj=9,tdpr-,gsd=3,nz=7,qpfx=9,fqzf=8,vgnn-,hpg-,cdvqnr=5,kc-,nq=4,mxz-,hr-,zs-,jxjtk-,tf-,zr-,bx-,bt-,jz-,pxc-,bh-,jhb=5,cd-,zjd-,lnb-,jh-,sjf=3,pkjs=4,xdh=9,xz-,cj=1,rhz=7,lxj=2,kbg=8,qjhs-,hmxgqd=6,bjt=9,qzpdbt=4,sptllc=9,nmm=8,sptllc=6,mgg=8,gpn=1,xd-,hqg=3,vqp=8,sn=7,fzg=4,zp=8,rkqqlz=3,ss=9,mbtcm=4,kzhq-,kfzf-,rzx-,lbqfgn=2,xfsd=2,kgl-,qnvr=4,kdgb-,bl=1,hb-,bb-,bjqbx=6,kk-,nthdl=6,jfj=1,vvq-,fhx=4,jcj-,cx=2,bmxnh=8,hcgz=9,ndfr-,hn-,hz-,gdqg-,cpv-,hrq=9,mj-,jd-,jc=8,fmf-,xzq=6,fql-,jmp=8,jrbd-,nthdl=8,bjqbx-,qkm-,td=8,hv=6,brj-,qsbgs-,dfmj-,dfx-,vqt=2,cfm-,fnrjl-,nmm-,zbdb=6,cj-,gcbcp-,fj-,qnvr=4,fx-,bm=5,tjpn-,jxz-,hv=1,kgl=7,fj-,vc=9,jh=3,bpg-,tfpj=2,svq=2,zdz=4,fmf-,jlb=5,gb=7,hpg-,kk-,cps-,rcp-,mgclg=4,zxt-,qhd=8,qsbgs-,dx-,tng=5,qn-,jpn=9,zh-,pzs-,kgl-,fj-,ktdg-,gj=6,hdzr=2,qxl-,jxjtk-,nr-,fqpqx-,mj-,nkv-,kjv=9,jl=6,sjb-,dzxmm=6,fnf=1,vq=2,krzb-,cv=1,xfnccr-,snr-,svkh-,jrbd=4,xssjj-,nr-,qb-,hdb-,tnt-,cpv=8,fvv-,ztx=4,dmpm-,hsl-,cnmr=9,jmfc=3,qqvps=4,sk-,ckx=5,dgb-,hk=8,nq-,rdm-,ljf-,qzpdbt-,lm-,lnb=3,ftcs=4,bb-,cmdv=7,lxj=4,dg-,kq=1,qhd-,zst=3,tdkcl-,qkm=3,tt-,pln-,lfx=3,vmp=6,fqpqx-,rqx=7,pkgb=6,rhz-,rc=1,xk-,nthdl=7,lcpg-,lkmqbg=9,sq-,xcknz=1,shqtb-,kzhq=7,pm=3,qdv-,ttmj=8,pghc-,cpm=8,hbxq-,kvgqcd-,xk=2,mvf-,xcknz-,xk=2,qjhs-,jq=2,fbrrk-,jslrh=8,bmxnh=4,dd=3,xcs-,hhm=5,hxphc-,hzc=2,dx-,jxjtk-,jtmj-,pjbt-,svq=6,grnz-,dfx=9,lq=2,cmdv=7,lkmqbg=4,nrlr=7,sq=6,pzs=4,dqh-,dkjc-,jx-,hgvbj=1,bc=9,dk=3,cd-,sgzn=1,cn-,qzpdbt=4,cn-,kdh=5,ndtm=9,dg=5,lh=7,vqpf=4,tdkcl=6,ndh=1,tf-,hcgz-,rrt-,ftxnm=2,zrgctc-,kbc=2,mlb-,bm-,xjl=4,fjqj-,cfnj-,bb=4,gpn-,zrgctc-,xcs=4,dd=4,chs-,gj=3,fq=4,pz-,hqg-,zp=8,hlls=1,dk=8,vxtbtr=4,jfsn-,zst=6,jn=6,jqb-,ndfr-,hcgz=4,mlb=3,hhm=4,dgb-,kgzj=7,llx-,kbt-,lkmqbg-,kzcrx=8,xgv=2,llxv-,ztr=1,sjgnj-,vxtbtr-,mxz-,ktd=9,tr-,gq-,dg-,gb=3,xsf-,zfgsk-,cfm-,jc=7,xmhxk=2,xd=5,jt=3,rzx=8,hbfp=4,cfm=1,rlsd=6,hrsx=5,krzb=8,hpr-,mr=7,xzq=8,dc=4,kgl=9,qrgx-,lcf-,dh-,bb=2,fm-,jqbbht=4,pkgb=7,gth=2,cdrk-,pk=2,vzxxv-,zc-,dgb-,kr-,xhd=2,xzfrs-,qs=8,gd=2,pzt-,svkh=8,hnmv=3,jh-,sjf=8,llxv=2,xcs-,gvk=9,rkqqlz-,cfnj-,ftvjzf-,rc-,qqvps-,llxv-,gzt-,kdh=6,qjrk-,qrgx=2,zdrx=5,gp=5,rht-,mdxkng=9,hmxgqd=5,kkr=7,lkmqbg=9,tv=7,zm=6,mm-,mbtcm-,rkqqlz=2,dd-,xlghf=9,vlqj-,phqp-,bkt-,nz-,hn=2,lvf=2,hhfxj-,tr=8,fzg=5,xjk-,gxn=9,fbrrk-,pkjs-,xjk-,pvc=4,tdpr-,kfr-,pp-,td=6,cz-,qbx=6,dp-,mf=6,lh-,ftxnm=6,ndh=6,tnm-,gdszll-,zkx-,rtfh=8,td=7,vq=1,hz-,hzc=9,xg=6,mm-,dp=4,bjt=8,npnvn=4,fq-,xzfrs-,kgj-,hhm-,fnf=2,kkr=2,jq-,zjbgh=3,fnf-,qnvr=5,nmm=1,kbt=7,nr-,rj=6,vg=2,qbbb-,nq=7,hrsx-,tjkfxg=3,mm-,fm-,cz=1,jtd=5,pm=3,hnmv=3,llx=5,kgq=4,pz-,xd=8,mp-,sptllc-,zt-,hhm-,gj-,cz-,zb-,bjt-,jdp=3,rqx=3,rtfh-,bb-,jcd-,npnvn=6,ndh=2,ss=5,jtmj-,hxphc=1,jmfc-,shm=9,xfc-,zt-,jl-,rkqqlz=7,lkmqbg-,kgq=8,bh=2,jpzs=3,fq-,mkxx-,fm-,mggbm=4,jt-,fjqj=5,msc=8,zn-,rkxr=4,tr=8,mcj-,pkgb=9,hr=7,dkxzp-,dkxzp=7,rzx-,xgv-,ccvbl=7,lbqfgn=2,bbs-,jtd-,dxsch-,gsd=4,bjqbx=9,hv-,dz=3,hlls=4,xd=3,dfmj=2,nn=9,rjtg=2,hgvbj=9,sjkg-,bt-,nmm-,bm=7,kfcrmh-,xgv=6,kgl=8,vmp=2,ktdg-,pc-,vqt=1,cfm=9,bt-,jh=5,gj-,qbx-,kzhq=7,dz-,sqdr=5,qf-,kbc=5,lzcvmq=4,dz-,mm=1,sjf-,nntz=3,xmhxk=9,fx-,vzxxv=4,mt-,pl-,xkb=3,dgkp-,lzcvmq=2,fgd=5,jh-,tng-,xzq-,svkh-,vqt-,sp-,td=3,mhm-,vvq=1,kjbn=7,zvbn=3,jg-,svq=2,svkh-,jhb-,dgm=7,vx=6,zrgctc=6,qz-,xvn-,kz=4,mtrlfr-,jdp-,hhfxj-,tgp=1,rkxr=3,lfk=9,zdrp-,fm=6,jnd=9,ftcs=9,zkcfgm=3,pqz-,mbtcm=7,hmxgqd=7,dxb=1,sp-,sn=7,jxjtk=1,lc-,ds-,sjf-,lc-,mlb=1,rhz-,qf=6,rkqqlz=6,vxtbtr-,bm-,zc-,lgn=9,qxl-,hnmv=3,xhd=7,tnt=9,rhz-,qxl-,ldv-,mp=2,fqzf-,kk=6,dxsch-,xhd-,ktdg=1,gcbx-,jpzs=1,zr-,dd=3,tv-,cnmr=4,dkxzp-,mlj-,zr=6,rzx-,fx=7,bkt=6,fbrrk=5,pln-,fhmjh-,fhx=2,rkqqlz=6,rhz=5,zvp-,kggkk=5,qb=1,kdm-,qkm=8,cps=2,dkjc=4,dgkp=4,cdvqnr-,grnfm=4,pln-,gb-,ztx-,ffh-,vf=5,llx-,snr=8,mgclg=5,gt-,rhz-,pl=8,lcf=5,rzx-,bqf-,bq-,pl=7,dk=4,gpn=1,hrsx-,rjtg-,qjhs-,xxpn=3,zst=4,gvz-,qsbgs=4,rkqqlz-,vzxxv-,fnrjl-,grnz=1,mdxkng-,gvk=1,zjd-,zvbn-,lxj-,mcj=9,dfmj-,xfsd-,tf=4,jcj=5,fj=9,nck-,srm-,qhd=6,nz-,kpn-,ztx-,gvz=2,fj=8,bk=5,bb=4,xhd-,lm-,bmxnh=6,lgk-,llxv-,sg=2,nthdl=9,zkcfgm=7,hk-,jpzs-,bjt-,jqb-,ffnzq=1,bk-,jmp-,bmxnh=3,zs-,zbdb=9,fbrrk-,rvz=1,mn=6,lkh-,rvz=4,zvp=7,qzpdbt-,ktdg-,tq-,mq=6,pzs=7,tv-,nf-,jpn-,mn-,cdrk=2,fgd=5,hhfxj=1,mv=9,cfnj-,fvv=6,nf=5,lgx-,fbkd-,snr=1,zmql=3,dj=6,chs=4,msc=5,hgvbj=4,npb=3,kkr-,tr-,kh-,xgv=2,kfcrmh-,zdrx=2,vqp=3,tf=5,pqz-,rhz-,dch=9,bk=5,lzsk-,hrq=2,kfcrmh-,kfzf-,mgclg=6,hdvrn-,svk=4,kgq-,fgd=8,nq-,cnmr=3,jh=2,hmxgqd-,lcpg=4,fbkd-,jqbbht-,tgp=9,jslrh=7,dch=2,gcbx=4,kfcrmh-,xz=1,qpfx-,llxv-,cmdv-,mr-,sgzn=9,mgclg-,brj-,tst=7,xd-,qjhs-,pxc=8,mq=5,fnf=4,srqc-,zkcfgm-,nck-,pkjs=5,hnmv-,fx=1,kph=3,xkb-,lnz=5,cps=5,qbx=3,jhn=1,nr=3,rhz-,qpfx=3,pzt=7,pjbt=6,hdzr=6,kkr-,rqx=1,llx=1,hbfp-,tr-,rxh-,qt=1,dbd-,jslrh-,xkb-,snr-,dqh=4,kdj-,jc=1,td=9,grnz-,mkxx=9,rkqqlz-,zbdb-,hrq-,gpn=9,qtn=5,kfr-,gt-,dbd-,xk-,kzhq-,kzcrx=8,bmxnh=3,ccvbl=7,vzxxv=1,tnm-,xd-,gdszll-,qbx-,td-,gt-,gq=3,hmxgqd-,nn=3,jmfc=8,kdh=7,kq-,kbc=7,qzpdbt=6,dzxmm-,cxph-,fvf=7,mm=3,zdrp-,qb-,zvbn=9,mj-,qz-,hmxgqd=9,dpl-,fgd=5,pzs=1,kh=1,zp=3,prj-,rkxr=1,cxph-,knf=7,zfgsk=7,dv=8,bx-,shqtb=5,zp-,kl=2,kdgb-,mq-,vx=7,vjt-,npnvn=3,tr=7,mm-,kgq=5,ccvbl=7,prj=8,jslrh-,jz-,kdh=1,jrbd=5,nl=6,hhm=5,nzg-,dl-,pkgb-,kzhq-,dbd-,zs=8,gd=6,tk=7,zkx=7,sk-,xcs=7,jtd=5,xg-,xjk=7,hnmv-,ffh-,kdh=3,tf=2,hdb-,kz-,kdj=6,nlmh=1,sjkg=9,bjt=9,rzx-,cps=5,lgx-,bc=7,dgq=6,kkr-,xfsd-,gpkk-,fhx-,tpclf=9,hz-,jl-,mf-,gpkk-,rdpc-,kbc=5,jhn-,hzc-,rqx=6,qpfx-,qnvr=8,vc-,tptsg-,mt-,kfr-,dgkp-,gd=7,mznq=7,ng=1,cnmr=9,bpt=5,hbxq-,sjgnj-,nzgqhh-,hpg=5,zkx=4,dgq-,dzxmm=8,fql=6,hnmv=8,fjd=1,kfzf-,nzg-,xkb=8,vqt-,shm=7,bmxnh=5,qkm-,svq-,srm-,pxc=9,fmf-,pqhx=5,dpl=2,pktd=4,hpr-,xgv-,dh=3,dfmj-,ffg=2,kfzf=3,fmf-,dxb=4,xzq-,ztn=8,xjk-,gp=8,cpv=7,gdqg=4,gcbx=1,hmxgqd-,rkxr=2,rlsd-,shm-,bk-,fj=4,hqg-,rvz=7,dvh=8,vvq=5,kph=9,npnvn-,svkh-,tk-,jcj-,lnz=2,zb-,nntz-,fgd-,hhm=4,dkjc=6,xg-,hpr=7,fqzf=5,kc=6,ldl-,tkt=8,zrjn=3,fcszl-,cfn=6,bpg-,gpn=3,hmxgqd=7,llxv-,gzt-,dzxmm-,lnz=3,nz=7,ds=1,tf=9,kbc=3,fj-,ztn=9,ndh=9,rcp=8,jmfc-,gb-,mmz-,jcd=3,vx=2,zm=5,dfx=6,jfsn=6,gq=6,zdrp-,hlls=8,kjbn=3,pzt=2,cfm-,xvn-,hdzr-,dkjc=5,srt-,fdhtxv-,qtn-,ftxnm-,mt-,dc=2,zkx-,pkjs=7,shqtb=5,jnd-,tjkfxg=7,kdm-,cx=1,mbtcm-,fdz=1,gpkk-,fjqj=1,rvz=2,jfj=3,vqpf-,rkqqlz-,vb=3,xlghf-,gpkk-,nl-,mkxx=3,dqh=7,qz=8,hcgz-,qtn=4,xjl-,qs-,pkgb-,kbg=8,xzfrs=4,zvp-,npnvn-,jcj-,dxsch-,tvzdr-,bvg-,zxt-,mmz=4,hk=3,rkqqlz=1,tfpj-,mt=5,jl=5,bh=3,jt=7,mj=7,zbdb-,jd=5,lzcvmq-,bk-,mgclg-,lkh=8,hpr=6,vx=3,pghc-,dv-,mfhk-,hsl-,mlj=9,bjt=3,ktdg-,hz-,dv=8,zrgctc-,fq=3,lkmqbg=2,xxpn-,ftvjzf=3,zst-,tjpn=7,nn=2,hrq-,sg-,zst-,tnm=8,zkcfgm=4,tkt=2,vjt=3,qlbr=1,nr-,jh-,jtmj=8,mn=5,cvk-,sjf=5,mhm=7,brj-,kfr-,szs=6,dz=1,zn-,jlb-,tf=2,shqtb-,jk=7,zdrp-,dp-,sgzn=2,bmxnh-,xlghf=2,nt=2,qjhs=7,zt-,rvz=7,pc-,jpn-,qzpdbt=2,bh-,jk-,jjt-,hnr=9,jxz=8,cv-,fdz-,kjv-,psf=2,cxph=6,cgppx=1,cgppx-,jtmj-,jfsn=3,nlmh-,zm-,llx=4,sjkg=6,kdj-,tdpr=8,pvg=4,dqh=3,hn-,qhd=9,fmf=5,nz=8,xvn-,mxz-,kgl=2,qs=8,nf=5,zxt=9,jqq-,mmcf=8,cfm-,dg=3,zrjn-,vqpf-,llxv=6,jt=6,rkxr-,jg=4,jnd=6,gvz=4,jq=8,hpbm-,cvk-,fqzf=6,pg-,tc=5,zdrx-,pzs-,hpbm-,pp=8,vjt-,xlghf-,ktdg=5,vqt-,hgvbj-,cx=8,psf-,tdpr=4,tt-,shm-,zrjn-,dp=2,stx-,hz-,vjp-,qkm=2,kq-,mm=9,zjbgh-,mv=8,rkqqlz-,tk-,rdm-,kkr-,cmdv=3,srm=7,lm-,fsn=1,kbg-,lcpg-,mlj=2,tng=2,dzdn-,qbbb=4,dp=7,jh=8,mznq=1,kk-,hpg-,kbt=9,jq-,td=1,brj-,hsl-,pj=3,fhmjh-,gvz-,hgvbj-,tk=5,tvzdr=9,zt=9,jqbbht-,pxc=4,svk-,fvv=8,jp=8,vvq=6,zmql-,pp=2,lcpg-,pvc=8,fn-,bb=9,bkt=3,hn-,dz-,zst=6,zjbgh=7,bmxnh-,fsn=2,kgj-,qjrk=2,jnd-,bmxnh=6,hgvbj=3,xkvrx-,fvf=8,hlls-,vb=1,dj-,rxh-,lvf-,gd-,bl=6,lxj=3,ldv=6,lfk=1,vg=4,xvpqh-,fx-,jl=8,hbfp=4,bfg=2,tptsg-,kggkk=7,ss=7,fvf=6,tjkfxg-,hz-,hgvbj-,mdxkng-,kh=4,xsf-,vf=3,hgvbj-,fx-,fnf=1,lnz-,hr=3,chs-,tk=7 \ No newline at end of file diff --git a/solutions/2023/pughmds/inputs/day15/test1.txt b/solutions/2023/pughmds/inputs/day15/test1.txt new file mode 100644 index 0000000..62f7ed0 --- /dev/null +++ b/solutions/2023/pughmds/inputs/day15/test1.txt @@ -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/solutions/2023/pughmds/python/day10/__init__.py b/solutions/2023/pughmds/python/day10/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day10/__main__.py b/solutions/2023/pughmds/python/day10/__main__.py new file mode 100644 index 0000000..6ad2f96 --- /dev/null +++ b/solutions/2023/pughmds/python/day10/__main__.py @@ -0,0 +1,144 @@ +import time +EXPECTED_TEST_ANSWER_PART1 = [4, 4, 8, 8, 4, 3] +EXPECTED_TEST_ANSWER_PART2 = [0, 0, 0, 0, 0, 0] +PIPE_CHARS = ["|", "-", "F", "7", "L", "J"] +UP_PIPES = ["|", "7", "F", "S"] +DOWN_PIPES = ["|", "J", "L", "S"] +LEFT_PIPES = ["-", "L", "F", "S"] +RIGHT_PIPES = ["-", "J", "7", "S"] + +class Node: + def __init__(self, x, y, char): + self.x = x + self.y = y + self.char = char + self.next_node = None + + def __str__(self): + return f" ({self.x},{self.y})[{self.char}] " + +class LinkedList: + def __init__(self): + self.head = None + + def is_empty(self): + return self.head is None + + def append(self, x, y, char): + new_node = Node(x, y, char) + if self.is_empty(): + self.head = new_node + else: + current_node = self.head + while current_node.next_node: + current_node = current_node.next_node + current_node.next_node = new_node + + def prepend(self, x, y, char): + new_node = Node(x, y, char) + new_node.next_node = self.head + self.head = new_node + + def display(self): + elements = [] + current_node = self.head + while current_node: + elements.append(current_node) + current_node = current_node.next_node + print(" -> ".join(map(str, elements))) + + + +class PipeMap: + def __init__(self, map): + self.map = [[char.strip() for char in string.strip()] for string in map] + self.original_map = self.map.copy() + self.remove_stray_characters() + + self.path = LinkedList() + start = self.find_start_position() + + self.path.append(start[0], start[1], start[2]) + self.identify_loop() + + def identify_loop(self): + self.path + + def find_start_position(self): + position = next((i, row.index('S')) for i, row in enumerate(self.map) if 'S' in row) + return position[1], position[0], self.map[position[0]][position[1]] + + def test_point(self, i1, j1, i2, j2, first_pipes, second_pipes): + if i1 < 0 or i2 < 0 or j1 < 0 or j2 < 0: + return False + try: + #print(f"Is surrounded by {self.map[j1][i1]} and {self.map[j2][i2]}") + if self.map[j1][i1] in first_pipes and self.map[j2][i2] in second_pipes: + return True + else: + return False + except: + return False + + def remove_stray_characters(self): + # Loop over each character in the map, and make sure it connects with two other valid shapes. + for num in range(0, len(self.map) * 5): + for j, row in enumerate(self.map): + for i, char in enumerate(row): + if char == ".": + continue + elif char == "-": + if not self.test_point(i-1, j, i+1, j, LEFT_PIPES, RIGHT_PIPES): + self.map[j][i] = "." + elif char == "|": + if not self.test_point(i, j-1, i, j+1, UP_PIPES, DOWN_PIPES): + self.map[j][i] = "." + elif char == "J": + if not self.test_point(i-1, j, i, j-1, LEFT_PIPES, UP_PIPES): + self.map[j][i] = "." + elif char == "F": + if not self.test_point(i, j+1, i+1, j, DOWN_PIPES, RIGHT_PIPES): + self.map[j][i] = "." + elif char == "7": + if not self.test_point(i, j+1, i-1, j, DOWN_PIPES, LEFT_PIPES): + self.map[j][i] = "." + elif char == "L": + if not self.test_point(i, j-1, i+1, j, UP_PIPES, RIGHT_PIPES): + self.map[j][i] = "." + + def get_length(self): + total = 0 + for row in self.map: + for char in row: + if char in PIPE_CHARS: + total += 1 + + return total + + def __str__(self): + rows = len(self.map) + cols = len(self.map[0]) if rows > 0 else 0 + result = "" + for j in range(rows): + for i in range(cols): + if 0 <= j < rows and 0 <= i < len(self.map[j]): + result += str(self.map[j][i]) + else: + continue + #result += "\t" + result += "\n" + + return result.strip() + +def run(data): + this_map = PipeMap(data) + #print("--------") + #for row in data: + # print(row) + + print(this_map) + return round(this_map.get_length() / 2) + + +def run_p2(data): + return 0 diff --git a/solutions/2023/pughmds/python/day10/__main__old.py b/solutions/2023/pughmds/python/day10/__main__old.py new file mode 100644 index 0000000..5289320 --- /dev/null +++ b/solutions/2023/pughmds/python/day10/__main__old.py @@ -0,0 +1,211 @@ +''' +Original attempt where I was overthinking it... +''' +import time +EXPECTED_TEST_ANSWER_PART1 = [4, 4, 8, 8] +EXPECTED_TEST_ANSWER_PART2 = [0, 0, 0, 0] +PIPE_CHARS = ["|", "-", "F", "7", "L", "J"] +UP_PIPES = ["|", "7", "F"] +DOWN_PIPES = ["|", "J", "L"] +LEFT_PIPES = ["-", "L", "F"] +RIGHT_PIPES = ["-", "J", "7"] + + +class Point: + """ + No real need to make a point like this, but it may be + useful to keep track of things... + """ + def __init__(self, x, y, char): + self._x = x + self._y = y + self._char = char + self._up = False + self._down = False + self._left = False + self._right = False + self.check_char() + + @property + def char(self): + return self._char + + @property + def x(self): + return self._x + + @property + def y(self): + return self._y + + @property + def up(self): + return self._up + + @property + def down(self): + return self._down + + @property + def left(self): + return self._left + + @property + def right(self): + return self._right + + + def check_char(self): + # It's a rule that the order should follow the Konami Code... https://en.wikipedia.org/wiki/Konami_Code + direction_mapping = { + "|": (True, True, False, False), + "-": (False, False, True, True), + "J": (True, False, True, False), + "F": (False, True, False, True), + "7": (False, True, True, False), + "S": (True, True, True, True), + "L": (True, False, False, True) + } + + self._up, self._down, self._left, self._right = direction_mapping.get(self.char, (False, False, False, False)) + + def __str__(self): + return f"({self._x}, {self._y}): [U:{self._up}, D:{self._down}, L:{self._left}, R:{self._right}] --> '{self._char}'" + + +class PipeMap: + def __init__(self, map): + self.map = map + self.start_pos = self.find_start_position() + self.pipe_path = self.get_pipe_path() + + def find_start_position(self): + position = next((i, row.index('S')) for i, row in enumerate(self.map) if 'S' in row) + return Point(position[1], position[0], self.map[position[0]][position[1]]) + + def get_surrounding_points(self, this_point): + surrounding = [0, 0, 0, 0] + directions = [(-1, 0), (1, 0), (0, -1), (0, 1)] + + for i, (dy, dx) in enumerate(directions): + try: + surrounding[i] = self.map[this_point.y + dy][this_point.x + dx] + if surrounding[i] == ' ': + surrounding[i] = '.' + except IndexError: + surrounding[i] = "." + + # Now, let's narrow things so that we only are shown points we can get to + if not this_point.up: + surrounding[0] = "." + if not this_point.down: + surrounding[1] = "." + if not this_point.left: + surrounding[2] = "." + if not this_point.right: + surrounding[3] = "." + + return surrounding + + def get_pipe_path(self): + path = [] + steps = 0 + + print("------------Using this Map------------") + print(self.map) + + current_location = self.start_pos + path.append(self.start_pos) + came_from_direction = False + loop_connected = False + while not loop_connected: + # First, have a look around us based on the point's perspective + surrounding = self.get_surrounding_points(current_location) + next_pipe = -1 + # Now, we need to turn off the direction we came from + if came_from_direction >= 0: + print(f"Let's disable where we come from: {came_from_direction}") + surrounding[came_from_direction] = "." + + # Next, we need to check if there are more than two paths leading from the point we're at. + possible_path_count = len(surrounding) - surrounding.count(".") + print(surrounding) + print(f"At step {steps} on char {current_location.char} ({current_location.x},{current_location.y}), I found {possible_path_count} possible paths to follow.") + # If there are only one or two paths, we can just follow and move to the next stage. + if possible_path_count > 2: + # This may happen in the starting position, but maybe others... + print("Unsure which path to follow...") + break + else: + # Follow the first route we can + for char in PIPE_CHARS: + try: + next_pipe = surrounding.index(char) + break + except: + continue + print(f"Following: {surrounding[next_pipe]}") + time.sleep(0.5) + # Determine which way that character wants us to go, and if the character is a valid path + # Create and store this point + if "S" in surrounding: + # We need to trigger the end + print("We see the Starting point!") + start_location = surrounding.index("S") + if start_location == 0 and current_location.char in UP_PIPES: + loop_connected = True + elif start_location == 1 and current_location.char in DOWN_PIPES: + loop_connected = True + elif start_location == 2 and current_location.char in LEFT_PIPES: + loop_connected = True + elif start_location == 3 and current_location.char in RIGHT_PIPES: + loop_connected = True + else: + print(f"I'm not sure what to do: {char} has surrounding chars {surrounding}") + elif next_pipe == 0 and surrounding[next_pipe] in UP_PIPES: + current_location = Point(current_location.x, current_location.y - 1, surrounding[next_pipe]) + print(f"Going Up to {surrounding[next_pipe]}!") + came_from_direction = 1 + path.append(current_location) + elif next_pipe == 1 and surrounding[next_pipe] in DOWN_PIPES: + current_location = Point(current_location.x, current_location.y + 1, surrounding[next_pipe]) + print(f"Going Down to {surrounding[next_pipe]}!") + came_from_direction = 0 + path.append(current_location) + elif next_pipe == 2 and surrounding[next_pipe] in LEFT_PIPES: + current_location = Point(current_location.x - 1, current_location.y, surrounding[next_pipe]) + print(f"Going Left to {surrounding[next_pipe]}!") + came_from_direction = 3 + path.append(current_location) + elif next_pipe == 3 and surrounding[next_pipe] in RIGHT_PIPES: + current_location = Point(current_location.x + 1, current_location.y - 1, surrounding[next_pipe]) + print(f"Going Right to {surrounding[next_pipe]}!") + came_from_direction = 2 + path.append(current_location) + + steps += 1 + return path + + def __str__(self): + rows = len(self.map) + cols = len(self.map[0]) if rows > 0 else 0 + result = "" + for i in range(rows): + for j in range(cols): + if 0 <= i < rows and 0 <= j < len(self.map[i]): + result += str(self.map[i][j]) + "\t" + else: + result += "\t" + result += "\n" + + return result.strip() + +def run(data): + this_map = PipeMap(data) + + print(this_map) + return len(this_map.pipe_path) + + +def run_p2(data): + return 0 diff --git a/solutions/2023/pughmds/python/day11/__init__.py b/solutions/2023/pughmds/python/day11/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day11/__main__.py b/solutions/2023/pughmds/python/day11/__main__.py new file mode 100644 index 0000000..140651b --- /dev/null +++ b/solutions/2023/pughmds/python/day11/__main__.py @@ -0,0 +1,163 @@ +import math + +EXPECTED_TEST_ANSWER_PART1 = [374, 22, 6] +EXPECTED_TEST_ANSWER_PART2 = [1030, 102, 6] + +class Galaxy: + def __init__(self, x, y): + self.x = x + self.y = y + + +def get_distance(g1, g2): + distance = abs(g2.x - g1.x) + abs(g2.y - g1.y) + return distance + +def get_empty(map): + empty_rows = [] + + for y_idx, line in enumerate(map): + if "#" not in line: + empty_rows.append(y_idx) + return empty_rows + +def duplicate_row(lst, index): + + row_to_dup = lst[index] + lst.insert(index, row_to_dup) + + return lst + + +def duplicate_col(lst, index): + if not lst: + return + + if 0 <= index < len(lst[0]): + for i in range(len(lst)): + # Insert a duplicate of the character at the specified index + lst[i] = lst[i][:index] + lst[i][index] + lst[i][index:] + else: + print("Index out of range") + return lst + +def find_galaxies(data): + galaxies = [] + for y_idx, line in enumerate(data): + indices = [] + start_index = 0 + try: + while True: + index = line.index("#", start_index) + indices.append(index) + start_index = index + 1 + except ValueError: + pass + + for index in indices: + galaxies.append(Galaxy(index, y_idx)) + return galaxies + +def get_distance_sum(galaxies): + total = 0 + for i in range(len(galaxies)): + for j in range(i + 1, len(galaxies)): + galaxy = galaxies[i] + pair_galaxy = galaxies[j] + distance = get_distance(galaxy, pair_galaxy) + if distance > 0: + total += distance + return total + + +def get_distance_sum_expanded(galaxies, empty_rows, empty_cols, distance_factor): + total = 0 + distance_factor -= 1 + for i in range(len(galaxies)): + for j in range(i + 1, len(galaxies)): + distance = get_distance(galaxies[i], galaxies[j]) + # First, work out if we crossed any row boundaries (Y) + if galaxies[i].y > galaxies[j].y: + first_val = galaxies[j].y + second_val = galaxies[i].y + else: + first_val = galaxies[i].y + second_val = galaxies[j].y + + # Work out how many times we need to expand on the distance + crossed_boundaries = [x for x in empty_rows if first_val <= x < second_val] + if len(crossed_boundaries) > 0: + distance += (len(crossed_boundaries) * distance_factor) + + # Next, work out if we crossed any column boundaries (X) + if galaxies[i].x > galaxies[j].x: + first_val = galaxies[j].x + second_val = galaxies[i].x + else: + first_val = galaxies[i].x + second_val = galaxies[j].x + + crossed_boundaries = [x for x in empty_cols if first_val <= x < second_val] + if len(crossed_boundaries) > 0: + distance += (len(crossed_boundaries) * distance_factor) + + total += distance + return total + +def run(data): + """ + Actually physically modify the map to have the needed values. + """ + # Find a list of empty rows + empty_rows = get_empty(data) + if len(empty_rows) > 0: + empty_rows.sort(reverse=True) + + # find a list of empty columns + empty_cols = get_empty(list(map(list, zip(*data)))) + if len(empty_cols) > 0: + empty_cols.sort(reverse=True) + + # Duplicate any rows and columns that are needed + for row in empty_rows: + data = duplicate_row(data, row) + + for col in empty_cols: + data = duplicate_col(data, col) + + # Find all the galaxies + galaxies = find_galaxies(data) + + # Get the sum of the distances + total = get_distance_sum(galaxies) + return total + + +def run_p2(data): + """ + To do this, we can't modify the map, but we CAN modify the coordinates + to create the same effect. + """ + # First, find all the galaxies + galaxies = find_galaxies(data) + + # Find a list of empty rows + empty_rows = get_empty(data) + if len(empty_rows) > 0: + empty_rows.sort(reverse=True) + + # find a list of empty columns + empty_cols = get_empty(list(map(list, zip(*data)))) + if len(empty_cols) > 0: + empty_cols.sort(reverse=True) + + # Now that we have a list of galaxies, let's find the empty rows and cols + for row in empty_rows: + data = duplicate_row(data, row) + + for col in empty_cols: + data = duplicate_col(data, col) + + # Finally, let's work out the distance sum + total = get_distance_sum_expanded(galaxies, empty_rows, empty_cols, 1000000) + return total diff --git a/solutions/2023/pughmds/python/day12/__init__.py b/solutions/2023/pughmds/python/day12/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day12/__main__.py b/solutions/2023/pughmds/python/day12/__main__.py new file mode 100644 index 0000000..c8e0540 --- /dev/null +++ b/solutions/2023/pughmds/python/day12/__main__.py @@ -0,0 +1,164 @@ +import re +from itertools import product +from itertools import combinations +from functools import lru_cache +from functools import cache +import random + +EXPECTED_TEST_ANSWER_PART1 = [6, 21] +EXPECTED_TEST_ANSWER_PART2 = [6, 525152] + + +@lru_cache(maxsize=None) +def find_unequal_combinations(question_indices, num_hashes, input_string): + possible_results = [] + input_string = list(input_string) + possible_swap_indices = combinations(question_indices, num_hashes) + for swap_group in possible_swap_indices: + temp_list = list(input_string) + for index in swap_group: + temp_list[index] = "#" + possible_results.append("".join(temp_list)) + return possible_results + + +def generate_combinations_with_hashes(input_string, num_hashes): + # Find all indices of '?' characters in the input string + question_indices = [index for index, char in enumerate(input_string) if char == "?"] + question_count = len(question_indices) + + if num_hashes == question_count: + return [input_string.replace("?", "#")] + + elif num_hashes > question_count: + return [] + + else: + possible_results = find_unequal_combinations( + tuple(question_indices), num_hashes, input_string + ) + + return [result.replace("?", ".") for result in possible_results] + + +@lru_cache(maxsize=None) +def extract_exact_groups(input_string): + # Define a regular expression pattern to match groups of consecutive '#' + pattern = re.compile(r"#+") + + # Use findall to extract all matches of the pattern in the input string + groups = pattern.findall(input_string) + + return groups + + +def get_pattern_from_result(result): + return [len(x) for x in result] + + +def check_row(row): + total = 0 + if "?" not in row[0]: + # This will be a simple check to see if making the pattern is possible + result = extract_exact_groups(row[0]) + pattern = get_pattern_from_result(result) + if pattern == row[1]: + total += 1 + else: + # Now we have to take into consideration the ? values... + # '???.###' + # How many ways could this match the pattern? + num_to_find = sum(row[1]) - row[0].count("#") + result = generate_combinations_with_hashes(row[0], num_to_find) + + # remove any non-matching results + for test in result: + groups = extract_exact_groups(test) + group_size = get_pattern_from_result(groups) + if group_size == row[1]: + total += 1 + return total + + +def parse_lines(data, unfold_count=1): + rows = [] + for line in data: + record, pattern = line.strip().split(" ") + pattern = pattern.split(",") + pattern = [int(a) for a in pattern] + if unfold_count > 1: + newstring = '?'.join([record] * unfold_count) + rows.append((newstring, pattern * unfold_count)) + return rows + +@cache +def solve_recursively(input, groups): + """ + We need a way to go through the more complex strings and + solve it without actually storing anything other than if it works + or not. Therefore, we can go through the string, left to right, + recursivly checking to see if it matches the pattern + """ + result = 0 + + if not groups: + if "#" in input: + return 0 + else: + return 1 + if not input: + if not groups: + return 1 + else: + return 0 + + if input[0] in ".?": + result += solve_recursively(input[1:], groups) + if input[0] in "#?": + if ( + groups[0] <= len(input) + and "." not in input[: groups[0]] + and (groups[0] == len(input) or input[groups[0]] != "#") + ): + # If we have a series of # characters at the start, we can test a match + result += solve_recursively(input[groups[0] + 1 :], groups[1:]) + + return result + + +def run(data): + """ + Manually go through and find the answer + """ + rows = parse_lines(data) + + total = 0 + + """for row in rows: + total += check_row(row)""" + + for row in rows: + # Let's try recursion! (always a good idea with Python...) + value = solve_recursively(row[0], row[1]) + total += value + + return total + + +def run_p2(data): + """ + Once again, we have a solution that would blow up my old + computer if we tried it with the extra inputs. Therefore, + we need to do this more efficiently. + """ + total = 0 + rows = parse_lines(data, 5) + + for row in rows: + # Let's try recursion! (always a good idea with Python...) + #print(row) + value = solve_recursively(row[0], tuple(row[1])) + #print(value) + total += value + + return total diff --git a/solutions/2023/pughmds/python/day13/__init__.py b/solutions/2023/pughmds/python/day13/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day13/__main__.py b/solutions/2023/pughmds/python/day13/__main__.py new file mode 100644 index 0000000..2168220 --- /dev/null +++ b/solutions/2023/pughmds/python/day13/__main__.py @@ -0,0 +1,177 @@ +from collections import Counter + +EXPECTED_TEST_ANSWER_PART1 = [405, 900, 400, 500] +EXPECTED_TEST_ANSWER_PART2 = [400, 400, 6, 11] + + +def find_symmetry_line(data): + """ + UNUSED + + Finds repeated elements in a list of strings. Worked as an initial + experiment, but found it might be too cumbersome in the long run. + Have left for reference, but didn't use in the final solution... + """ + counter = Counter(data) + duplicates_with_indices = {} + + for idx, item in enumerate(data): + if counter[item] > 1: + if item not in duplicates_with_indices: + duplicates_with_indices[item] = [idx] + else: + duplicates_with_indices[item].append(idx) + + return duplicates_with_indices + + +def split_shapes(data): + """ + UNUSED + + First I visually split the input into groups of 2D string arrays + But found that this would be limiting in the long run. Have left for + reference, but didn't use in the final solution... + """ + result = [] + current_subarray = [] + + for element in data: + element = element.strip() + if element: # Check if the element is non-empty + current_subarray.append(element) + elif current_subarray: # Check if the current subarray is not empty + result.append(current_subarray) + current_subarray = [] + + if current_subarray: + result.append(current_subarray) + + return result + + +def convert_shape_to_binary(shape): + """ + Converts each line of a shape into a binary representation + so it makes this problem simply dealing with symmetry in + a list of numbers instead of a 2D string. + """ + bin_shape = [] + for row in shape: + row = row.strip().replace(".", "0").replace("#", "1") + bin_shape.append(int(row, 2)) + + return bin_shape + + +def find_repeating_indices(lst, smudge=False): + """ + Find where there are two elements of the list that are the same. + It may (or may not) be a mirror line! + """ + repeating_indices = [] + + for i in range(1, len(lst)): + num1 = lst[i] + num2 = lst[i - 1] + if num1 == num2: + repeating_indices.append((i - 1, i)) + elif smudge: + # Let's also check if numbers are one-off their neighbours? + comparison_result = check_binary_similarity(num1, num2) + if comparison_result: + repeating_indices.append((i - 1, i)) + return repeating_indices + + +def check_binary_similarity(x, y): + """ + This function compares (bitwise) two numbers + and checks to see if they are one bit-flip off + of each other. If they are, then return true + as this could be a smudge. + """ + result = x ^ y + if bin(result).count("1") == 1: + return True + return False + + +def check_symmetry(shape, index, smudge=False): + """ + Check to see if a list is symmetrical around the given index + """ + + # First, split the list around the symmetry + a = shape[: index[1]] + b = shape[index[1] :] + + # Find the shorter pattern, and match the longer one + min_length = min(len(a), len(b)) + a = a[-min_length:] + b = b[:min_length] + + if a == b[::-1] and not smudge: + # Already a mirror, no need to do anything further + return len(shape[: index[1]]) + elif smudge: + # Find the differences between the two lists + diff = list(set(a) ^ set(b[::-1])) + if len(diff) == 2: + # We're only going to act if there's a matching pair + comparison_result = check_binary_similarity(diff[0], diff[1]) + if comparison_result: + return len(shape[: index[1]]) + else: + return -1 + else: + return -1 + return -1 + + +def count_score(repeats, multiplier, bin_shape, smudge=False): + """ + Totals up the score to feed to AoC. 100* horiz, 1* vertical + """ + total = 0 + for index in repeats: + result = check_symmetry(bin_shape, index, smudge) + if result > 0: + total += result * multiplier + return total + + +def handle_shape(shape, multiplier, smudge=False): + """ + Steps to determine and count LOS for a shape + """ + bin_shape1 = convert_shape_to_binary(shape) + repeats = find_repeating_indices(bin_shape1, smudge) + return count_score(repeats, multiplier, bin_shape1, smudge) + + +def run(data): + """ + Lines of symmetry + """ + # First, we need to find any row or column that has a neighbour that matches. + shapes = split_shapes(data) + total = 0 + for shape in shapes: + # The original shape + total += handle_shape(shape, 100) + total += handle_shape(["".join(chars) for chars in zip(*shape)], 1) + return total + + +def run_p2(data): + """ + Now we have smudges to worry about... + """ + shapes = split_shapes(data) + total = 0 + for shape in shapes: + # The original shape + total += handle_shape(shape, 100, True) + total += handle_shape(["".join(chars) for chars in zip(*shape)], 1, True) + return total diff --git a/solutions/2023/pughmds/python/day14/__init__.py b/solutions/2023/pughmds/python/day14/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day14/__main__.py b/solutions/2023/pughmds/python/day14/__main__.py new file mode 100644 index 0000000..817866a --- /dev/null +++ b/solutions/2023/pughmds/python/day14/__main__.py @@ -0,0 +1,118 @@ +import math + +EXPECTED_TEST_ANSWER_PART1 = [114] +EXPECTED_TEST_ANSWER_PART2 = [2] + +from math import factorial +from fractions import Fraction + + +class sequence: + """ + Adapted and cleaned up version of this code: + https://codereview.stackexchange.com/questions/277964/calculating-the-nth-term-of-a-sequence-python-3-9-5 + """ + + def __init__(self, *values, sequence=True): + self.sequence = sequence + self.originalValues = values + self.values = values + self.calc = [] + self.generate_terms() + + def determine_pattern(self, temp_values, difference): + pattern = False + iter_count = 1 + while not pattern: + difference_length = len(temp_values) - 1 + for n in range(difference_length): + difference.append( + Fraction(temp_values[n + 1]) - Fraction(temp_values[n]) + ) + + # checks if all values in 'pattern' are equal (if so, then the pattern is found) + pattern = [difference[0]] * difference_length == difference + + # didn't find a pattern with n^x, lets raise the iterCount and try with n^x+1 + if not pattern: + temp_values = difference + difference = [] + iter_count += 1 + return pattern, difference, iter_count + + def generate_terms(self): + difference = [] + temp_values = self.values + + while [temp_values[0]] * len(temp_values) != temp_values: + pattern, difference, iter_count = self.determine_pattern( + temp_values, difference + ) + + # this is essentially difference[0] / factorial(iterCount) + coefficient_of_n = Fraction(difference[0], factorial(iter_count)) + + # adds the found pattern to self.calc so it can be used in calculations later on + self.calc.append([coefficient_of_n, iter_count]) + + # makes a list of the nth term of the found pattern and... + pattern_found = [ + coefficient_of_n * (n**iter_count) + for n in range(1, len(self.values) + 1) + ] + + temp_values = [] + difference = [] + + # ...takes that away from the original values + for n in range(len(self.values)): + temp_values.append( + Fraction(self.values[n]) - Fraction(pattern_found[n]) + ) + + self.values = temp_values + + self.values = list(self.originalValues) + + if temp_values[0] != 0: + # takes that value away from the list and adds it to the nth term + self.calc.append([temp_values[0], 0]) + + def calculate(self, n): + """ + Calculates the nth value of the sequence of numbers provided. + nth_term_data[0] = a (coefficient of n) + nth_term_data[1] = b (power of n) + data is presented like: an^b + """ + + if not isinstance(n, int): + raise ValueError("nthTerm.calculate(n) only accepts integer values of 'n'.") + + value_of_n = 0 + for nth_term_data in self.calc: + coefficient, power = nth_term_data + if power == 0: + value_of_n += coefficient + else: + value_of_n += nth_term_data[0] * (n ** nth_term_data[1]) + + return int(value_of_n) if value_of_n.denominator == 1 else value_of_n + + +def run(data): + total = 0 + for line in data: + numbers = [int(num) for num in line.split()] + result = sequence(*numbers) + total += result.calculate(len(numbers) + 1) + return total + + +def run_p2(data): + total = 0 + for line in data: + numbers = [int(num) for num in line.split()] + result = sequence(*numbers) + total += result.calculate(0) + return total diff --git a/solutions/2023/pughmds/python/day14/test.py b/solutions/2023/pughmds/python/day14/test.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day15/__init__.py b/solutions/2023/pughmds/python/day15/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/solutions/2023/pughmds/python/day15/__main__.py b/solutions/2023/pughmds/python/day15/__main__.py new file mode 100644 index 0000000..58124ba --- /dev/null +++ b/solutions/2023/pughmds/python/day15/__main__.py @@ -0,0 +1,79 @@ +from functools import lru_cache + +EXPECTED_TEST_ANSWER_PART1 = [1320] +EXPECTED_TEST_ANSWER_PART2 = [145] + + +@lru_cache(maxsize=None) +def hash(instruction): + """ + Determine the ASCII code for the current character of the string. + Increase the current value by the ASCII code you just determined. + Set the current value to itself multiplied by 17. + Set the current value to the remainder of dividing itself by 256. + """ + current_value = 0 + for char in instruction: + current_value = ((current_value + ord(char)) * 17) % 256 + return current_value + + +def handle_instruction(instr, boxes): + """ + A bit untidy, but sorts through the instructions and either stores, + removes, or updates the boxes as needed. + """ + label, focal = instr.split("=") if "=" in instr else instr.split("-") + focal = int(focal) if focal else 0 + box = hash(label) + + if box not in boxes: + if "=" in instr: + boxes[box] = [{"label": label, "focal": focal}] + return boxes + + if "=" in instr: + # Update existing item or add new item + for item in boxes[box]: + if item["label"] == label: + item["focal"] = focal + return boxes + else: + boxes[box].append({"label": label, "focal": focal}) + else: + # Remove item with matching label + boxes[box] = [item for item in boxes[box] if item["label"] != label] + + return boxes + + +def score_focal_positions(boxes): + """ + Go through each box and score it as follows: + box number * Box Position * Focal Score + """ + total = 0 + for key in boxes: + if len(boxes[key]) == 0: + continue + else: + for idx, item in enumerate(boxes[key]): + total += (key + 1) * (idx + 1) * item["focal"] + return total + + +def run(data): + instructions = data[0].split(",") + total = 0 + for instruction in instructions: + total += hash(instruction) + return total + + +def run_p2(data): + instructions = data[0].split(",") + boxes = {} + for instruction in instructions: + boxes = handle_instruction(instruction, boxes) + + return score_focal_positions(boxes) diff --git a/solutions/2023/pughmds/python/shared/file.py b/solutions/2023/pughmds/python/shared/file.py index 612e8d9..679522e 100644 --- a/solutions/2023/pughmds/python/shared/file.py +++ b/solutions/2023/pughmds/python/shared/file.py @@ -1,4 +1,7 @@ def open_into_list(filelocation): + print("---------------------------------") + print(f"--> Opening file: {filelocation}") + print("---------------------------------") with open(filelocation) as file: lines = [line.replace('\n', ' ') for line in file] return lines diff --git a/solutions/2023/pughmds/timings.csv b/solutions/2023/pughmds/timings.csv index 89675b7..9bffe8a 100644 --- a/solutions/2023/pughmds/timings.csv +++ b/solutions/2023/pughmds/timings.csv @@ -17,3 +17,13 @@ day, part, python, go, bash, javascript, ruby, c++, rust 8, 2, 1.053, , ,, ,, 9, 1, 3.686, , ,, ,, 9, 2, 3.656, , ,, ,, +10,1, , ,, ,,, +10,2, , ,, ,,, +11,1, 1.009, , ,, ,, +11,2, 1.343, , ,, ,, +12,1, , ,, ,,, +12,2, , ,, ,,, +13,1, , ,, ,,, +13,2, , ,, ,,, +14,1, 0.995, ,, ,,, +14,2, , ,, ,,, \ No newline at end of file