haskell: 2023 10

This commit is contained in:
Maciej Jur 2023-12-12 19:38:48 +01:00
parent 810f898bf5
commit 8a504e5a89
Signed by: kamov
GPG key ID: 191CBFF5F72ECAFD
5 changed files with 263 additions and 33 deletions

140
2023/.inputs/10 Normal file
View file

@ -0,0 +1,140 @@
F-.FJ7|777FF|-J7-|7.L.7-77--.FJ7F|J.FLJJ7.77F-7--L7-.F-FFL-JJ-JFF-|F|FF7.FF-F.JJ-LF.|.77|7F--L7FL--FFJFF-77F-7FFF-7LJ7F7---L-7-F7J.F|.7F7-77
7F-LJFJF-J-FL.F---7..F.|.|..F7LLFJ|-77LJ|-|-L7L7LLJFJ|FFLJ-L.|.FL7L7J|7J.L77LF|.LL-7J-7--7-J-L7--|-LJ.-LJL-7J|LFF.L7F-F.|.||||FJ|||-|.L|JLL|
--7|-JJF-|JLJ7||||-|JJFF|7F7||JL--F--J--F-JJ-FLF7FLLJL-JLL.LJ7.|-LJ|.L7FF.|J7|J.7L|||7.|.|.FFF||7|LJ-L.F7-F7-L7-JF7F77JFFJLFLF|7F7|JJ.-L-JJ|
.LL|--77.|-|7FL-FJ||LF7FFFJ||L-7|.|.LJJ.|J7.|L-J7FL|7LFF7.F|7LFJ7..77-LFF-F7|JLF--L|7-FF--LJJ.L-77FJ.F|FF7-|F7FF-L7L-|.|J|-7J.L7LJJFL7|J-|.J
77.|.LL|7JFLF777LF|7--7FLL7LJF-J-77L-|FLJ-J--JFFL7JF7--7LFFJ7.L.|.FJ-.|.|7|-J.-JJ|FL7LLJJJ||-L.LF|7FF----JF77-LJ..LF7|.LF--JLJ.|.J7|-J7..J7J
L|J|L7F|.LF7||LF-7JF7L.|-L|F7|J|7L-L-7J||-|.|L7JF|FLJ|F|7LJ-J7.-L.7.FF--.FJ7F.LJJ-J..FF-F-FF7FL.L||-|JFLL-J|L-7|.L|.L7F|.LLF7J|-J|FJ.L--L--7
L|J|7|77..LJ7LJ.LJ..FJF7-FLJ|L77L.||.L77J.F.-F77-7-.J7-F7-J-F-7|J7JFL7J.FJ|--|||.F7FF|||F7J.F--7FF7.|-|FF|LJ|-F|-----L-7-L-FL-L7J|...-7.LL.F
F7-F7||||FF.FJF|LJ-LLJ|JFFF7L7L7-FJ|L.F77.|7||L-77|FLL-J|L77|F7|LF-JLL--F.L-J|L---7JJ-F7F7F77.FFFJ|-|--J-F7L|-||LFJ|.J.-...L.|FL-L-F.J77.|-F
FJ-LF|JJ-L-JJF7|J|7.LFF7FFJL-JFJF|.|LF7||F-7FJF-JF-7J.|L7.|F77L|-J.LF..||-F-F7|L|7|JJFLFJLJL7F7FJFJ7L|L.FJ|||FFJ.F.F-J-FL--|--7F7JF-7|-7.|L|
L|-FJJ|FFJFL-FF--JLL7LF--JF-7FJF7F-7|||F7|FJL7|F7|FJ7FF7.JL7|L.L-F|-.F-77LF7LF|-FFJ.FLFL--7FJ||L7L-7FF|FF7F-7F7-F|-L|7.F-|-L--J7J.FLL|-L7J-F
FF.FJFJ|7-|J7FL-7.LLFJL7F7|FJL7||L7L7|||LJ|F-JLJLJ|-7FF7-FFFJF-JF7J|7L7L-7LLJ|L7||.F7LJJ.FJL-JL7|F-J-JF7||L7LJL7JJ7.-F7|||.LLLLF-L7J..7.FJ.F
-.-JFJ-L7F|JJ|7.|..FJ7LLJLJL-7LJL7|FJ||L-7LJF-----J.LFJ|7F7LL7|F||F7F7L7FJ77|LJ7F7F|J7|FFL7F-7FJ||F|LF||||7L7F-J|L|-L.|F-F|F|-LL.FJ.J7.F|-J|
LFL--7-F7-JJLF-.L---L7FFF---7L7F-J|L-J|F7L-7L---7F7F7L7L-JL7|FF-JLJ||L-J|JF7-|.F7F7JJF7FF7LJFJL7|L-7F-JLJ|F7|L-777||LL||-FJ|L-7-L-..J-FJ.-J|
F|77--7-7|LLFJLF7.F7JF-7L--7L7||7FJF-7||L7J|F---J||||FJF---J7.L---7||F-7L-JL7F7||||F7||FJL-7L-7||F-JL-7F-J|||F-JF-77|FFJL|LJ.LL-LJ7.LFJ.7JL|
FJ|L-L--||-F|L-|LFLL-L7|F7LL7LJL7L7L7LJL7|FJL-7F7|LJ|L7|F-7J7F7F7FJLJL7|F-7FJ|LJ||||LJ|L7F-JF-J||L7F--JL7FJLJL7FJFJFF|JL7.--7.F7J7.7J||7||L|
|FJ.FL|-F.F-J7.|F7-FF7||||||L-7FJFJFJF7||||F--J||L7FJFJ||FJ-FJ||LJF---JLJ.||LL-7||||F-J||L-7|F7LJFJL--7FJL-7F-JL7L7F7J|-777.|F-7.7-7-LF-FL7|
FL7-|.|||F7LL7..FF-FJLJ||L7F--JL7L7|J|L7|LJ|F-7|L-JL7L7LJL7FJFJL-7L7-F--7-LJJF-J||||L7F7L7FJLJL-7L7|F7||F7FJ|F7-L7LJL-77LJ777|.L||FJ|LJ7|F--
..L.L-FF77.FF7-L7|.L--7|L7|L--7FJ7||FJFJL7FJ|FJL-7F7L7|F--J|FJF7FJFJFJF-JF7F7L-7LJ|L7||L-J|F7.F7|FJFJLJLJ||FJ||F7|F---J7F|F7JJ-F77|.JFJ-JJ.|
.-|F|7.LF-LJL77|F7F7F7||FJ|F--JL-7|||FJF-J|J||F7-LJ|FJ|L--7||||||FJ.|FJF7||||F7L-7|FJ|L7F-J||FJLJL7L--7F-J|L-JLJLJL7F7.FF7||7FF7F-L7FFLFJ|F-
F|L|LFF7L7J|F-77|||LJLJ||FJL----7LJLJL7L-7L-J|||F7FJ|FJF--J|L7|||L-7||.|LJ|||||F-J||FJFJ|F7||L---7|F-7||F7|F-------J|L7FJLJ|7-|-J|-F-7JL-|.J
FF.-J.7||..F|FJFJ|L---7|||F-7F--JF7F7FJF7L-7FJ|||||FJL7|.F7L7||||F-J|L7L7FJ|LJ|L-7||L7L7LJLJ|F-7.||L7LJ|||||LF-7F7F7|FJL7F-J|F|JJ|7L||LJFLJ.
||F|F-|J-F.FJL7|FJF7F-JLJLJFJL--7|LJ||FJ|JFJ|FJLJ|||F-JL-J|F|||||L-7L7|FJ|JL-7|F7|||FJFJF---JL7|FJ|-L7FJ|LJL7|FJ||||||F7|L7LFJ||7L|7777FJJF|
|F7FJ|LJ||LL-7LJ|FJ|L----7FJF7LFJL7FLJL7|FJFJL--7LJLJF----JFJ||LJF-JL||L7|F7FJLJLJ|||FJFJF7F7FJ|L7L7FJL7L7F-J|L7|LJLJ||||FJ-||LJ-LLJL|7|LF||
LJ.-7L..---|F|F7|L7L7F--7||FJ|FJF7|F7F7||L7L--7FJF--7L-7F7.L7||F-JF7FJ|FJ|||L----7||||FJJ||||L7|7|FJL-7L-JL7FJFJ|F---J|LJ|.|F7FF.FJ-FF77.|J|
.L7.J7F|J..F7LJ|L7L7|L-7LJ||FJ|FJ|||LJLJL-JF--JL-J-FJF-J||F-J|||LFJ||FJL7|||F7F7FJ|||||F7|LJ|FJL-J|F--JF---J|FJ7||F7F7|F-JF7JF77-FFJFJ|..L-|
7L-7.FF7.J-|L-7L7|L|L7FJF7LJL7|L7LJL---7F-7L-7F-7F7L7L-7||L-7LJL7L7||L7FJ||LJLJLJFJ|LJLJ||F-JL---7|L7F-JF---J|F7|||||LJL--JL-J|J|||F|FJ|--L|
7-L7F|7|.|.L-7|FJL7L7|L-JL--7|L7L-7|F-7||FJF-J|FJ|L7|F-J||F7L--7L7||L7||FJL---7F7L7L-7F-J||F-7-F7||FJ|F7|F---J||||||L7F-------J.FJJ7|J-|-7.|
.77|7JL-FF7F7||L-7|FJ|F-----J|FJF-JFJFJLJL7|F-JL7L7||L-7||||JF7L7LJ|FJLJ|F7F-7LJL7|F-JL-7|||FJFJLJ|L7||||L-7F7|||LJL-JL-7F---7JJ-LLLL7-|-J7.
7|FLJF7.FJLJLJ|F7||L7|L---7F7||FJF7L7|F7F-J||F7FJFJ||F-J||||FJL-JF-JL-7FJ||L7|-F7|||F---J|||L7L7F-JFJLJLJF-J||||L-7F---7LJF--J7F7.LL.J7JL7L7
-|J.LF-FL--7F7LJLJL-JL7|F7LJ||||FJL7||||L7FJLJ||FJFJ|L-7||||L--7FJFF7F|L7||FJ|FJLJLJ|F-7FJ||FJJ|L-7L----7|F7|LJ|LFJL--7L--JF7F7-F7..-LJ7-|7|
L|--FJ.LFLFJ|L-7F7F7F7L-J|F-J||||F-J||||FJ|F7FJ|L7L-JF-J|LJ|F7FJL7FJ|FJFJ||L7|L--7F7LJFJL7||L-7L-7|F--7FJLJ||F7L-JF7F-JF7F-JLJ|J||7.L|-L--J.
FJ-LLJ-FJ.L-JF-J||||||F-7|L-7||||||FJ|||L7|||L7L7L-7FJF7L-7LJLJF7||FJL7L7||FJL--7LJL7FJ|FJLJF-JF-J||F-JL-7FJ||L---JLJLFJ||F---J|||F7FJ---J.F
LL7LJ.FF-7JF7L--J||||||FJL--JLJLJL7|FJ||FJ||L7L7|F7||FJ|F7L--7FJLJ||F7|FJ||L---7|F7-||F7L-7FJF7L7FJ|L7F--J|FJL-7F7F7F7L7LJL7F7F7|LJ|7|L77F-J
F|L-.FF7|..|L7F--J|||LJL-7F------7|||FJ||FJL7L7||||||L7||L7F7||F7FJ||||L7|L7F7FJ||L7|LJL7FJL7||FJL7|FJL--7LJF--J|LJLJL7|F--J||||L7FJ|FF777J|
.L7.FFJ|F7FL7|L---JLJ7F-7LJF----7|LJ|L7|||.||FJ||||||-||L7||||||||FJ||L7||FJ|||FJL7|L-7FJL7FJ|||F-J||F7F7|F-JFF-JF----J||-F7|||L-JL777||F7.F
|-JFLL7|||F7||F7FF7F-7L7|F7L---7|L-7|FJ||L7FJ|FJ||LJ|FJL7|LJ|||||||FJL7||||FJ||L7FJ|F7||F7||FJ||L7FJ||||LJ|F--JF-J7F7F7||FJ||LJF---J7F||||-|
|.LF--JLJLJLJ||L7||L7|J|LJL----JL--JLJFJL7||FJ|FJL-7|L-7LJ-FJ|||||||FFJ|||||FJ|L|L7||||||LJ||FJ|-||FJ||L7FJ|F-7L---JLJ|||L7||F7L-7JJF7||||.7
F7.L--------7|L7||L-JL7L7F--7F--7F---7L7FJLJL7|L7F7|L-7L-7FJFJLJLJ|L7|FJ||||L7L7|FJ||LJ|L-7||L7|FJ|L-JL-JL-JL7|F7F-7F7LJL-JLJ|L-7L7.|LJLJL-7
||F7F7F7JF--JL-J|L---7L7LJ|FJL7FJ|F--JFJ|F7F7LJJ|||L-7|F7||FJ7F---JFJLJFJ|||FJFJ||FJL-7|F7|LJFJ|L7L-7-F------JLJ|L7|||F--7F-7L7|L-J-L7F----J
|LJLJLJL-JF----7L---7|FJF-7L7FJL-JL--7L7LJLJ|F--J||F7|LJ|||L-7L-7F7L-7-L7||||FJJ||L7F7|LJ|L-7L-JFJF7|FJF---7F7F7L-J|||L-7LJ-L7L--7FF7|L-7.L|
L--7F7F-7FJF--7L-7F7LJL7L7|FLJF7F----JJ|F--7|L7F7||||L-7LJL7FJF7LJL7FJF-J|LJ|L7FJL7|||L7|L7FJF--JFJ||L7|F--J|LJL--7LJ|F7L--7FJF-7L-JLJF-J7FJ
L|L||||FJ|FJF7L-7|||F-7L-JL---J|L-----7|L77LJ-|||||||F7L--7||FJL---JL7L-7L7FJFJL-7||||FJF-JL7L-7FJFJ|FJ|L---JF---7L-7|||F--JL7|FJF----JF-7J7
F--J|||L7||FJL7FJLJLJFJF-7F7F7FJ|F7F--JL7L---7LJ|||||||F7FJLJL-7F7F-7L-7L7|L-JF7FJ||||L7L-7FJF-J|JL-JL-J-F7F7L--7|F-JLJLJF--7LJL7L-----JFJL|
|F-7|||LLJLJF7|L-----JFJ-LJLJ||F-J|L---7L7F--JF-J|LJ||LJ|L-7F--J|||FJF-JFJ|FF-JLJFJLJL7L-7|L7L7FJF-7F-7F7|LJL---J|L-7F---JF-JF--JF7F-7F7L7L|
LJFJ|||-JF--JLJF7F-7F7|F7F---JLJF7L-7F7|-LJF-7|F7L-7LJLFJF7||F-7|||L7L-7|FJFJF--7|7F7F|F-JL7||||JL7|L7LJ|L------7L--J|F7F7|F7L-7FJ|L7||L7|F7
|7L-JLJ7F|F7F7FJ||FJ||||LJF7F7F7||F7LJ|L7F7|FJLJL-7L--7|FJLJLJFJ|||-L7FJLJJL-JF-JL-JL7|L--7LJFJ|F-JL7|F7L---7F7FJF7F-J||||LJL7LLJ7|FJLJFLJ7J
L|JJFJ.FFJ|||||FJ|L7|LJ|F7|LJLJ||||L-7L7LJLJL-7F7FJF--J||F----JFJ||F7LJF------JF-7F7FJL7F7L7FJFJL--7|LJ|F7F7LJ|L7|LJF7|LJL--7L-7F-J|JFFF77LJ
L-.J7J-FJFJLJ|||FJ.LJF7LJLJFF7FJ|LJF7|-L--7F7FJ||L7L-7FLJL7F--7L7|LJL7JL---7F-7|FJ|||F7LJL-JL7|LF7FJL--J|LJL-7|FJ|F-J|L7FF7J|F7|L-7L---J|7|F
.LL7|..L7|JLLLJ||F7F-J|.F7F-JLJFJF-J||F7F7||||-|L-JF7L7F-7||F-JFJL--7|F----JL7||L7||LJL-----7||FJLJF7F--JF7F-JLJ-|L7FL-JFJL7LJ||J.L7F--7||LL
7-7-77.L||7.FF-J||LJF7L7||L---7|FJF7LJ|LJ|||||FJF-7||FJL7||||F7L---7|||F7F7F7|LJ|LJL7F-7F7F-JLJL7F7|||F--JLJF7F-7|FJF---JF7L7-LJ7-LLJ7.LJ77J
|LLJ.|7JLJJF-L--JL--JL7LJL---7LJL-JL7F|F-J||LJL7|FJ||L--J||||||F7F7||||||||||L-7F7F7|L7||||F-7F-J|||LJL7F---JLJFJ||FJF---JL-JF7F7J|-L7F|.L--
L-|.-77.FLF--7.F7F-7F7L7F---7|F-7F--JFJL-7LJF7FJ|L7||F7F-JLJ||||LJ||||||LJ||L7FJ|LJLJFJLJ||L7||F-J|L7F7LJF7F--7L-JLJFJF------JLJ|FFF-JJ|F...
F-J77FF.|.L-7|FJ|L7|||FJ|F--J|L7|L---JF7FJ|FJ|L-J7LJ|||L7F7FLJ||F-J|||LJF-J|FJ||L7F7FJF--J|FJ|LJF7L-J|L--J|L-7|F-7F-J||F--------JF7JJ-FL7.FJ
7-|L-JLJLFF-JLJFJFJLJ|L-JL7F7L-JL-----J||F-JFJ-F7F7FJ|L7LJL7F7LJ|F7||L7-L7FJL7L7FJ||L7L---JL7L--J|F-7L-7F7L-7||L7|L7F-JL---------J|J77|-77-|
L-..LLL|FLL-7F7L7L--7L7F7FJ|L7F7F----7FJLJF7L-7||||L-J7L7F7LJL-7||LJL7L7FJL7J|FJL7|L7L7F7F--JF--7|L7L7FJ||F7LJL7|L7LJF-7F7F-7F-7F7|77JLJ|F-|
FL.|77LJJLLLLJL7L-7JL7LJLJFJFJ|LJF7F-JL---JL--J|LJ|F---7|||F--7||L7F-JFJL7FJFJL-7|L7L-J||L---JF-J|-L7LJFJLJL7F7LJFJF-J7|||L7||L|||L77JJFJ777
.|F|LJ7|FF.F-7-L-7L--JF7F-J-L-J7FJLJFF7|F7F7F7F|F-J|F--JLJ|L7.|||FJL--JF7|L7L7F-J|FJF--JL7F7F7L-7|F-JF7|F---J|L-7L7L--7|||FJLJLLJL-J-.F|F|F-
FJ-.7|FFJJ.L7L7F7L7F7FJ||F-7F--7L----JL7||||||FJL7-|L----7L7L7LJ||F----JLJFJFJL-7|L7L---7LJ|||FFJ|L-7|LJL--7FJF-J-|F--J|||L77LFJJF7L|--J-FJ7
F|7F.FLJ|F-LL7||L-J|||FJ|L7|L-7|F---7F7LJLJLJ|L-7L-JF7F7FJJL7|F7LJL----7F7L7L-7FJ|FJJF--JF7LJL7L7|F7LJJF7F7LJFJ7F7LJF7JLJL7L7-LFFJL77FL--JLF
JLF--JJ7L7LF-J|L---JLJL-JFJL--JLJF-7LJ|F-7F--JF7|F-7||||L7-FJLJL-7-FF--J|L7L-7LJ-LJF7L-7FJL7F7L-JLJ|-F-JLJL--JF7|L--JL---7L-JF77L-7L7-.F-.LF
|J.|.LF|LF-L-7||F7F7JF-7|L---7F-7L7|F7LJ-LJF-7|LJL7LJLJL-J.|F-7F-JF-JF-7L7L7FJF----JL-7LJJLLJL7F--7L7L7F---7F-JLJF---7F-7L7-|||F--JFJJF-|7..
JJF-J-|.7LF-7|L-JLJL7L7|F7F-7LJJL7|LJL7F7F7|FJL7F-JF-7F-7F7||FJL-7L-7||L7|FJ|FJF-----7|F7-F7|FJ|F-JFJ7||F--J|F---JF-7LJLL-JF7||L7F-JJF77|J-L
.7|L|-J7L-L7LJF----7|FJ||||FJF7F7LJF--J|||LJL--JL--JFJ|FJ||LJ|F7FJJFJ|F-J||FJL7L7F---JLJL-JL7L-J|F7|F7LJL7F7|L---7|FJF7F7F7||||F||F7JLL|.|.J
L-J.-J||LJ|L7FJF---J|L7LJLJL-JLJ|F-JF7||LJF7F---7F-7L-JL-JL-7||LJJJL7|L-7|LJJLL7||F7F7F--7F7L---J||LJL7F7LJLJF7F7LJL7|||||||LJ|FJLJ|J|-L7J7|
.||7FF-7JFFFJ|.L---7|FJF-7F-7F-7|L--JL-JF7|LJF-7||.|F7F-----JLJ-|FF-LJF-J|JF77FLJLJLJLJF7LJL--7F7|L7F7LJL-7F7|LJL---J|||LJLJF-J|F--J.77|LFJJ
FF7-F-JJ7LJL-JF--7FJLJFJFJ||||FJL-----7FJ|L-7|FJ|L7|||L---7F7F7|F-7-L-L-7|.|L7-F7|F7F--JL-----J||L7LJL-7F7LJLJF-7F7F7|||F--7L--JL---7||7-F.|
7L-7.FL.LJF7F7L-7LJF-7||L7L7LJL7F7F7F7LJ||F7|||-|FJ||L-7F-J||||FJFJJJJ||LJ-L7L-JL-JLJF7F----7F7|L-JF---J|L---7|FJ|LJLJLJL-7|F7F7F---JFF|-J-F
J-7L-|L-JL|LJL--JF7L7LJF-JFJ7F-J|LJLJL--7|||LJL7||FLJF7LJF7|||LJFJ-L.F7J.F|.L7F7F7F-7|||JF--J|LJLF-JF---JF--7LJL-JF7F-----J||LJ|L-7|F7F-.|7J
LF||7JJ.||L-7F7F-J|FJF7L--JF7|F7|F---7F-J||L-7FJ|L---JL7-|LJLJF-J|F|F7.|FL|7-LJ||LJFJ|||FJF7FJF--JF7|F---JF7L---7FJ|L--7F-7|L7FJF7L-JL7JFLL.
.|.F7.|.FF|JLJLJF-JL7|L---7||LJLJL--7LJF7|L7LLJF|F7F7F7L-JF7F7L-7F7FJ-7.FJ|-7JF||F-JFJLJL7||L7L7F7|LJL----JL---7|L7|F-7LJFJL-JL-J|F---J||J|7
7J-L-77-F7JF7F7FJF7FJ|F--7||L7|F----J|FJ|L-JF7F7LJLJLJL7F7|||L--JJ|LJJF7.FF7||FLJL-7L7-F7||L-JFJ|LJ-F7.F-------JL-JLJFL--JLF----7|L7JL|J77|F
|J7F.FLFJL-JLJLJFJ|L7||F7|||FJFJF7F--7|FJF--JLJL7F7F7F7LJ||LJ.F7.L|J|L-JFJL-|-F----JFJFJLJ|F7.L-JF--J|FJF--------------7|F-JF---JL-JF7LF-L77
LFJJFL.L-7F---7FJ||FJ|||LJLJL-JFJLJF7LJL-JF-----J|||||L-7LJ.F7|L7-|L|-J.7J|.FFL--7F7|FJF-7||L-7F7L--7|L-JF7F7F------7F-JFJF7L---7F7F7..7LLL|
FF7J|F|.L||F--J|F7LJLLJL--7F--7|F--JL-----JF-7F7FJLJLJF-JF7FJ||FJ-|.LL-.|.F7|..F7LJLJL-J-LJL-7|||F7FJL---JLJLJF7F--7LJF-JFJL---7LJLJ|-7J-7JJ
-|-7.L7..LJL--7|||F--7F-7FJ|F-J|L---------7L7||||F--7FJF7||L7LJL77L7--|-|FJ-J-F|L--77F-----7FJLJLJLJF7F-------JLJF-JF7|F-JF---7L---7|L7JFJFJ
LJJL|J|.FLF7F7LJ|LJF-JL7|L-JL-7|F----7F7F7L-JLJLJL-7|L-JLJL-JF7FJJFFJ-J.||.L-L-L--7|FJF---7LJF7F-7F7|||F--------7|F-JLJL--JF-7L---7||7|L|||.
J.|.|F--JJ|LJL77L7FJF--JL-----J|L---7LJLJL7F-7F-7F7||F7F-7F7FJ||J7J.FFJ-L|77.LFF7|||L-JF7FJF7|||-LJLJLJL-------7|LJF7F7F7F7L7|F-7FJLJJL7LL|.
|FF|.|7|.FL--7L--J|-L7F---7F---JF---JF---7LJL|L7||||LJ|L7LJ||FLJJL.--7.||.L-|7F||FJ|F-7|||FJLJLJF7F-------7F7F7||F7|||||||L-J|L7||J.|LJ77|..
F|L77F-------JF--7L7|LJ-F7LJF7F7L7F7L|F--JFF7L7||||L-7L7L-7|L7.||7FJL|.LF-||FF7|LJFJL7||LJL7|F--JLJF7F---7LJLJLJ||||||LJ|L--7|FJLJF-FJF-|L77
LJJ.-L7F--7F7FJF-JFJF---JL--JLJL-J||FJL----JL7||LJL--J|L--JL7|J.L--7-7...|L-FJLJF7L7FJ|L---JFJF7F--JLJF7-L--7F7FLJLJ|L-7|F--JLJJ-|7.L77-|.LJ
|J.-LLLJ|FJ|LJJL-7L7L-7F--7F-7F7F7|LJF---7F7FJ|L7LF--------7LJLFL||7.L|7LJJLL7F-JL7LJFJF7-F7L-JLJF7F--JL---7LJL-7JF7L7FJLJF--7L|LL77F7-7F--|
7.F.7|.|LL-JF7F7FL7L-7LJF7LJ7||||LJF7L7F7LJLJFL7L7|F-------JJ.7JLF-|7||7J..|.LJ7F-JF7L-JL-JL-7F7FJ|L7F----7L-7F7L-JL7|L---JF7L77-||F|LF|J.F.
-77-F-7-JLF-JLJL-7L7FJF-J|F-7LJLJF-JL7LJL7F7F-7L7LJ||F----7J--J.F7-F-LF--77|77F-JF7|L7F-7F--7LJ|L7||LJF---JF7LJL-7F7||F-7F-JL7L--7JLL7|.F.L-
.LJ-LJLFJ|L-7F7F7L-JL7L-7|L7|FF--JF77L--7LJLJFJFJF7L-JF-7FJ777|7LJ||J|L7FJF7F7L--JLJF||.LJF-JF7L-J|F--JF---JL---7||||||FJL7.LL7F-J.|JFJ|--|.
J|J7.--F-FF7LJ||L7F-7|F7|L7|L7L---JL---7|F7F7L7L7||F-7L7LJJF7777||-7F7-|L7||||LF7FF7FJL7F-JF-JL--7LJF7FJ.F------JLJLJLJL7FJ-F-||FLF7.LJ|7||.
LF7L7-FJF7||F-JL7||FJLJLJFJL7L---------J||LJL7L7LJLJFJFJF-7||F7F7|.L|LLL7||||L-JL-JLJF-JL--JF----JF-JLJF7L-----7F--7F--7|L--7-||J-|.LJ7.LJF7
J|L-JL|-||||L---JLJL--7F7|F7L------7.F7-|L--7L-JF--7|FJL|FJ|||||L777J.FL||||L-7F--7F7L7F---7|F7F7FJF7F-JL-7F7F7LJF-J|F-J|F7FJ.LJ7FJ7.FF7|FF.
L|F7F-FFJLJL-7F7F7|F7JLJ||||.F7F7F7L-JL7|F7FJ.F-JF-JLJF7|L7|||||FJF7F777|||L7-LJF-J||FJ|F7FJLJLJLJ7||L---7LJLJL--J-FJL-7LJ||7.|.L7|F|7JL7-L|
|LL-L-LL----7|||||FJL---JLJL-JLJ||L----JLJLJF7|F-JF7F7||L7||||||L7||||F7||L7L7F7L-7|LJ7LJ||F7F7F7F7||F7F7L------7F7|F--JF7LJ-JJ7.L-LJ.7JJF7|
7J|L|.LFF7JFJLJLJLJF7F-7F--7F--7LJF----7F7F7|||L-7|LJLJ|FJ|||||L7||||||||L7L7|||F7LJF7F7FJ||LJLJLJLJLJLJL------7LJLJL---JL-77..L-7L|LFL--FJJ
J.|F-7FFJL-JF7F7F7FJ||FJ|F-J|F7L7FJF--7LJ||LJLJF-J|F---JL7LJ|||FJ||||||||FJFJLJLJ|F-J|||L7||F------7F-7F-----7FL7F-7F-7F---JF7F|FL-77--L-J--
L7-7|F-JF-7FJ|||||L7||L-JL--J|L-JL7L-7L--J|F---JJFJL7F7LFJF-J|||FJ|||||LJL7L---7FJL-7|||FJ|LJ|F----JL7||F----JF7LJ.LJ-LJF-7FJL777.L7||FJJ.||
FJ.--L-7|FJ|FJ|LJ|FJLJF--7F7FJF---JF7L7F7FJL-7F-7L-7LJL7|FJF7|||L7||||L--7L77F7|L77FJ|||L7|F7FJF7F-7FJLJL7F7F-J|F-7F7FF-JFJ|F-J-JJ7LL-.LL7F-
||-FF|FLJL-JL7|F-JL--7L-7LJLJFJF---JL-J||L7F-J|FJF7|F--J|L7|||||FJ|LJL7F-JFJFJ||FJFJFJ||FJLJLJFJLJ|LJF7F7LJLJF-J|FJ|L-JF-JFJL-77||...FF-F77.
|L-L-JFLJLF7-LJL7F---JF7L--7FJFJF7F--7-||FJ|F-JL7|LJ|F--JFJ|||||L-JF--JL-7|JL7LJL7L7|FJ|L----7|F7F---JLJ|F---JF-JL-JF--JF7L7F-J-|7-7-F77-J..
|---LJL77F|L----JL7F--JL-7JLJ7L-JLJF7L-J|L7|L7F-JL-7||F--JFJLJ||F-7|F-7F-JL7FJF--JFJ|L7L-7JF7LJ||L7F---7LJF---JF----J.F-JL-JL-77LJ-J.FFF-|F7
LLL-J7LL7LL7F---7FJL----7|F7F7LF-7FJL---JFJ|FJL-7-FJ||L--7L--7LJL7LJ|FJL-7FJL7L7F7L7L7L7FJFJL7FJL7LJF7JL--JF---JF7F7F7|F----7FJ7-L-J-7----7.
7.L-LF|JL7-LJ.F7LJF7F7F7|||||L7L7|L--7F7-L7||F-7L7L7LJF--JF77|F--JF-JL-7FJ|F7L7|||FJFJJ||FJF-JL-7|F-J|F----JF7F7||||||||F7F7LJJ.|J.||||7LL|7
.F|JF7L-7L.J-FJL--JLJLJLJ|||L7L-JL---J|L7FJLJ|.L-JFJF7L7F7||FJL--7L7F--JL7|||FJLJ|L7L7FJ|L7L7F-7||L-7|L----7|||||||LJLJLJLJL7F777J.F--J-7JLJ
|FJ7LJ7LJ|7|FJF7F7F-----7LJ|7L--------JFJL-7FJF--7L-JL7LJ|||L7F--JFJ|F7F7||||L--7L7|FJL7|FL7|L7|||-FJL7F7F-J|LJLJLJF7F7F7F--J|L7-F-7L||LJ--|
|F|-FJJ|LJ7FL7|||LJ|F7F7L-7L---7F7F----JF7FJ|FJF-JF7F7|F-J||FJL7F7L7|||||||||.F7|FJ|L7FJ|F7|L-J||L7L-7LJLJF-JF-----JLJLJLJF--JFJFJFJ-LF-|J.J
F-L7J.F|.LFF7LJ||F--JLJL7J|F--7|||L-7F-7||L7||FJF7|||LJ|F7|LJF-J|L7|||||LJ|||FJ||L-JFJL7LJ|L--7|L7L--JF7F7|F-JF77F7F---7JFJF-7L-JFJJ-7J||.|J
|-J7.-|J7.FJ|F7||L---7F7L7LJF-J||L7FJ|FJ||FJ|||FJ|||L7FJ|||F-JF-JFJ||||L7FJ||L7||F-7|F7L7FJF--JL7L----JLJLJ|F-JL-JLJF-SL-JFJ-L---JF7JL-L|7JF
LL|J|JF--7L7|||LJF---J|L7L7FJF7LJFJL-JL7||L7|||L7LJL7||FJ||L7FJF-JFJ|||FJ|FJ|FJ||L7LJ||FJL7L--7FJJF--7F7F--JL7F--7F-J||F-7L-------J|J.F7L7F-
..|.7.L-7|FJ||L7FJF---JJ|FJ|FJL-7L-----J||L||||7|F--J||L7||FJ|FJF7|FJ|||FJ|FJL7||FJF7||L-7|F7F||F7L-7|||L----JL-7|L--7||FJF7F7F7F-7L7-JJ-L7|
L.|7LFF7|||FJL7|L-JF7F--JL7LJF-7|F7F7F7FJL7|||L7|L-7FJ|FJ||L7||FJ||L7|||L7|L7FJ||L7|||L7FJ||L7|||L7FJ|||F-7F--7FJ|F-7|||L7|LJLJLJL|FJFLJ|--7
L7FJF-JLJ|||F7||JF7||L---7L-7L7LJ|||LJ|L-7||LJ|||-FJL7||L||JLJ||FJL7LJ||-|L7|L7||FJ|||FJL7|L7LJ|||||J||||J||F7LJFJL7LJLJFJL--7F7F7LJ.--J--77
|F7-L---7LJ|||||FJ||L----JF7L-JF7||L7FJF7|LJF--JL7L7FJLJFJL-7L||L7FJ7FJ|FJFJ|FJLJL7|||L-7||FJF-JL7|L7||||FJLJL-7|F-JF7F7L7F-7LJLJL7-|L7||.|.
FJ|F7F7|L7FJ||||L7LJF-----JL--7|LJL7|L7||L-7|F7F-JFJL-7FL7F-JFJL7|L-7L-J|FJFJL7F7.|||L7FJ|||.|F-7|L7|||LJL7F7F7|LJ7FJLJL7|L7L7F---J-F-7JJFJ7
L7LJLJL--JL-JLJL-JF7|JF7F-----JL-7FJ|FJ||F-JLJ|L-7L7F-JF7|L-7L-7|L--JF--JL7|F7LJ|FJ|L-JL7|LJFJL7|L7||||F--J|LJ|L--7L7F--J|FJJ|L-7||.|J||L---
LL7F7F7F7F7F7F7F-7|||FJLJF--7F7F7|L7|L7|LJF-7.|F-J.|L--J||F7|F-JL---7L7F7FJ|||F-JL7L---7||F-JF7||FJ|||||F-7L-7L7F-JFJL-7FJL-7|F7|-|.L7JF-|FJ
|LLJLJ||||||||||FJ|LJL7F-JF-J|||LJFLJ-|L-7L7L-J|F--JF7F7|LJLJL7F7F-7L7||||FJ|||7F-JF7F-JLJL7FJLJ|L7|||||L7|F-JFJL--JF7FJL--7|LJLJJ|F-JFF7.J7
L.||JLLJLJ||||||L7L7F-J|F-JF7||L7F7|F-JF-JFL7F-J|F-7|LJ|L7F---J||L7L7|LJ||L-JLJFJF-J|L7F---J|-F7L7|LJ||L7||L-7L7F---J|L-7F7LJF-7JF|.|.|J77L|
|-|J-JLF--J|||LJ-L-JL--JL-7||||FJ|L-JF7L---7|L-7LJFJL-7|FJL---7|L7|FJL7JLJF----JFJF7L-JL-7F7L-JL7|L-7LJ7LJ|F-JFJL--7L|F7LJL7F|FJ|FL77|L|F7-J
F-7.FLFJF-7|LJ7F7F--------J||||L7L7F7|L7F7FJ|F7L-7L7F-JLJ|F---JL7|||F7L--7L----7L-J|F7-F-J|L--7FJL--J7F7F-JL-7L7F-7L7LJL7F7L7|L777L|-|7FF|-.
-|JF7LL-J7|L--7|LJF------7FJLJL7L7LJ||FJ||||LJ|F-JFJL----7L-7F--J|||||F7FJF7JF-JF-7LJL7|F7L-7FJL-----7|LJF7F7L7LJ-L7L-7-LJL7LJFJJ7.|||LFJ|LJ
.J-LJ|L|JLL7F-JL7FJF-----JL7F7FJFJF-J||FJ|L--7|L7FJF7F---JF-JL7F-J|||||||FJL-JF7|7|F-7|LJ|F-JL7F7F-7FJ|F7|||L7L7F7FJF7L---7L-7||.-.JF-7LF|.|
FJ|LJF-|F7L||F7FJL7L--7F-7FJ|LJFJ-L7FJ|L7|F--J|FJ|FJ|L---7L-7FJL7FJ||||LJL-7F7||L7|L7||F-J|FF-J||L7||7LJ|||L7L7LJ|L-JL-7F-J7JLJ-7|7FL-LFF7-F
F-FL.J-7|L-LJ|LJF-JF7FJL7|L7L-7|F--JL7L7||L7F7||-LJFJF--7L-7LJ-FJL7LJLJF---J|LJL7|L-J||L7FJFJF7|L-JLJF7.LJ|FJFJF7L---7F|L----7|L7L7-|7F--J.|
|.|.7LL-JJ7|LL7FJJFJLJF-J|FJF-J||F7F7|FJ||FJ|LJL--7L7L-7L--JF--JF7L7F-7L7F-7L7F-JL--7LJ7|L7L7||L---7F|L--7||F|FJ|F7F7L7L7F---J-7|-F7LLJJ|-7F
7J.L|..||-LJF|||LFJF7FJF-J|FJF7||||||||FJ||FL7F-7FJ||F-JF7F7L-7FJL7LJFJFJ|FJFJL7F7F-JF--JFJJLJ|F7F7L-JF-7||L7|L7|||||FJ.|L---7-JL7J|7F|-F.FJ
|||||J7LJLF|F-LJ.L7||L7L-7|L7|LJLJ||||LJFJL7FJL7||F-JL--JLJL7FJL7F|F-J|L7|L7L-7|||L7LL---JF7F-J||||F7FJLLJ|FJ|FJLJ||||LFJF7F-J-.-J.|-F--77FL
J-|7|F-7.F|LJ-LJ7|||L7|F-J|FJL7F7FJ|LJ-FJF7|L7FJLJL-7F7F7F7FJL7FJFJL--7F||FJF7|||L7|F7F---JLJF7|LJ|||L--7FJL7|L7F-J||L7|FJLJF||FL.-JF|.LL|7J
.LLJFLJ7.7J.LFJ7F-LJ-||L-7|L7FJ||L7|F--JFJ||FJL-7F-7||LJLJ|L7FJL7L7F-7L7||L7|LJLJJLJ|LJF7F-7FJ|L-7|||F--JL7FJ|FJL-7||FJLJJJF7|LJL7LFJ.FF|J.|
L7J.F7|F7FJ7||FL7.LLFJL7J||FJ|FJL7|||F-7|-||L7F-JL7LJL---7|FJ|F-JFJL7L7|LJFJL--7F7F7L7FJ||FJ|FJF-J|||L---7|L7LJJLL||||J|7L7-||-FF--J..J--77J
||F-7JFL7J.FF-JF7--LL7FJFJ||FJ|F7LJ||L7||FJ|FJ|F7FL-7F-7FJLJ|||F7|F7|FJL7FJF7F7||LJL-JL7|||FJL7L-7LJL7F-7|L7|.|LF-LJLJ.|--FF-L-J|JL77.F7-J-7
LF7L|.7LJ-FLF7F7|J..L||FJFJLJ7||L-7||FJ||L7|L7||L77FJL7||7F-7LJ|LJ|LJ|F-JL7|||LJL7F7F7FJLJLJF-JF-JF--JL7|L7LJ77-F.FL|J-L.F||JJ.F-7F|J.LJ77L|
FLF--.||..L---J--.-7.LJL7L7F|FJ|F-J|||FJ|FJL7LJ|FJFJF7||L-JFJF-JF-J|FJL7-FJ|LJF--J|LJ||F----JF7L-7L---7||FJ7FL|FL7FJ.LFJ-L-.L.-L.F7JJ-L|7F7L
FL-.F-JF7.LF.FJFL-7L--F-JFJJFL-JL7FJ||L7|L7FJF-J|FJFJLJ|F--J.L7FJF--JF7L7L7L7.L7F7L-7LJL--7F7||F7L--7FJ||L77J-J7JFL.-.|L.LJ.|FJLFJ-JJ.F|-J|.
7|L-J.F|7FL-7|.L-L|.L-L7FJ7|L|JF-J|FJL7||FJL7|F7LJFJLF7|L--7F-JL7|F7FJ|FJFJFJ7-LJL7FJF----J||||||F-7||FJL-J-7J|F-J77LL-JF.-L7F-FF-JJ.77L7.L7
JJ|FJFFJ777|-JF|F-J|.7LLJJJFFJJL-7||F-JLJL7FJLJ|F7L--J|L7F-JL--7|LJ|L7||-L7L-7FLLL||FJF--7FJ||||||7||LJJ-|.|F-|77L-F7.L.|.|.|.LF|-JFL-|LL|-J
|.-L-|J.|L--.LL|7J7|FJJJ.|--7..L-LJ|||F-7L||.FFJ||F7F7L7|L---7FJ|JFL7|LJJ.|F-J7J|7||L7|.|||L||||||FJL77-||F-|-7J7-|LF-J-F-F7J7FL-J|FJJ|FLJ..
FF.|F-JL7LF|7.|LJF-J.L.|-LJL77-|.F-JL7L7|FJL7FJFJ||||L7|L7F7FJL7L7F-JL-777LJ7F--7-LJ-LJF-JL7||LJ||L7FJ7-LJ-7L-|-J77LL-J-|LL-JF||L-7.--F-77-L
7JL|J7|.7-F|.FJFJ7F|-|--.|F.-7L7FL-7FJFJLJF-J|FJJLJ||FJL7|||L-7L-JL-7F-JLF|JL7|-|F|J-||L-7FJ|L7FJL7|L7|.|L-|JL|-|.L77.-FF77....FF|L|J||LFJ7.
|7.JJLL7LFJ|F|-F-J-L7J.LL|-7LLFL-F-JL7L7F7|F-JL7F7FJ|L7FJLJL7FJLJ-LFJL7JFLJ-7.F-7J|LL--F7|L7L7|L7FJL7|7-JLFF-F|-|7F.--JLJJ77-|-7F-J|.L-----7
|77.||.|L|.FLF-L77..L7|.|L-F7-7|LL-7FJJLJ|||F-7LJ|L7|FJ|JF7J||..L-7|F7|F-7LLJ-|-|-F.LLL|LJFJ-LJFJ|7|LJ7L|L7..FJLFLJ7F|F.JL||7J.LL7.|7|7FL-JJ
LLFFFF-JF7-L.L77JFFL|FF---F|-7||LLFJL-7-FJ||L7L7FJLLJL7L-J|FJL7--7FLJLJJ-||.L-J||7|7LFLL-7|J-LJL7|--LJL.F-L7-LJ.|7.|-L77--|JJ.FJ.FL-L--|||-F
F|LLJJJJFJ..F-LF.F-JLF-7.FJ|.FJ|7FL7F-J.L-JL7L7||-7|F-JF-7||F7|J--JJ|7LJ||JJF7FJL7L|-JJLL||--7FLLJ-L|7F7J.L|77FFL--|.LLF.LL7-.|7F7||LL|L--F7
|7LJJ.FF7FJ-LFLJ.|7.L|--7F-7-JLL|JF||-|-L-JFL-J||F--JF7|.||LJLJ7-JJ||J7FF-J||-|L|.F--|J..||J.|7JJ..FL7-|-7-J|-LFF7.L7J.LL-LJ7||L-JL77-L7J7|.
LJJ..LL-7J.F.JJ7-L|JJJ.L-L.L-..JJLLLJ-F-L--L-|-LJL---JLJ-LJLLJL7JJL-7LL-|J.-JJ|JL--F-|LFFLJ-7LL--J-|JJ.7-LF-J7.LJJF-J-|.LFFJFFJJ.FJLJ-LJ.LJ7

View file

@ -29,7 +29,8 @@ library
Day09
Day10
-- other-modules:
other-modules:
Misc
-- other-extensions:

View file

@ -10,7 +10,8 @@ import Utils (readInput)
--import qualified Day06
--import qualified Day07
--import qualified Day08
import qualified Day09
--import qualified Day09
import qualified Day10
run :: (Show b, Show c)
@ -30,12 +31,13 @@ run day parse solveA solveB = do
main :: IO ()
main = do
--run 1 Day01.parse Day01.solveA Day01.solveB
--run 2 Day02.parse Day02.solveA Day02.solveB
--run 3 Day03.parse Day03.solveA Day03.solveB
--run 4 Day04.parse Day04.solveA Day04.solveB
--run 5 Day05.parse Day05.solveA Day05.solveB
--run 6 Day06.parse Day06.solveA Day06.solveB
--run 7 Day07.parse Day07.solveA Day07.solveB
--run 8 Day08.parse Day08.solveA Day08.solveB
run 9 Day09.parse Day09.solveA Day09.solveB
--run 01 Day01.parse Day01.solveA Day01.solveB
--run 02 Day02.parse Day02.solveA Day02.solveB
--run 03 Day03.parse Day03.solveA Day03.solveB
--run 04 Day04.parse Day04.solveA Day04.solveB
--run 05 Day05.parse Day05.solveA Day05.solveB
--run 06 Day06.parse Day06.solveA Day06.solveB
--run 07 Day07.parse Day07.solveA Day07.solveB
--run 08 Day08.parse Day08.solveA Day08.solveB
--run 09 Day09.parse Day09.solveA Day09.solveB
run 10 Day10.parse Day10.solveA Day10.solveB

View file

@ -4,30 +4,35 @@ module Day10 where
import Data.Void (Void)
import Data.Text (Text)
import Data.Char (isSpace)
import Data.Bifunctor (first)
import Data.Maybe (mapMaybe)
import Data.Bifunctor (first, bimap)
import Control.Monad (join)
import Text.Megaparsec (Parsec, errorBundlePretty, runParser, many, eof, satisfy)
import Text.Megaparsec.Char (newline)
import Misc (withCoords, pairs)
data Pipe = E | S | UD | LR | UL | UR | DL | DR
deriving Show
data Pipe
= E -- empty
| S -- start
| I -- vertical
| H -- horizontal
| J -- up-left
| L -- up-right
| T -- down-left
| F -- down-right
deriving (Show, Eq)
data Dir = L | R | U | D
data Dir = DLeft | DRight | DUp | DDown
deriving (Show, Eq)
type Row = Int
type Col = Int
type Row = Int
type Col = Int
type Move = (Dir, (Row, Col))
type Parser = Parsec Void Text
input :: Text
input =
".....\n\
\.S-7.\n\
\.|.|.\n\
\.L-J.\n\
\.....\n"
parse :: Text -> Either String [[Pipe]]
parse = first errorBundlePretty . runParser grid ""
where
@ -35,18 +40,91 @@ parse = first errorBundlePretty . runParser grid ""
pipe c = case c of
'.' -> E
'S' -> S
'|' -> UD
'-' -> LR
'J' -> UL
'L' -> UR
'7' -> DL
'F' -> DR
'|' -> I
'-' -> H
'J' -> J
'L' -> L
'7' -> T
'F' -> F
bad -> error $ "Invalid character: " <> [bad]
row :: Parser [Pipe]
row = map pipe <$> many (satisfy $ not . isSpace) <* newline
grid :: Parser [[Pipe]]
grid = many row <* eof
-- >>> parse input
-- Right [[E,E,E,E,E],[E,S,LR,DL,E],[E,UD,E,UD,E],[E,UR,LR,UL,E],[E,E,E,E,E]]
findStart :: [[Pipe]] -> (Row, Col)
findStart = fst . head . filter ((S ==) . snd) . withCoords
get :: (Row, Col) -> [[Pipe]] -> Pipe
get (r, c) = snd . head . filter ((c ==) . fst) . zip [0..] . snd . head . filter ((r ==) . fst) . zip [0..]
nextD :: Dir -> Pipe -> Maybe Dir
nextD dir pipe = case (pipe, dir) of
(I, DDown) -> Just DDown
(I, DUp) -> Just DUp
(H, DRight) -> Just DRight
(H, DLeft) -> Just DLeft
(J, DDown) -> Just DLeft
(J, DRight) -> Just DUp
(L, DDown) -> Just DRight
(L, DLeft) -> Just DUp
(T, DUp) -> Just DLeft
(T, DRight) -> Just DDown
(F, DUp) -> Just DRight
(F, DLeft) -> Just DDown
_ -> Nothing
nextC :: (Row, Col) -> Dir -> (Row, Col)
nextC (r, c) dir = case dir of
DLeft -> (r, c - 1)
DRight -> (r, c + 1)
DUp -> (r - 1, c)
DDown -> (r + 1, c)
starts :: [[Pipe]] -> (Move, Move)
starts grid =
let s = findStart grid
ds = mapMaybe (\dir -> check dir $ nextC s dir) [ DUp, DDown, DLeft, DRight ]
in (head ds, head $ tail ds)
where
check :: Dir -> (Row, Col) -> Maybe Move
check dir rc = fmap (const (dir, rc)) . nextD dir $ get rc grid
go :: [[Pipe]] -> (Dir, (Row, Col)) -> [(Dir, (Row, Col))]
go grid = helper
where
helper :: (Dir, (Row, Col)) -> [(Dir, (Row, Col))]
helper (dir, rc) = (dir, rc) : case nextD dir $ get rc grid of
Just dir' -> helper (dir', nextC rc dir')
Nothing -> []
solveA :: [[Pipe]] -> Int
solveA grid = (1 +) . length . takeWhile (not . isMatch) . uncurry zip . join bimap (go grid) $ starts grid
where
isMatch :: (Move, Move) -> Bool
isMatch (l, r) = snd l == snd r
verts :: [[Pipe]] -> ((Row, Col), [(Row, Col)])
verts grid = (findStart grid, findVerts grid)
where
isVertex :: (Move, Move) -> Maybe (Row, Col)
isVertex ((dir, rc), (dir', _)) = if dir /= dir' then Just rc else Nothing
findVerts :: [[Pipe]] -> [(Row, Col)]
findVerts = mapMaybe isVertex . pairs . go grid . fst . starts
-- https://en.wikipedia.org/wiki/Shoelace_formula
-- A = ((x1 * y2 - y1 * x2) + (x2 * y3 - x3 * y2) + ...) / 2
trapezoid :: ((Row, Col), [(Row, Col)]) -> Double
trapezoid (sp, vs) = (/2) . fromIntegral . sum . map inner . pairs $ [sp] <> vs <> [sp]
where
inner :: ((Row, Col), (Row, Col)) -> Int
inner ((r1, c1), (r2, c2)) = r1 * c2 - r2 * c1
-- https://en.wikipedia.org/wiki/Pick%27s_theorem
-- A = i + b/2 - 1
-- i = A - b/2 + 1
interior :: ((Row, Col), [(Row, Col)]) -> Int -> Double
interior vs path = abs $ trapezoid vs - fromIntegral path + 1
solveB :: [[Pipe]] -> Double
solveB grid = interior (verts grid) (solveA grid)

View file

@ -0,0 +1,9 @@
module Misc where
withCoords :: [[a]] -> [((Int, Int), a)]
withCoords grid = [((r, c), a) | (r, row) <- zip [0..] grid, (c, a) <- zip [0..] row]
pairs :: [a] -> [(a, a)]
pairs [] = []
pairs xs = zip xs $ tail xs