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 Day09
Day10 Day10
-- other-modules: other-modules:
Misc
-- other-extensions: -- other-extensions:

View file

@ -10,7 +10,8 @@ import Utils (readInput)
--import qualified Day06 --import qualified Day06
--import qualified Day07 --import qualified Day07
--import qualified Day08 --import qualified Day08
import qualified Day09 --import qualified Day09
import qualified Day10
run :: (Show b, Show c) run :: (Show b, Show c)
@ -30,12 +31,13 @@ run day parse solveA solveB = do
main :: IO () main :: IO ()
main = do main = do
--run 1 Day01.parse Day01.solveA Day01.solveB --run 01 Day01.parse Day01.solveA Day01.solveB
--run 2 Day02.parse Day02.solveA Day02.solveB --run 02 Day02.parse Day02.solveA Day02.solveB
--run 3 Day03.parse Day03.solveA Day03.solveB --run 03 Day03.parse Day03.solveA Day03.solveB
--run 4 Day04.parse Day04.solveA Day04.solveB --run 04 Day04.parse Day04.solveA Day04.solveB
--run 5 Day05.parse Day05.solveA Day05.solveB --run 05 Day05.parse Day05.solveA Day05.solveB
--run 6 Day06.parse Day06.solveA Day06.solveB --run 06 Day06.parse Day06.solveA Day06.solveB
--run 7 Day07.parse Day07.solveA Day07.solveB --run 07 Day07.parse Day07.solveA Day07.solveB
--run 8 Day08.parse Day08.solveA Day08.solveB --run 08 Day08.parse Day08.solveA Day08.solveB
run 9 Day09.parse Day09.solveA Day09.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.Void (Void)
import Data.Text (Text) import Data.Text (Text)
import Data.Char (isSpace) 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 (Parsec, errorBundlePretty, runParser, many, eof, satisfy)
import Text.Megaparsec.Char (newline) import Text.Megaparsec.Char (newline)
import Misc (withCoords, pairs)
data Pipe = E | S | UD | LR | UL | UR | DL | DR data Pipe
deriving Show = 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 Row = Int
type Col = Int type Col = Int
type Move = (Dir, (Row, Col))
type Parser = Parsec Void Text type Parser = Parsec Void Text
input :: Text
input =
".....\n\
\.S-7.\n\
\.|.|.\n\
\.L-J.\n\
\.....\n"
parse :: Text -> Either String [[Pipe]] parse :: Text -> Either String [[Pipe]]
parse = first errorBundlePretty . runParser grid "" parse = first errorBundlePretty . runParser grid ""
where where
@ -35,18 +40,91 @@ parse = first errorBundlePretty . runParser grid ""
pipe c = case c of pipe c = case c of
'.' -> E '.' -> E
'S' -> S 'S' -> S
'|' -> UD '|' -> I
'-' -> LR '-' -> H
'J' -> UL 'J' -> J
'L' -> UR 'L' -> L
'7' -> DL '7' -> T
'F' -> DR 'F' -> F
bad -> error $ "Invalid character: " <> [bad] bad -> error $ "Invalid character: " <> [bad]
row :: Parser [Pipe] row :: Parser [Pipe]
row = map pipe <$> many (satisfy $ not . isSpace) <* newline row = map pipe <$> many (satisfy $ not . isSpace) <* newline
grid :: Parser [[Pipe]] grid :: Parser [[Pipe]]
grid = many row <* eof grid = many row <* eof
-- >>> parse input findStart :: [[Pipe]] -> (Row, Col)
-- 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 = 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