diff --git a/2023/10/go.mod b/2023/10/go.mod new file mode 100644 index 0000000..456c609 --- /dev/null +++ b/2023/10/go.mod @@ -0,0 +1,3 @@ +module git.tristans.cloud/tristan/aoc/2023/10 + +go 1.21.4 diff --git a/2023/10/input.txt b/2023/10/input.txt new file mode 100644 index 0000000..dcf31c6 --- /dev/null +++ b/2023/10/input.txt @@ -0,0 +1,140 @@ +F-7JF-F-F|-J.FL|.L-L7.L-L-J.7F-FJ-F7F.F7J-F.J.7.FF7L-7F7|7FFF7FF7FF7.L7J-77FF-7-|-|7.7.J7J7F--J7..FL-F.JFJ.-7F-F7F77-L--F.FF77-7FFLJ-.F|J.F7 +|F-J||L-.J7.|..F7.LL7J.-L|.LL-J|J-|JJF7J.FF-7.F.-L7JL|.7.L|-|77F.||-7-|J|FJ7L|JLL7JLF7-F---7JLJ7-F-J|.FFJL||L|7L|-FJ7...77LJ-7FFLJ||.LJ|7F|7 +FF-77-7L7FF77F--J77|.||FLF7-|.|L-FJ|||JFLFJL7-F.FL|.LLJ|.|J.L-FJF77-7.L--JJ|.F--F-F7-J---7J.-7|L-7.||JF-7JF7JL7JJ.|-J7.-JJ|JFF|.L|J|F|FL|F-7 +F7-J|FJ.---|JJ7L.FFL7FF7FL-7L|7-LJ7F7JF|FJ-LL7-|7LL-JLLJ.LFL-F|7F|-F--.LJJ|FL7-FLJ|FF.|.F|-FFJ-FF7L-7FLJL-LL--JJ7.77|7.|.L7LFL-7J.LJJLJ7L7J| +||FJ7F7FL7L7.LJJ.L-.|77L7|||7L-J|JL-J--JL77.||LJ|.|7-77|.LLL.LJLJLF7.|F.L|F-7.F||F-LJ--77|.FJ..LJ-J-J77-|-||.L|.L7LL|.F7-J|7F7|J|7F-|-F|7LLL +F77.-FJJLJF|7||.FLL7..--L|-7JLJ7FJ|-|7FJFF|7L7|L|7F|F|F7-..|77.7.F-J.LJ7FF7-F7F777L|F77.F7.||LJ.||.|FFL-JF-L7.|J-F.F7-L||.|FJF|FJ7L7|LF|J7-| +L|-L.J|.|LLL--LF7.L|J7JF-7F|FF|FJ.L7L--LL.LLL7F-FJLJFJLL.F7L-F-J7JJFF|LFF7F7||||F7.FF7F7||-F7JF--F7-JJFLF7--7-J7.|7FJ.|.|-||7FLJLL7J|-LL7F-J +F|.|.L|7-|F|JF7|.FL|-|FLL--L---|7-F.L..|F7J.LJLF|L|LF-JL7.FFJ|J|F--F-7-FJ|||||||||F7||||||7|L-7.F7L|7.|L|J.|.L-F|L-7-7-FL-LL-JJ|FLL-77JL|77J +LJFLLFJ7JLL77|J|.7-|JFJ|.7|-F|FJ7J.|F-L-7.L77L7-7F-F|J7.F77-7|-7-.|L--FL7||||||||||||LJ|||7|F-J-|LFF7-LFLJJ-7.LFJJ.LL|||7F|||F--7.LJLL7FLJ|7 +|-J7.JJ.77L|-L.77.L|7|.L-7L7F7-|7-FJF||.|7.-J.LLJJ.LJ77.|J|JF7JLFJ7|7.F-JLJLJLJLJ|||L7FJ|L7|L--7LFFJL7J|F||L|FFJ.|FJJLFL7JLLLJJL7F|.F||7-|LF +JJ-LJJ.FJ7FL.L.L-J7.JFJ|||F-JFF7F7.7|F77J7-|77LJ.LFJ||FFJ.|J-|FF7-JJF7L--------7FJ|L7||7|FJ|F-7|F7L7FJ.FF-J-7F|7F7J7.F--77.L|J-FL7-7-LF7.-7| +|.F-|--F7L|7..7FJ.L7--F7-LF77L|LJ|-|7|||L|FF-|F7--LF7F7|7.|JJLFJ|.|..F-7F-----7|L7|FJ|L-J|FJL7LJ||FJ|-F7L|FFF77JJ|||-F7.L-7J|.77.F.L.|L---|J +7-FJLJL-J-J-F7J7-F.-J.JL7JF777L-7|.F7|L--77|-|-J.F7|LJ|-7-F-FJL7|FF7-L7|L----7|L7LJL7|F--J|F-JF7|LJFJFJL7F7-|L7.F|L|-J|F--77.JJ..|-L.7F|.||| +|||..FLJL7J||LL-JF-7|77|.FF-7-LFJL7|||F--J7F7JFLFJ||F-J7-F7|F7L|L-JL7.||JF---JL7L7F-J|L-7-||F-J|L-7|L|F-J||J|FJ-LL..|FJ|F--F777FF|.FF7-|F7F| +L|L|-F7|F|-J7--7FJL7L--77.|FJ.|L7FJ|LJL7JJ|LF777L7LJL7F7FJL7|L7L-7F-JFJL7L---7FJFJL--JF7|FJ||F-J7FJL7||F7|L-JL77JL--JF7.-JLF|7-F|J7FL7FLJL-J +FJ..FL-7JJ-L|.|L.FF7-FFFJFJL7FF7||.L--7L7.7F|L7F7L7F-J||L7FJL7L7FJL-7L-7L7F--JL7|F7F7FJ||L7|||FF7L-7||||||F---J-7L.J7LJ7FJ|LJJ|J|L|.FL7J|LJL +FJ--J.L|LF7.|-FFF-J|7F---JF-JFJ||L7|F7|FJ-F7L7|||FJL7FJ|FJ|F7|FJL7F7|F-JFJL---7LJ|||LJ-LJFJLJ|FJL7-|||LJLJL---77|L7J|JJLF.J.||L-7.FJ-FJLLJ7| +LJF7FL-LFF-7JFF7L-7L7L---7|F7L7LJFJFJ||L7FJL7|LJLJF-J|FJL7|||||F7||LJL-7|FLF7FJF-JLJF77F-JF-7|L-7L7|LJF---7F--J7JFFF--7JL|7|L--FJJ|-FF-FJLF| +F|FL|--.FL7|LF||F7|FJF7F-JLJL-JF-J7L7||FJL-7|L---7|LFJL7FJ||LJ||LJL7F-7|L7FJ|L7L--7FJL7L--JFJL7FJFJ|F-JF7LLJF7F7.FFJF-J77F-7F|.|J7F7J|L7JJF| +F||7L-JFJ-7-F-JLJLJL7||L--7F--7|F-7FJLJL7.FJL7F--J|FJF-J|FJL-7||F--JL7|L7|L7|FJF--J|F-JF7F-JF7||FJFJ|.FJL7F7||||-LL7|F7.F|FJ7F7JL-F7--FLF-FJ +FLJ7JLF-LFJ|L------7|||F-7LJF-JLJFJ|F--7L7L7FJL--7LJFJF7|L-7FJ||L7|F7||FJ|-||L7|F7FJL7FJ|L--J|LJ|-L7L-JF-J|||LJL-7FJLJL7FJ|-FJ|.FLF.|-7JL7J7 +J-L|||F7LLFF-------J||||FJF7L-7F-JFJL7LL7L-J|F7F7L-7L7|||F-JL7||FJFJ||||FJFJL-J|||L7FJL7|F7JFJF7|F7L7F7L7FJLJF---J|F---J|FJ-L7|F7.|..L7LF77| +FF.7J-F77LFJF7F--7F7LJ||L7||-FJL-7L--JF7|F--J||||F-JFJ||||FF7|LJL7L7LJ||L7|F--7||L-JL--J||L7L-J|||||||L-J|F--JF7|FJL7F7FJL77FJLJL777.LLF|L|| +JJ-JFF||7-L7|LJF7LJL-7|L7|||FJF7FJ7F7FJLJL7F7||||L7FJFJ|||FJLJF7FJJL-7||FJLJF-JLJF------J|FJF7FJ|||FJL7F7|L-7FJL7|F-J||L7FJFJF-7FJ7.F.|FJFF| +||-LF-||F7JLJLFJL-7F7|L7|||LJFJLJF7||L--7FJ||||||FJL7|FJ||L-7FJLJF-7FJLJL7F7L7F--J|F7JF7F|L7||L7|||L7FJ|||F-J|F-J||F7|L-JL-JFJFJL7|FJFFJ|FLJ +--F-|||||L7LF7L--7|||L7LJ||F-JF7-||||F7L|L7|LJLJLJF-J|L7||.FJL---JFJL7F-7|||FJ|F7F7|L7||FJFJ||L||||FJL7|||L-7||7FJ|||L7F7F7FJFL--JJJF----JJL +.|JJLF|LJFJFJL7F7||||LL-7|||F-J|FJLJ|||FJFJL-----7|F7L7|||FJF-----JLFJ|FJ||||FJ|||||FJ||L7|FJ|FJ|||L7FJ|||F-J|L7|FJ|L7||LJLJF--7JL7FLJJJLFFJ +FL-J--L-7|-L-7LJLJ||L7F7||||L-7||F--J|||FJF7F7F--J|||J||||L7L-7F7F-7L-JL7|||||FJLJ||L7||FJ|L7||FJ||FJL-JLJL-7L7||L7|FJ|L7F--JF7|JF--7|7F-|.| +FJJL-LF-J|JF7L---7|L7LJLJ|||F7||||F-7||||FJ|||L--7LJ|FJLJL-JF-J|||FJF7F-JLJ||||F--J|FJ|||FJFJLJL7||L-7F7F7F-JFJ||FJ|L7|FJ|F--JLJ.7J|L-L7F-LF +.LF77||F7L-JL-7F-JL7|F--7|||||||||L7||LJ||FJ|L7F7L-7|L7F7F7FJF-J||L7|||F--7LJLJL-7FJL-JLJ||L---7||L7F||LJLJF7L7LJL7L7||L-JL-7-F7F77F|LL-LJ|| +FF77F-J||F-7F7|L--7|LJF-J||||||||L7|||F-J||7L7|||F-JL-J|LJLJ7L-7|L7|||LJF7L----7FJL---7F-JF--7FJLJFJFJL-7F7|L7L7F-JFJ||F-7F7L-JL-77LJ7J7.FJ7 +LLJ-L-7|LJ-LJ||F7FJL--JF7LJLJLJ||FJ|LJL-7||F-J|||L--7F-JJF7F7F7|L7|||L7FJL----7||F7F7FJL-7L-7|L7F-JFJF--J||L7L7||F7L7LJL7LJ|F--7FJ7.L|-F|7LJ +LJFJJLLJF----JLJLJF7F-7||F7F7F7LJL7|F-7FJ||L7FJ||FF-J|7F7|||||||FJ||L7|L---7F-J|LJ|||L--7L7FJL7||F7L7|F7L||FJFJ|LJL7|F-7L-7|L-7LJF77.F7LLFFJ +||J7F|.LL7F7F-7F-7|LJ-LJLJLJ|||F-7LJ|7LJFJ|FJ|FJL7L-7|FJ||||||LJL7||FJL7F7FJL-7|F-J|L7F7|FJL-7||LJ|FJ|||FJ||FJFJF--J|L7L--JL--JF7||7-||.F-77 +|L7JLFJ-FJ|LJFJ|FJ|F----7F--J|LJ-L-7|F7-L7||FJL7FJF7|||FJ|||||F--J||L7FJ|||F--J||F7L7|||||7F7||L7FJL7||||FJ|L-JFJF7.|FJF7F7F7F7|LJL7L|L-JFJ7 +.-J--.|.L7|F-JFJ|FJL---7LJF--JLF---JLJL--J||L7FJL7|||||L7||||||F7FJ|FJ|FJ|||F7FJ|||FJ|||||FJ|||FJL-7|||LJL-JF-7L-JL7|L-JLJ||||||F--JFJF--JJ| +F|.FJ7..|LJL7FJFJ|F----JF7L7F--JF7F-----7FJ|.|L7FJ|||LJFJ||||||||L7||FJL7LJ||||FJ|||FJ|||||FJ|LJF7FJ|||F--7FJFJF7F7LJF7F-7LJLJLJL-7FJFJLLJLJ +-|-|.F7L-F-7LJ7L7||F7F-7|L7|L7F7|LJF-7F7|L7L7L-JL7||L-7|FJLJLJ|||FJLJL7FJF7LJ||L-JLJ|FJ|||||FJF-JLJFJ||L-7|L7L-JLJL7FJ||.L--7F-7F-J|FJ7||7L| +L7---J|-FL7L----J|||||L|L7LJJLJLJF7L7||LJFL7L7F--J|L7FJ|L--7F-J||L-7F-J|FJ|F-JL---7FJL7||LJ|L7L7F7FJFJL7FJL7L--7F7FLJFLJF7F7LJFJ|F7|L-7JLFF7 +LJ-|JFF.F-L----7FJ||||FJFJF--7F7FJL-J|L-7F-JFJ|F-7L7|L7|F7FJL7FJL7FJL7FJL7LJF7F-7FJ|F7||L-7L-JFJ||L7L--JL7JL---J||F7.F--JLJL-7L7||||F-JJ-7.| +FJ-JJ|..|J..FF-J|FJ|LJL-J|L-7LJLJF-7-L--JL--JLLJFJFJ|FJLJ||F7||F-JL-7||F-JF7|||J|L7||LJ|F7|F--JFJ|FJF--7FJF7F7F-JLJL7L--7F---JJ|LJLJL77JL|-7 +|.|L7.F||.FFFJF-JL-JF7F7F7F7L7F7FJ7L------7LF--7L7|-|L--7|||LJ|L7F7FJ||L-7||||L7L7|||F-J|LJL-7FJLLJLL-7|L-JLJLJF-7F-JF7FJL----7L--7F7L7-7L-J +F|J7L7JLL.|-L7L7F7F-JLJLJLJL-J|LJF--7F---7L7L-7L-J|FJF7FJ||L7FJ7||LJ|LJF-J|||L7L7||LJ|F7L-7F-JL-7FF7F-JL-----7FJFJL--JLJF--7F-JF--J|L-J|F7|7 +.|||-J|F|FJFFJFJ||L-----7F----JF7L-7|L--7L-JJFJF-7|L7||L7|L7||F-JL--7LFJF7|||FJFJLJF-J|L7FJL-7F7|FJ|L7F7F7F-7|L7|F7F-7F7L-7|L-7L--7|7JFL|LFF +FFF---7-||LFL7|||||F7F--JL-7F--JL--JL---JF7JFJFJFJ|FJ|L-J|FJLJL7F7F-JFJFJ||||L7L--7L--J|LJJF-J|LJL7L-J|||||FJL-JLJLJ|LJL7FJ|F7L7F7|L7.|J|.F- +-JL7--L7L-.FLLJFJ|FJLJF----JL---------7F7|L7L7|7L7||FJF7FJL--7-LJLJ7FJFJFJ|||||F-7L-----7F7L--JF-7L---JLJ|||F7-F7F7F-7F7LJFJ|L7LJ|L-J-J|J|.. +|LLLJ7-J|F|7-F7L7LJF--J.F77F7F--------J|||FJ-||F7||LJJ||L----JF-----JFJFJFJ||FJL7L7F7F7FJ||F7F-JFJF7F7F7LLJLJL-JLJLJFJ|L7JL7|7|F-JJLFL7FF.LL +7-|.-77-|-LF-JL-JF-J-F--JL-JLJF-7F----7||||F7|||LJ|F--JL--7JF7L----7FJJL7L7|||F7|FJ|LJLJ7||||L-7|FJLJLJL7F----7F7F7FJFJFJF7|L7|L7|LF|7L-L.|J +.-7F||L7L-FL-7F7FJF--JF-7F7F7FJFJ|F---J|LJLJ||||F7LJF-7F-7L7|L-----JL7F-JFJ||||||L7L-7LF7|LJL--JLJF7F7F7LJF7F7LJLJ|L-JFJ|||L-J|FJ7-FJ-|-|7-- +LF7F|||L-F||.LJLJJ|F-7L7LJLJ||FJFJL---7|F---JLJ|||F7|FJL7L7||F-7F-7F-JL-7L7LJLJ||FJF-JFJLJF7F7F7F-JLJLJL--JLJL---7|F--J|FJL--7|L7|F-7FLLFJJ7 +.F7FL7-7-JL|7LLF--JL7L-JFF-7LJL-JF--7FJ|L-----7LJ||LJL7FJ7||||FJ|FJL-7F7|FJFF--J|L7L-7|F7FJLJLJ||F----7F-------7FJ||F7F7L7F--JL-J-JF|7FJ|LL7 +-LJJLL7|LJFL7-|L----JF---JFJ.F7F-JF7LJF|F-----JJFJL-7FJL-7||||L7|L7F7LJ|LJF-JF7FJ-L7FJLJLJF7F--J|L---7|L-----7|LJFJLJLJL-JL-7||||7.JJFFFJ77L +FJ|.JFFLJ|LJ|7-F----7L---7L--JLJF-JL---JL--7F7F7L-7FJL-7FJLJ||FJ|FJ||F7L-7|F-J||F7FJL---7FJLJF--JF---JL-----7L--7L-7F-7F7F-7L7F7-|7FJ-FJ-JL. +|.L7JFF|-7FL||FL7F-7L-7F7L------J|F----7F--J||||F7LJF7FJL-7FJ|L7|L7|||L--JLJJFJ||LJF-7F-JL--7|F-7L---------7L7F-JFFJL7LJLJ|L-J|L7|LJ.L|7L7J| +L7-7-F-FF-JF-J-7LJFJF7LJL----7F7F7L---7|L---JLJLJL--J||F--JL-JJLJFJ||L--7F7LFJFJ|F7L7||F---7LJL7L---------7L7|L--7L--JF7F7-F--JFJ7.LJ-L|.LF7 +FL.J.7|JL.JJ7LLJJJL-JL------7||LJL--7FJL----7F7F-----J|L-7|F7-F--JFJL7F7LJL7|FJFJ||FJLJL--7|.F7L-7F7F-7F-7L-JL---JF7F7|LJL-JF--JFF77J.7J7|FL +-.F7LLL7|77FL7FL.|F7F7F--7F7|||F---7LJF----7LJ|L----7FJF7L7||FJF-7L-7|||F7FJ|||L7||L-7F-7FJL7||JFJ|LJ|LJJL------7F|||LJF7F7FJF7FFJL-7-7FJ7J| +F77-JJF-LJJ7FL7FF-J|||L-7LJLJ|LJF7JL-7|F---JF7|F----JL7|L7LJ||FJ-|F7|||||LJ7LJF-J||F7|L7LJF7LJ|FJFJF------------JFJ||F-J|||L-JL-JF7FJ7JFF|L7 +F-JLJF|J-|-||F7-L-7LJL-7L-7F7L--J|F--J|L----J||L-----7LJJ|F-J|L-7LJ||LJ|L---7FL-7|||||FJF-JL-7LJFJ.L7F-----7F-7F-JFJ|L-7LJL-7F7F7|||JL-F|L77 +FJ77.-J7.|FLJ7.F7F|F7F7L7|LJL---7|L--7|F----7|L-7F--7L--7|L7FJF7L7FJL-7L7F-7|F--J|LJ||L7|F---JF7|-F-J|F----J|FJL-7L-JF7L---7LJ||LJLJL|.J..L- +|F-JJJ-|-LL.F7F|L-J|LJL7|F7F7F--JL---J|L---7LJF7LJF7L-7FJ|FJL7|L7|L7F-JFJL7||L7F7L-7||LLJL-7F7||L7L--JL-----JL-7-|F-7|L7F-7L-7LJJ-F---7JFJ7J +-F-JJ|-L7.F-7F7L---JFF7|||LJ|L7F-7F7.FJF--7|F-JL--J|F7|L7|L7FLJ.LJL||F-JF7|LJ-LJ|F-JLJJF---J|LJ|FJF-------7F7F-JFJL7|L7|L7|F-JJJFFL7F-JFJJ|| +.|7JFF--L--LFJL------JLJLJF7L-J|FJ|L-JFJF7LJ|F-----J||L-J|FJF----77|||F7|||.F---JL7F--7L-7F7L7FJ|LL7F7F7F7LJLJJFJF-JL-JL7|LJLF7-F-7||JJ7-7-F +.L|L7L||LJ7|L---7F7F7F7F7FJL7F-JL-JF-7L7|L-7|L-----7|L7F7LJJ|F-7FJ-LJLJ||LJFL7F-7FJ|F7L--J||FJL7|F7LJLJLJL-7|F7|FJFF7LF7LJF--J|FJFJ||7JJL|J. +F-JFJJ||.LFJ-F--J|LJ||LJLJF7LJF----J7L-J|F-J|F-----J|FJ||F7F|L7LJ..LJ.F|L7|FFJ|-|L7LJ|F7F7||L7FJ||L-------7L7|LJL--JL-JL-7|F--JL7|7|||L--LJL +FLFJ7.-L--77.L-7FJF7LJF7F-JL--JF-7F----7||F7|L-77F--JL-JLJL7|FJF|-7LJ-FJFJ-FL-JFJFJF7||LJ|||FJL-JL-------7L7LJF----------J|L--7FJL-JL7...L.| +|.|7|7L7LFJFF77LJFJL-7||L------J7LJF---J|||||F-JFJF7F7F7F-7LJL--7-7-J7|FJ.|L|7LL-J|||LJF7LJLJF-7F7F7LF---JFL--JLF7F--7F7F-JF--JL7F--7|7-F.FL +F7FFL-|JFLF-J|F7FJF-7|||F7FF--7F7F7L----JLJLJ|F7|FJLJLJLJLL7F---J.||LFLJJ7LLLJFF---JL7L||F7F7L7LJLJL7|F7F--7F---JLJF7||LJF-JF7F7||F7LJ-7-FFJ +-FJL-7F-7-|F7LJLJFJFJLJLJL7L-7||LJ|F7F7F7F7F7LJLJL7F-----7FJL----7|F-FJ7LJ.|-FLL--7F7L7||||||.L----7LJ|LJF7LJF7F7F7|LJ|F-JF7|LJLJLJL7LJJ-LFJ +|L|J.||7.|LJ|F7F-JLL----7FJF7||L-7||LJLJ|||||F7F--J|F----JL7F--7FJ-J-L7JJ-7..7|.|-||L7LJLJLJ|F7F---JF7|F-JL--JLJ|||L7FJL--JLJF-7F--7L7F|FLLF +-7LFF-7-FJJLLJ||F---7F--JL7||||F7||L---7|||||||L7F7|L7F-7F7|L-7|L-7|FFJFFF-77FF--FJL7L-7F--7|||L----JLJL-------7LJL7LJF7F7F-7L7|L-7L7L7.LJ7| +LFFL|J-7LJ-|||||L--7|L---7LJLJLJLJL----J||||||L7LJLJFJ|FJ||L7FJL7FJ-7LJ-FJ-F|LF7LL--JF7LJF-JLJL----------------JF7-L7FJLJLJFJFJL7FJ7L-J--LJJ +FLF7L.L7|7-LF-LJF--JL----JF-7F---------7LJ||LJFJF-7FJFJL-JL7LJ7.|L7.F77.L7F-J|LJ77LF-JL--JF-7F-7F------7F--7F-7FJL-7|L-7F7FL-JF7LJLJ.|.|7-|7 +77|F-J-LJ-JLJ.|LL7F-7F7F--JF||F-----7F7L7F||F7L7L7|L-JF---7L7-7FL-JFJ|-7L7L|.|J7||-L7F7F-7L7LJFLJF7F--7LJF-J|FJL7F-JL-7LJL----JL-7|J.L----J| +--|F7FF-JJF-.F--7LJ.LJ||F--7LJL7F7F7LJL7L7|LJL7L7||F--JLF7L-JLL|7LFJFJJ|7|-L7J7|F7J-||LJFL7|F----J|L-7L-7|F-JL7FJ|F7F7L----7F-7F7|-7.L|LL.F| +|7|LL7|FL-JJ7L-7|F7FF7LJL-7|F7JLJLJL7F7L-J|F7FJ-|||L-S--JL--7.F-7FJFJJ||F7-LJFLF-7.|LJF-7FJ|L----7L--JF7LJ|F-7LJFJ|||L-7JF7LJJLJLJ.FFFJ.FFFJ +L7LJ.L|7|J|FF-FJLJL-JL--7FJ|||F77F7FJ||F7JLJ||F7LJ|F7F-7F7F7|FJFJL7L-777JLF-||-L7|.FF7L7||FJ7F--7L-7F-JL--JL7L7FJL|||F-JFJL-----7L7-|LF7F7J7 +F7JF7.JJJF77F7L7F7F--7F7|L7LJLJL-J|L-JLJL7FFJLJL-7|||L7LJLJLJL7L--JF7|L-7.||F|.L|L--JL-J|LJF-JF7L--J|F7F7F7FJFLJF-JLJL--JF7F7F--JF7|F-7JF|J| +|7F||F7JF-LFJL-J|||F-J||L-JF7F---7L---7F7L7L7F7F7|||L7L--7F7F7L-7F-JLJ7.|.FL7L-||F7F--7FJF7L--JL7F-7||LJLJLJF---JF-------JLJLJ-F-JL7--L-7|L7 +||L-FJFFJ|LL----JLJL--JL-7FJ||F--JF-77LJL7||LJLJ||LJL|F-7LJ|||F-JL-7JF77FFF.|7.LLJLJF-JL-JL-----J|JLJL------JF7F7L--7F------7F7|F--J7LL7JL7| +LLJ7.FFJFF---------7F7F7FJL7LJL7F7|FJF7F7|L---7J|L--7|L7|F7||LJF---J.||L-J|.F7FLF--7L-----7F-----JF----------JLJL--7LJF-----J||||JF-7-7LFJ-- +.|L77||L-L7F7F7F7F7LJLJLJF7|F--J|LJL-JLJ|L7F-7L7|F--J|FJ||LJL-7|F-7F-J|JJ.F7|L7.L-7L----7.LJF---7-L----------7F7F-7L--JF7F--7|||L-JFJL--|LFJ +.-7F.FL.J.LJ||LJLJL--7F-7|||L7F7|F------JL||FJFJLJF7-LJJLJF---JLJFJ|F-JJ.F|||FJ-F7L----7|F7|L--7|F7F7F7F-----J|LJFJF7F-JLJF-J|||F--JJ.|||.|J +F.FL7FLJ7LF-J|F-7F7F7LJJLJLJLLJ|||F7.F---7|||FJF7FJ|F-7F7FL----7FJF|L77JF7|LJ|JFJL7F---JLJL7F7FJLJLJ||LJF--7F7L-7L7|||F7F-JF7|LJL--777F-LFJ. +FL7|LLJL77L7FJL7LJLJL--7F--7|F7LJLJL7|F--JLJLJL||L7|L7LJL-7F7-FJ|F7|FJF-J|L-7L7|F7||F7F-7F7LJ||F7F-7|L--JF-J||F7|FJ|LJ|LJF7||L7F---J77L--7.| +J-|-J..LJ7JLJ|.L---7F-7LJF7L-JL7F---J||F7F7F7F7||FJ|F|F---J|L7L7||||L7L7FJ|LL7|||LJLJLJ-LJL-7|LJLJFJL--7FJJFJLJ|||L|F-JF7|||||||F7|F7-J7..7. +.F|F|-|-|JJF----7F-J|FJF-JL7F-7|L----JLJLJLJLJ|||L7L-JL-7F7L7L7|||LJFJFJ|F7F7||||F7F-7F7F---JL----JF--7|L--JF-7LJL-JL--JLJLJL-JLJL-7J7LLF-L7 +FJ|-F.F.-7FL-7F7LJF7|L-JF-7LJL|||F---7F-------J|L-JF----J||||FJ|||F-JL|FJ|||||||LJ|L7LJ|L----------JF-JL7F7FJJ|F7F-7F7F7F---7F7F7F-J.-7-7|.J +L-7||F-7LLF.FLJL-7|||F--JFJF7FJL-JF-7|L--7F---7L--7L7F---J|FJL7|||L-7FJ|FJ||||||F-JFJF-JF7F7F7F----7L--7LJLJF7|||L7|||||L--7LJLJ|L7J|||.|-7J +...-JJ.|.FJ-F.F--J|LJ|F-7L-J|L-7F-JFJL7F7LJF7FJF--JFJ|F---JL-7|||L7FJL7||FJ|LJ||L-7L7|F7|||LJLJF7F7L7F7L---7|||||FJLJ||L7F7L---7|FJF77LL|.7. +F7FJJ7.FFLJ7|7L7F7L7-||FJF-7L--J|F-JF7LJL--JLJ.L--7|FJL-7F7F-JLJL7|L-7|LJL-JF-J|F-JFJ||LJ|L--7FJLJL7||L---7LJ|LJ|L-7JLJFJ|L--7FJLJF--77J|-FL +FF-J|J7|.L----|LJ|FJFJ|L-J|L-7F7|L-7||F7|F--7F7-F7|||F--J||L-7F--J|F-JL--7F-J-L||F7L7|L7FJF--J|F---JLJF--7|F7L-7L-7L7F7L-JF-7||7F7|F-J7-J.7J +|J.--FF-JF|J.F7F-JL7L7L7F----J|LJF-J|LJL-JF-J|L-JLJLJ|F7FJL--JL7F7|||F7F-JL7F7FJLJL-JL7|L7L-7FJL7F7F7FJF-JLJL-7L-7L7LJL7F-JFJLJ7|||L7LF.J7|7 +7J77L||7|7FJF|LJF7FJFL7|L---7FJF-JF-JF7F-7|F7L---7F-7|||L-7F--7LJLJL7||L-7FJ||L-7F----J|FJF7LJF7LJLJLJ7L-----7|F-JFL--7LJF7L7F-7|LJFJ-|7||L- +7F-J.||7L7J-FL7FJLJ.F7LJF7F7LJ.L-7|F-J|L7LJ||F7JFJL7LJ||F7LJF7L7F---J||F7||FJ|F7||F7F7FJL7|L-7|L7F7F7F--7F---JLJF77F-7L7FJL-JL7||F7|J-77F7F| +L-L-J--7JLF-|.LJJ||FJ|F-JLJL--7F-J|L-7|FJF7|LJ|FJF7L7FJ||L-7|L-J|F7F7||||||L7|||||||||L7FJL7FJL7LJLJ|L7FJL7F7F7||L7|FJ.LJJF---JLJ|LJJFF--J7| +FLF7JJ.|..7L7-|F7F7L7|L------7|L7FJF-JLJ7|||F7LJFJ|FJL7|L-7|L--7|||||||||||FJ||||LJ|||FJL-7|L7JL---7|FJL--J|LJL-JFJ||F----JF----7|J|.F-J7JLJ +7-LJ7||7F7J.|-FJLJ|FJ|F7F-7F-JL7LJFJF7.F7||LJ|F-JJLJ7FJ|F7||F77|||LJ||LJ||LJFJ||L7FJ||L--7LJFJF7F--JLJF--7-|F-7F7L7|LJF---7L-7F7LJ7F.F7L.FJ| +J.|L-LJLJ7.LL7L--7|L7||LJFJ|F-7L-7L7|L7||||-FJL---7F7L7LJLJ|||FJLJF-JL-7|L7FJFJL-JL7||F7FL-7L7|LJF-7F7|F7L-JL7LJL7LJF-JLF7L--J||-F7JFLJ7FJJ7 +|FJL|.L|LL-.FF7F-J|L||L-7L7LJFJF7L7LJFJ|LJL7L7F7F-J|L7L-7F7||||F-7L7F7J||J||7L7F--7LJLJL-7-L7|L--JLLJLJ||F7F7L--7|F7L---JL-7FFJL-J|FL|.L-7JL +FJ|.F7.L7-|7FJLJF7L-JL--JFJF7L-JL7|F-JFJF--JF||LJF7L7L-7LJ||||LJ7L7|||FJ|FJL77LJF7L7F----JF7||F7F-7F7F7|LJ|||F--JLJ|F7F----JFJF---JJ7|F|||7. +|FJ.J77-7JJFL--7|L--7F--7|L||F7F7||L--JFJJF-7|L-7|L-JF-JF-J||L7F7FJ||LJFJ|F7|F7FJ|J||F7F7FJLJLJ|L7LJ||||F7LJ|L-7F77LJLJF----JFJF-7JL|7FLF..F +|||FLL--|.F--7FJ|-F7LJF7||FJLJLJLJL--7FJF7L7||F-JL-7FJF7L-7||FJ|||FJL7FJJ||LJ||L7|FJLJ||LJF----JFL7FJ||LJL-7|F7LJL-7F--JF7F-7L-JFJLLL-JF77-| +L|F-7LL--FL-7|L-JFJL7FJLJ|L---------7LJL||FJ||L7F7FJL-J|F-JLJ|FJ|||F7|L7FJL7FJ|FJ||F--JL-7L-7F7F--J|FJL-7F7|||L7F--JL7F-J|L7L---JJ..L-7|||L7 +7LF7|J.FJF--JL--7L-7LJF7FJF7F---7|F-JFF7||L7||FJ||L7F--JL--7FJL7|||||L7|L7FJ|FJL7|||F7|F7|F-J||L--7||F--J|LJ||-||F7F7|L-7L7L-7F7F77.7-J-L7-J +J7||J..7.L---7F-JF7|F7|||-||L-7FJFJF-7||||FJ|||FJL7|L7F7F7FJ|F-J||LJ|FJ|FJ|FJ|F-J|||||FJ||L7FJ|F7FJLJ|F-7L7.|L7|LJLJLJF7L7|F7LJLJL7-J-.|7LJ| +|LLL-7.|F----JL--JLJ|LJ|L-JL-7|L-JFJFJ||||L7||||F-J|L||||||||L7FJL7FJL7||FJ|L||F-J||||L7LJFJL7||LJF7FJL7L7L7L-JL7F-7F-JL-J||L7F7F-J||.F-L-F7 +F7|7---FJF---------7|F-JF---7|L--7|FJFJ|||FJLJ|||F7L7LJ||||FJFJ|F-JL7FJ||L7L7||L7FJ||L-JF-JF7||L--J||F-J.L7L--7F|L7|L--7F7LJ|||LJ7FF-7F7J.7J +L|||FJ.L-JF7F------J|L-7L7F-JL---J||FJL||LJF--J|LJL7L-7||LJ|FJF|L7F-JL7LJFJFJ|L7|L7|L--7|F7||||F7F7||L--77L7F7L7L7|L7F7LJL--7LJJJ-77.J-L.7JF +FJ7F-777.FJ|L-7F7F7FJF-JFJL7F7F7F7|||F-JL-7L-7FJF--JF7||L7FJL-7|FJL7F-JF7L7|L|FJ|FJL7F-J||||LJ||LJ|||F7FJF-J|L7L7|L7LJ|F---7L7JJJFJJ7J|7FL-F +|L7JLJJ77L7L--J|||||-L--JLFJ|||||||||L7F-7|F-JL7L7F7|||L7|L7F7|||F-J|F-JL-JL7LJ7|L7FJL7FJ||L7FJL7FJ|LJLJFJF7L7|FJ|FJF7|L--7L7|JFF7.FF-J7J..| +||LJ||JLLFJF-7FJ||||F-----JFJLJ||||||FJL7LJ|F7FJFJ||||L7LJFJ|LJLJ|F7|L7F7F-7L--7|FJL7FJ|FJL7|L7FJL7L7F7|L7||FJLJFJL7|LJF-7|JLJF77|-F-7-L-L7- +|FF-F7-J.L7L7||JLJ||L7F7F-7|F--J|||||L7FJF-J|LJ|L7|||L7L7FL7|JF7JLJ||FJ||L7|F7FJ|L-7LJ-||F-JL7||LFL7LJL-7LJ|L--7L7FJ|F7L7|L-7FJ|J-7FJJ..L-JJ +FJLFFJ.FJ|L-J|L-7FJ|FJ|LJJLJL7F7|||||-||FJF7L-7F-J||L7L7|F-JL-JL--7||L7|L-J||LJFJF7L--7|||F7FJ|L7F-JF7F7L-7L7F-JFJL7|||FJ|F7LJFJJ||L|-L-J7-- +J7LLJ7|-LF---JF7|L7|L-JFF--7FJ|||LJ||FJ|L7|L7FJL-7||FJ|LJL-7F-7F--J||F||F--J|F7L7|L7F7||||||L7|FJ|F7||||F-JFJL7FJF-J||||JLJ|F-JL77F-7.L|FL.| +.7J..-|7JL-7F7|||FJ|F---JF-JL7||L-7LJ|FJFJL7|L7F-J|LJF7F7F-J|7|L7F-J|FJ|L7F7LJL7||FJ|LJ||||L7|||FJ|LJ||||F-JF7||FJF7|||L--7|L7JJ|F7.|.L|J||- +.7-L.|L7-L-LJ||LJL7||F--7L---J||F7L-7|L7L7FJ|FJL-7L--J||LJF7L7|FJ|F7|L-J||||F7FJ|||FJF-J|LJFJ|||L7L-7||||L7FJLJ|L-J|LJ|F7FJL-J-LL7JF-7-||FJ| +LJ--J-F77.FF-JL-7FLJ||F-JF--7FJLJL7FJ|FJFJ|FJL7F-JF--7|L7FJ|FJ|L7||LJF7F-J||||L7LJ|L7|F7L7|L7|||FJF-J||LJL|L7F-JF7FJLFJ|LJJ|FLFJ|.||J|FLFLJ7 +|7|-|JFJF7|L7F7FJF7LLJL7FJF-JL---7|L7|L7L7|L7FJL-7L-7||FJ|FJ|LL7|LJ7FJLJF-J||L7L7FJFJLJL7L7.||||L7L-7|L7F-JFJL7FJ||F7L7L-77L-JL-77FL.|-J|J|7 +FJJF|J|7-FJ7LJ||FJ|F7F7LJFL-7F7F-JL-J|FJ7LJFJ|F-7|F-JLJL7|L7L7F|L--7L--7L-7|L7|FJL7L---7|FJFJ||L7L7FJ|FJL7FJLFJL7|LJL7L--JJ--J.L|-F-JJ..7L-F +|7.LJ.||7L-|.FJ|L7|||||LF---J||L----7LJF7F7L7|L7LJL--7F7|L7L7L7L7F7|7F-JF-JL7||L-7L7F7FJ|L7|FJL-JJ|L7|L-7LJF-JF-JL7F-JF|||-FFJ.F|LL|7LF7J7L| +LJ7||-FLJ-FL-L-JFJLJLJL-JF7F7|L-7F-7L--J||L-JL7|F7F-7LJ||FJJL7L7LJ|L7L-7L--7LJ|F-JL||||FJFJLJF7F--JFJL7FJJFL-7L7LFJL7-L-L|LFFJ|-L7.----F--7| +L--JJFLJ|LF7FJLLL-------7||||L7FJL7L-7F7||F--7|||||7L--JLJ.||L7L-7|FJF-JF--JLFJL--7||||L7L---J||F-7|F7LJ|.JJFJFJFJF-J.FJ.|.FL.L7-|77J-L.JL77 +.F|F7-||J-|-F|J|FLF-----J|||L7||F7L-7||LJLJF-J||||L----7F7F7F7L7FJ||FJF7L--7FJF7F7|||||7L7F---JLJFJLJL---7JLL7L7L7L---7|7|-|JF7L7.|77|L|JFLF +.FJL|FJJ-L|..7FF7.|F-7F7FJ||FJ||||F7||L7F--JF7|LJL7F--7LJLJ|||F|L7LJL7|L7F-JL7|||||LJ||F-JL--7JF7L-7F----JJFLL7|.|F-7FJJ-7-|FLF7FFJLLJ--77-L +-F7-JJ-7.LL-JJF|L-J|FJ|||.LJ|FJ||||LJL-JL--7|LJF--JL7-|F7F7LJ|FJFJF--J|FJ|F7J|||||L-7LJL7F-7FJFJL--JL--7|LF7-FJ|FJL7LJ7--|77F-|7L-7J.|-FL-7J +LJ|.J.LF--JF-FFJF7FJ|FJ||F--JL7|||L-7F-----JL-7L7F-7L7||LJ|F7||FJ-|F-7|L7LJL7LJ|||F-J7J-||FJ|LL7F--7F--J7-LL.|FJ|F-JJL|..JFF77|LL-L-F|LJJFJJ +.L|-L-F|7.||J|L7|LJFJL7LJL7F7FJ|||F7||F-7F-7F7|.||FJFJ|L-7||LJ|L7FJ|FJ|FJF-7L77||LJ|L-7-LJL7L7L||F-JL7F7.F|7.LJ.|L7JLFF----|.L77.7.F|J-L-J77 +FF--J.|F777F.FJLJF|L7FJF--J||L7LJ||LJLJLLJ-|||L7||L7|L|F-J|L7FJFJ|FJL7||FJ7L-J7LJ|-L-L7-LLJL7|-LJL7F7LJL--7-F-JFL-J||LL.|77L-L|J.F7-7..L7L77 +L|F7JFLJLJ|7-J-7L77-||LL-7FJL7L7-|L7JJ.F---J||FJ||J||F|L-7|FJL-JFJ|F7LJ|L---------77L777.|.LLJ|L|-LJL7F7F-J-J7-L7LJFF-LJ-J-JJ.FF.|77LF7FL-|. +FF7F7F7L7LL77J7|7.L-LJ.F-J|.L|FJ-L-JJ7FL-7F7|||FJ|FJ|FJF-J|L7J.LL7||L--JF7F7F7F---JJ-LLJJ7F-J.|.77|F7||||||7|---JF7-J7-|L|J.|LJ.7|.L.FF...|7 +L-JJFL-.L-7LJ7L-77J.|.FL-7|-FLJ.L..|777.L||||LJ|FJ|FJ|FJ-LL-J|7LLLJL-7F7|||||LJJLJ.|FF7|7F|JL||.|FFJLJ|LJFF||-FFL7LJJJL|J.|.7.-J-77|.|LL.7-7 +LJJF|-LL7LJ-JJ7||J.FF|7F|LJ-J|LJJF--7||-LLJ||.FJL7LJLLJ.|L|FLJ77|7||.LJ||||||||.L.7.LJL7FL.|.J77LFJF-7|JFFJL77-|7.F7L7.LJ.|-7-7.F.LF-J7J.||. +L7.L|7|LFJ..LF-|7J77FJL-7|J7L|F|.|JJL||FL|.LJFL7FJJ||7-|7.L-7|FF.J-F|-FJ|||LJ-J7..J7L|.J777F.FF-.L-J|LJLLL|.|---7FJ--J.L|.J7|--7L7J|7F||F-L- +7.L|L--.|LFJF|F|JJ|FJLJ.LL7F.-LJ--J.LL7JFLF7|J-||J.7L-7||F-JF-7.F7.JJLL7|||JJ-|J.FLF7J.L7-LF--J|FL..F|77.|.FJL7FF|JF-|7F|-|7|.L7J.F|-|LF|... +F-|||.J-F-F--.|JL|L|FJJ7|.|.J.L7.FJ-7||JF|J-LLFLJ|.|.LLL77.F7F|7LLFJ--LLJLJ7|FL.7J|.|-7.L7FJFFLL7LF|-7L--.-|.L-L--7-L7--J7L-JF-L--J|L7L-|-|7 +J-JJ77.FLJ.77|LF7|.|J7.L7.|7L7.F.FL7FFLFJ7LF7.FJL-.|J-J-L-FJ|LLJ||J.7||L|JJ.FJJFJ7L7||.-J|7-FJJL|FL.LJL|-L-|F|J|J.L7FJ.|7F-.|F7L|.JJ.J7J.LL7 +|.L|L-JJ-F|.|.|LFJ-J-F-JFFL7|.-|F-7F-F-7-JF-|7JLFJ7LJJ..J.|JJ||.LJFJL-JJJFLF7J.FLF.7-J-J.L|F7|.-.F|J7LF|.|||FF-|7||LL-7|LJJ.F|JF-7|-L-J.|.L- +FL7F-|7J.|J-|LJ-J.LL7||-7J|F-|JF-|-F7|LJ.|L7L|7J|.FFJF-|-|||---JJ.7.L-L|.L--F-7FFJF|-|||7FFJLJ-|F.||7-|.F|F|J|.J7FL-.-J7L|.|7|F7-77|LJ.LF.L| +-.LJ-L|--JL-FJJ.LFJL-J--JJFL-JL|LJ.L--J.F--JLL|.--JJ.7JLLFLJ...|-F.-.FJJFJJJL-L-J-L77LLL--J|..LLF.F-7.L-J.JJJL7LLLJ.JJJF-J7---LJ-L|7LL|-J7-| diff --git a/2023/10/part1/cmd/main.go b/2023/10/part1/cmd/main.go new file mode 100644 index 0000000..cd19de6 --- /dev/null +++ b/2023/10/part1/cmd/main.go @@ -0,0 +1,16 @@ + +package main + +import ( + "bufio" + "os" + "git.tristans.cloud/tristan/aoc/2023/10/part1/lib" +) + +func main() { + scanner := bufio.NewScanner(os.Stdin); + pipeMap := part1.ReadMap(scanner) + size := part1.LoopSize(pipeMap) + println(size / 2) +} + diff --git a/2023/10/part1/lib/lib.go b/2023/10/part1/lib/lib.go new file mode 100644 index 0000000..92ecb01 --- /dev/null +++ b/2023/10/part1/lib/lib.go @@ -0,0 +1,89 @@ + +package part1 + +import ( + "bufio" + "strings" +) + +var Tiles = map[byte][2][2]int{ + '|': {{0,-1}, {0,1}}, + '-': {{-1,0}, {1,0}}, + 'L': {{0,-1}, {1,0}}, + 'J': {{0,-1}, {-1,0}}, + '7': {{0,1}, {-1,0}}, + 'F': {{0,1}, {1,0}}, +} + +func ReadMap(scanner *bufio.Scanner) (res []string) { + for scanner.Scan() { + res = append(res, scanner.Text()) + } + return +} + +func FindStart(pipeMap []string) (x,y int) { + for y = range pipeMap { + if x = strings.IndexRune(pipeMap[y], 'S'); x > -1 { + return + } + } + return -1, -1 +} + +func FindFirst(pipeMap []string, sx,sy int) (int, int, int) { + for y := sy-1; y <= sy+1;y++ { + if y < 0 || y >= len(pipeMap) { + continue + } + for x := sx-1; x <= sx+1 ;x++ { + if x < 0 || x >= len(pipeMap[y]) { + continue + } + side, ok := GetSide(pipeMap, sx,sy, x,y) + if ok { + return side,x,y + } + } + } + return -1, -1, -1 +} + +func GetSide(pipeMap []string, px,py, x,y int) ( int, bool ) { + tile := pipeMap[y][x] + dirs, ok := Tiles[tile] + if !ok { + return -1, false + } + for i,dir := range dirs { + if x + dir[0] == px && y + dir[1] == py { + return i, true + } + } + return -1, false +} + + +func FindNext(pipeMap []string, side, x,y int) (int,int,int) { + tile := pipeMap[y][x] + + dir := Tiles[tile][1-side] + + nx,ny := x+dir[0], y+dir[1] + + nside, _ := GetSide(pipeMap, x,y, nx,ny) + return nside,nx,ny +} + +func LoopSize(pipeMap []string) int { + x,y := FindStart(pipeMap) + side,x,y := FindFirst(pipeMap, x,y) + count := 1 + for pipeMap[y][x] != 'S' { + count++ + side,x,y = FindNext(pipeMap, side, x,y) + } + return count + +} + diff --git a/2023/10/part1/lib/lib_test.go b/2023/10/part1/lib/lib_test.go new file mode 100644 index 0000000..80e132f --- /dev/null +++ b/2023/10/part1/lib/lib_test.go @@ -0,0 +1,131 @@ + +package part1 + +import ( + "testing" + "reflect" + "bufio" + "strings" +) + +const basicInput = + ".....\n" + + ".S-7.\n" + + ".|.|.\n" + + ".L-J.\n" + + ".....\n" + +var basicMap = []string{ + ".....", + ".S-7.", + ".|.|.", + ".L-J.", + ".....", +} + +const complexInput = + "7-F7-\n" + + ".FJ|7\n" + + "SJLL7\n" + + "|F--J\n" + + "LJ.LJ\n" + +var complexMap = []string{ + "7-F7-", + ".FJ|7", + "SJLL7", + "|F--J", + "LJ.LJ", +} + +func TestReadMap(t *testing.T) { + reader := bufio.NewScanner(strings.NewReader(basicInput)); + pipes := ReadMap(reader) + equal(t, pipes, basicMap) +} + +func TestReadMapComplex(t *testing.T) { + reader := bufio.NewScanner(strings.NewReader(complexInput)); + pipes := ReadMap(reader) + equal(t, pipes, complexMap) +} + +func TestFindStart(t *testing.T) { + x,y := FindStart(basicMap) + equal(t, x, 1) + equal(t, y, 1) +} + +func TestFindStartComplex(t *testing.T) { + x,y := FindStart(complexMap) + equal(t, x, 0) + equal(t, y, 2) +} + +func TestFindFirstBasic(t *testing.T) { + x,y := 1,1 + side,newX,newY := FindFirst(basicMap, x,y) + equal(t, side, 0) + equal(t, newX, 2) + equal(t, newY, 1) +} + +func TestFindFirstComplex(t *testing.T) { + x,y := 0, 2 + side,newX,newY := FindFirst(complexMap, x,y) + equal(t, side, 1) + equal(t, newX, 1) + equal(t, newY, 2) +} + +func TestGetSide(t *testing.T) { + side,ok := GetSide(basicMap, 1,1, 2,1) + equal(t, side, 0) + equal(t, ok, true) +} + +func TestFindNext(t *testing.T) { + cx,cy := 2,1 + + s,nx,ny := FindNext(basicMap, 0, cx,cy) + equal(t, nx, 3) + equal(t, ny, 1) + + s,nx,ny = FindNext(basicMap, s, nx,ny) + equal(t, nx, 3) + equal(t, ny, 2) + + s,nx,ny = FindNext(basicMap, s, nx,ny) + equal(t, nx, 3) + equal(t, ny, 3) + + s,nx,ny = FindNext(basicMap, s, nx,ny) + equal(t, nx, 2) + equal(t, ny, 3) + + s,nx,ny = FindNext(basicMap, s, nx,ny) + equal(t, nx, 1) + equal(t, ny, 3) + + s,nx,ny = FindNext(basicMap, s, nx,ny) + equal(t, nx, 1) + equal(t, ny, 2) + + s,nx,ny = FindNext(basicMap, s, nx,ny) + equal(t, nx, 1) + equal(t, ny, 1) +} + +func TestLoopSize(t *testing.T) { + size := LoopSize(basicMap) + equal(t, size, 8) + size = LoopSize(complexMap) + equal(t, size, 16) +} + +func equal(t *testing.T, actual any, target any) { + if !reflect.DeepEqual(actual, target) { + t.Errorf("expected %v, got %v", target, actual) + } +} + diff --git a/2023/10/part2/cmd/main.go b/2023/10/part2/cmd/main.go new file mode 100644 index 0000000..47a2070 --- /dev/null +++ b/2023/10/part2/cmd/main.go @@ -0,0 +1,18 @@ + +package main + +import ( + "git.tristans.cloud/tristan/aoc/2023/10/part1/lib" + "git.tristans.cloud/tristan/aoc/2023/10/part2/lib" + "bufio" + "os" +) + +func main () { + scanner := bufio.NewScanner(os.Stdin); + + pipeMap := part1.ReadMap(scanner) + inside := part2.GetVolume(pipeMap) + println(inside) +} + diff --git a/2023/10/part2/lib/lib.go b/2023/10/part2/lib/lib.go new file mode 100644 index 0000000..18446b2 --- /dev/null +++ b/2023/10/part2/lib/lib.go @@ -0,0 +1,84 @@ + +package part2 + +import ( + "git.tristans.cloud/tristan/aoc/2023/10/part1/lib" + "fmt" +) + +type Loop map[[2]int]bool + +func GetLoop(pipeMap []string) ( loop Loop ) { + x,y := part1.FindStart(pipeMap) + loop = Loop{{x,y}: true} + side,x,y := part1.FindFirst(pipeMap, x,y) + for pipeMap[y][x] != 'S' { + loop[[2]int{x,y}] = true + side,x,y = part1.FindNext(pipeMap, side, x,y) + } + return +} + +func GetShapeOfS(pipeMap []string) () { + return +} + +const CLEAR = "\u001b[0;0m"; +const OUT_OF_LOOP = CLEAR; +const ON_LOOP = "\u001b[0;31m"; +const IN_LOOP = "\u001b[0;33m"; + +func GetVolume(pipeMap []string) int { + loop := GetLoop(pipeMap) + count := 0 + for y,line := range pipeMap { + inLoop := false + onDownEdge := false + onUpEdge := false + for x,c := range line { + _,onLoop := loop[[2]int{x,y}] + + if onLoop { + switch c { + case '|': + inLoop = !inLoop + case 'L': + onDownEdge = true + case 'F': + onUpEdge = true + case '7': + if onDownEdge { + onDownEdge = false + inLoop = !inLoop + } else if onUpEdge { + onUpEdge = false + } + case 'J': + if onUpEdge { + onUpEdge = false + inLoop = !inLoop + } else if onDownEdge { + onDownEdge = false + } + + } + + } + color := OUT_OF_LOOP + if onLoop { + color = ON_LOOP + } + if inLoop && !onLoop { + count++ + color = IN_LOOP + } + if c == 'S' { + color = "\u001b[41;30m" + } + fmt.Printf("%v%c", color, c) + } + println(CLEAR) + } + return count +} + diff --git a/2023/10/part2/lib/lib_test.go b/2023/10/part2/lib/lib_test.go new file mode 100644 index 0000000..e81d3a5 --- /dev/null +++ b/2023/10/part2/lib/lib_test.go @@ -0,0 +1,88 @@ + +package part2 + +import ( + "testing" + "reflect" +) + +var inputMap = []string{ + "...........", + ".S-------7.", + ".|F-----7|.", + ".||.....||.", + ".||.....||.", + ".|L-7.F-J|.", + ".|..|.|..|.", + ".L--J.L--J.", + "...........", +} + +var complexMap = []string{ + "FF7FSF7F7F7F7F7F---7", + "L|LJ||||||||||||F--J", + "FL-7LJLJ||||||LJL-77", + "F--JF--7||LJLJ7F7FJ-", + "L---JF-JLJ.||-FJLJJ7", + "|F|F-JF---7F7-L7L|7|", + "|FFJF7L7F-JF7|JL---7", + "7-L-JL7||F7|L7F-7F7|", + "L.L7LFJ|||||FJL7||LJ", + "L7JLJL-JLJLJL--JLJ.L", +} + +var anotherMap = []string{ + ".F----7F7F7F7F-7....", + ".|F--7||||||||FJ....", + ".||.FJ||||||||L7....", + "FJL7L7LJLJ||LJ.L-7..", + "L--J.L7...LJS7F-7L7.", + "....F-J..F7FJ|L7L7L7", + "....L7.F7||L7|.L7L7|", + ".....|FJLJ|FJ|F7|.LJ", + "....FJL-7.||.||||...", + "....L---J.LJ.LJLJ...", +} + +var basicMap = []string{ + ".....", + ".S-7.", + ".|.|.", + ".L-J.", + ".....", +} + +func TestGetLoop(t *testing.T) { + loop := GetLoop(basicMap) + equal(t, loop, Loop{ + {1,1}:true, + {2,1}:true, + {3,1}:true, + {3,2}:true, + {3,3}:true, + {2,3}:true, + {1,3}:true, + {1,2}:true, + }) +} + +func TestGetVolume(t *testing.T) { + v := GetVolume(inputMap) + equal(t, v, 4) +} + +func TestGetVolumeComplex(t *testing.T) { + v := GetVolume(complexMap) + equal(t, v, 10) +} + +func TestGetVolumeAgain(t *testing.T) { + v := GetVolume(anotherMap) + equal(t, v, 8) +} + +func equal(t *testing.T, actual any, target any) { + if !reflect.DeepEqual(actual, target) { + t.Errorf("expected %v, got %v", target, actual) + } +} diff --git a/go.work b/go.work index 80b99d8..239e83c 100644 --- a/go.work +++ b/go.work @@ -1,6 +1,7 @@ go 1.21.4 use ( + 2023/10 2023/09 2023/08 )