Compare commits
No commits in common. "ed16c41c9c7948dacccccf7555ff3c6c41e064a7" and "1e6bfbbb6e75763e5e5cb6b91d0ddd524bb0475b" have entirely different histories.
ed16c41c9c
...
1e6bfbbb6e
20 changed files with 0 additions and 2353 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -1,2 +0,0 @@
|
|||
*.txt
|
||||
.DS_Store
|
||||
140
day10/data.txt
140
day10/data.txt
|
|
@ -1,140 +0,0 @@
|
|||
FL7L-F7FJF-7FFF7FF|-F-F|JF--|.|-J-7.F--FJF|-7.F.-FF7.-F7-L-|FF-F-|-7.-F7-FF-|7J-J.F-J7.FF7..L7F|7F-7JF-L7F.|--FL7F---|.FFF-L7FL--L777L-.FF7F
|
||||
7FFJ.FLJF-.FJ||F-FJJJJ||F|-F7FLJ.7-F7J||-FFF7.L7-FJL7.F|||-J7JJ.LL77F|LF7LJJ||L7--|-7F-F|F-7JLJ.LJL--F-|LLJ|7J|L|-|7|FF|7|J.LJFFJ7.|-J.F.|L|
|
||||
L-77.L77JF-JF7.||||.F7FFF7-|-7L.L--|.FF.|F-JL77.|L-7|F7|-|7F|-.-7L-F7--JJ|.||L7L-.|JF|.|JL-77F-|J-L|JL--FLJLJ7JF|7||7.FJL|7--L|---7|.|FF-J-|
|
||||
LF7--FFJFLJLFL|J|.77---J-F-|F7-7.|7.L|J--L--7L7F7F7|LJL7-77-L.--J7LL-7.|LF-J--.F-J7-F--L7|-F7LFJ--77-7.77LJJ.7FL.J-JFJJ|F|J|LF|7||F|7FFJL|LJ
|
||||
L|J7.-JJ-.|F|FJJJL||FL77LJ.|FJ7|FL7F.L7JJFLFJFJ|LJLJF--J-F7...FF||.FJL.-7L|.FL7JJLL-JJ.|||F||.L7|JFJ.|FJ7|--7JJ-|7LLF-FJ-F.--FJF|-LJFLJ-J.FJ
|
||||
FJF-L-|.LF-F||J-7.-7|FF7-77J-7|LLJ|JJLJ--7-L7|JL-7F-JF-7.||7F-JJF7.J7.||L.--JJ.---77L7--777||7FLJFJJ-|7||F-L|-J7LJ-FJL|J.|.F77.L|F|JFJ|7.FF7
|
||||
|-FJ.-F7.F..L|LF|7---LL77|L7FJJ.L.|LF-JFF|-FJ|F--JL-7|FJFJ|-7JLL||F7FL.JLLJ..F.L--LF7L.LF-7|L77J.FL7.FFLF--FF.L|7|.J|FJFL|-|7-7|F|7-J..777|F
|
||||
F77.F|L77LFF-|LJ-L7|-LJ|F|.--7|.L--F-|7-L7.L7|L--7F-J|L-JFJFJJ-|JFF-7---FJ..-77||7.F7||-L7LJFJ77F7JLFF7L|7|||L7||7-J-|7-.|.L|.LJ.|LJJ.FLL-L7
|
||||
|.|--F-J-7L7-FF|---7-|.J7JF.LFL-J.||LF-J.F--J|LF-JL7FJF7FJ77|F7--FL7|-L7-77F7F---7-||F7F7L-7|JLF77-L|||F-7-|JLJJLL7FF...JL-J.77|FJ.|.77|L-|J
|
||||
-F7FLJ|LF7.|.L-LJ.LJ..F|..F.L-|.F-J77|F-7L--7L7L--7LJFJ|L7F777J|.F-JL7LJ---L7L--7|FJ||||L7FJL7.|L7-F7|||FJ7L|J.L|LJ7JF77L.|FLJ7-7FF7|77|.F-7
|
||||
J.-77LF7||F77FJ-7.|L7F-7-.F7.|F7JJ-F7J7LF7F7L7L7F7|F7L7L-J||F7-JFL7F7|--7L|LF---J||FJ||L7|L7FJF|FJF|LJLJL-7L7|F7|FLL7LLJ77LJ7|.FJ-J||L7J.JF-
|
||||
|.LL-.LLL-|L-7|---L-7.LL.FL7.FJ||.F-7|F7||||JL7|||||L-JFF-J|||.F7FJ|LJ7F7-JLL7F-7|||FJL7|L7|L--JL-7L-7F---JF|7LF-LJFL-J-LLJF---FJ.F|LJJ.JJLJ
|
||||
L||L|7.L7LL77LJ.F|J7|7||7|7J|.|--FL7L-JLJ|||F7|||LJ|F7F7L7FJ||FJ|L7L7F7|L7J-FLJFJLJLJF-J|FJ|F--7F-JF-JL--7L--L7JFJ.L|L|FL7.JJ-||J-7-|JFJ.FF|
|
||||
|JF7LL-.|7-|77.-F|LF--FJ-JF7F77FFLJL----7LJLJLJ|L7FJ||||FJL7|LJFJ-|FJ|||FJ|--LFJF---7|F7|L7|L7-LJF7|F--7FJ.JJ7F7|.J-J7-7-F-|..FJF-.J.LJJ-F7.
|
||||
F7.|-|.FF7L|.L7||..|.|.JFF|LJ|F7J-F-7F7JL-----7L-JL-J||||F-JL-7L7FJ|FJ|||F77.LL-JF--JLJLJFJL7L-7-||LJF7||F7|.F||77|.|L7L-L.F-F-LLJ7.FF-|.L--
|
||||
L7FF-FF-LJ.7-FJJ|JFL-L7FJLL-7|||F7L7LJL-7F77F7L--7F--J||||F7F7L7||FJ|FJ|||||F7F77L---7F--JF7|F-JFJ|F7|||LJL77F||F7J--.|F|LF|.L-.|FF--J7LF-||
|
||||
.J-J.|JLF|F|7F|.JLJ|.F-7|FF-J||LJ|JL-7F7LJ|FJ|F--JL7|FJ||||||L7|LJ|FJ|FJ||L7|LJL-7F7FJL7JFJLJL-7|FJ|||||F--JF7||||JFL-J-J.-7-|F-|-|7L-F.J--J
|
||||
FJL-7|FF-FFL--7-LFJ7-J.---|F7LJF-JF-7LJL-7|L7LJF7F7L7L7|||||L7|L7FJL7||FJ|FJL---7LJ|L-7L7L---7FJ||FJ||||L-7FJ||||L7F7LF|.|-LL|-||-LFF-JF.F|7
|
||||
|7LF77-J-L-.|L||.L7|-|F|-LLJL-7L77L7|F-7L|||L-7|||L7L-J||||L-JL-JL-7|||L7|L-7LF7L-7L--JFJF7|FJL7|||FJ|||F-JL7||||FJ|L--777J.F---J7L|J7-7-FJ7
|
||||
LFFL|J|..F.FJ|F-7.LJFF|7.LF7F7|FJF7|||FJFJL--7LJLJ.|F--J|||F--7F7F7||LJFJ|F-JFJ|F7|F--7L7|L-JF-J|||L7||||.F7|||LJL-JF--J7.|FJ.FL7L-7-77||J.J
|
||||
|F7-JFJ-FLFJ.FJL-7J--LJ|FF|LJLJL7|LJ||L7L---7|.F7-FJL7F7|||L7FJ|LJLJL-7|-||F7L7|||LJF7L7|L--7|F7||L7||||L7|||||F---7|F7F-777.77L|J7L-J-FF--J
|
||||
LJ|7.FJ.|.F7F|.77|J.F|J|--|F---7LJF-J|FJ7F7FJ|FJ|FJF7LJ||||FJL7|F7|F7FJL7|LJ|FJ||L--JL-JL7F7|||||L-JLJLJFJ||||||LF7LJ|LJFJL7-7JL|LFJF|LFJ7|7
|
||||
F-|JF|JFLJJ-77.L|J|F|-F7FFLJF7LL-7L7J|L7FJ|L7|L7|L-J|F7||LJL77LJ||FJ|L7FJ|F-JL7|L-------7LJLJLJLJF------JF|LJLJL-J|F7|F7L-7JF|7.7JF-FJ||F-JL
|
||||
F-J7L.F|J7.|L-7F-J-7JFJ|F7F-J|F-7L7L7|FJL7L-JL7||F--J|LJL7F7L-7F|||FJFJL7|L7F7||F-7F-7F7L---7F---JF7F-7F-7|F--7F--J||||L--J|FJF-7-J-|JLJJ-7J
|
||||
L7L-7.J7--.|--77F7FL-L7|||L-7LJFJ|L7LJ|JJL---7|||L--7L7F7||L--JFJ|||JL-7LJFJ|LJ|L7|L7|||F-7-|L---7||L7||FJ||F7LJFF7||||F--7FJ-|FJ|J.|.L|J.|7
|
||||
L-JF--FFJ.F|7FLLJJ|JLF|LJ|F7L-7|F-7L-7L7F7F7FJ||L7-FJFJ|LJL--7F|FJ|L7|FJF-J.L-7L7|L-JLJ||FJFJF---J||FJLJL7|LJL7F7|||||||F-J--||L-7LL77.F--FJ
|
||||
-JJ|J.|J7-F-JJL||-JF-7L7FJ|L7FJ||FJF7|FJ||||L7LJFJFJFJFJF---7|FJL7|FJFJFJF7FF7L7|L--7F7LJL7L7L-7F-J|L7F7FJ|F--J|||||LJLJ|F7J.FJF-JF||7LL-LJ|
|
||||
....-.|F|.LJ.FFFF7.|--FJL7|FJL7LJL7||||FJ|||7L-7L7L7|F|FJF-7LJL-7|||FJFJFJL7||FJ|F-7LJL--7|FJF-JL-7L7LJ||FJL-7FJ||||F7F-J||.FJFJJ-7L-J||.|L-
|
||||
-F77LFJFJ-7|F|LFJ|-F7.L-7|||F7L--7LJ|||L7LJL7F7L7L7|L7|L7L7L77F7||||L7L7L7FJ|||FJ|FJF7F7FJLJFJ7F7|L7|F7||L7F-J|FJ|LJ|LJF7|L7|FJ7FF77J|FFF.|.
|
||||
|LL-F|.FJ-7L|J-L7|J||F--J||||L7F7L-7||||L-7FJ|L-JFJ|FJ|FJ.|FJFJ||LJL-JFJFJL-J||L7|L7|LJ|L-7FJ.FJL7FJ||||L7||F-JL-JF7L7-|||FJ||L|||L7LJ-7J77-
|
||||
JJL7FL.L..|.7FF7||FJ|L7F7|||L7||L7FJ||L7F-JL7L--7|FJL-JL-7||FJFJL-7F--JFL-7F-J|FJL7|L-7L7-|L-7L-7|L7||||FJ|||F--7FJL-JFJ|||FJL--7JJLFL-JL-..
|
||||
..FLJL|L|J|-JFJLJ|L7|JLJ|||||||L7|L7|L7|L--7L-7FJ||F7F---J|||FJF77|L7F7F7FJL7-|L7FJ|F7L7L-JF-JF-JL7||||||FJLJL-7LJF7F7L7||LJF---JF-JL||.F|L.
|
||||
F-L|7.-7|LJLFL--7L-JL7F7|LJ|FJ|FJ|FJL7||-F-JF-JL7|||LJF7F-J||L7||FJFJ||||L-7L7|FJ|FJ||FL--7|F7|F7FJ||||||L7F---JF-JLJL7|||F-J7LJJL77FLF.LLL|
|
||||
.|-|-7L--L.FFF--JF--7|||L-7|L7|L7|L-7LJL7L-7L7F7|LJ|F7||L-7||FJ|||FJL||||F-JFJ|L7|L7||F7F7|LJ|||||FJ||||L-JL--7|L7F---J|LJL--7-JL|-FF..7L|L|
|
||||
-LFJ.7|L-..FFL---JF-J|||F-JL7|L7||F7L7F-JF7|FJ||L7FJ||||F7||||-||||F7||||L7FJJL7||FJ||||||L7FJLJ||L7||||F-----JF7||F7F-JF7F-7|77FFF-77-L-7-7
|
||||
L||LJJ7.L-7JJF----JF7LJ||F7FJL7||LJL-JL7FJ||L7|L7||FJLJ||||||L7|||||LJ||L7|L7F7||||FJ|||||FJL-7FJL7|||LJL-----7|||||||F-JLJ.LJF7F7|FJ7JFL|F|
|
||||
.LJ|7|F-JJ||-L-----JL7FJLJ|||FJ|L----7-||FJL7|L7|||L-7FJ|LJ|L7|||||L7||L7|L7||LJ||||F||LJ||F7FJ|F7||||F------7||||||LJL-7F7F77|||||L77||FFLJ
|
||||
F7-|J-7|J.F7.L-F-----J|F7FJL-JFJ|F7F7L7|||F7||FJLJL7FJL7|F7|FJ|||||FJFJFJ|FJ||-FJ|||FJL-7|LJ||FJ|LJ||||F---7LLJ|||||F---J||||FJLJ|L7|F7|LFJ.
|
||||
FJF|JJLL--JF7LFJF7F7F7LJLJF7F7L--JLJL7|||LJLJLJF---JL7J|LJ|LJFJ|||LJFJFJFJL7|L7|FJ||L7F7||F7||L7|F7|LJLJF--JF-7|LJLJL-7F7|||||F--JFJLJ|-JL7F
|
||||
.F-J|F.L-LFJL7L-JLJLJL---7|||L7F-7F-7LJ|L-----7L7F7F7|FJF7L-7L-J|L-7L7|FJF7||FJ||FJ|FJ|||||LJ|FJLJLJFF-7L7F7L7LJF-7F--J|LJLJLJL7F7|F--JF7-F7
|
||||
F|LFF.7.7|L-7|LF--7F7F7F-J|LJFJ|FJ|FJF7L----7FJFJ|LJ||L7||F-JF--JF7L7|||FJ|||L7LJ|FJL-J|||L7FJ|F----7L7|FLJL7|F-J|LJF7FL7F-----J|LJL7F77F7--
|
||||
-J-JJ7|7LJJL|L7L-7LJLJLJF7L7FJFJL-JL-JL----7LJJ|FJF-J|-|||L-7L-7FJ|FJ||||FJ|L7|F-JL---7|||FJL7|L7F-7L-JL---7LJL-----JL7FJL------JF--J|L-J|7|
|
||||
|J..LJF|FJLFJFJF7L---7F-J|FJL7|F-----7F-7F7L--7||FJF7|FJ||F-J7FJ|FJL7||LJ|FJFJ|L7F7F7FJLJ|L7FJL7||FJF7F--7.L---7F7F7F-J|F-----7F-JF7FJF--JF7
|
||||
|-FF.FLJJ|-L7L-JL-7F7LJF-J|F7LJ|F7F7.LJLLJ|F--J||L-JLJL7|LJ-F-JFJL7FJ|L-7LJFJFJJ||||LJF-7|FJL7FJLJL7|LJF-JF-7F7LJ||LJF7||-F--7LJF7||L7L--7||
|
||||
-7FJ-J.|L77.L----7||L--JF-J||F7LJLJL----7FJL--7|L7F--7F|L--7L-7|F-JL7|F7L7.L7L-7LJ|L-7L7LJL-7|L7F-7LJ7FJF7L7||L-7LJF-JLJL-JF7L7||||L-JF-7LJ|
|
||||
FLJJL7--F--------J|L----JF-JLJ|-F-----7FJL7F7FJL-JL-7L-JF--JF-J||F7FJ||L-JF7|F-JF-JF-JFJF7F-J|FJL7L--7L-JL-JLJF-JF7L7F----7|L7L-JLJF7FJFJF-J
|
||||
FL-...|.L7F7F7F7F7|F-----JF7F7L7L--7F7||F7LJ|L--7F--JF-7L-7FJF7|||||FJ|7F7|LJL77L-7L7FJFJ|L-7||F7|F-7|F7F-----JF-JL-JL---7LJFJF7F7FJLJFJFJ||
|
||||
|-FFF-7-LLJLJLJLJ||L------J||L7L7F7LJ||LJ|F7L7F7||F7FJFJF7|L7|||||||L7|FJLJF-7L--7|FJL7|JL7FJ||||LJFJ|||L------JF--7F7F-7L-7|FJLJ|L--7L7L7F|
|
||||
J-|-J|.LJ7|LL|F--JL-------7LJ-L7LJL--JL--J|L7LJLJ||||FJFJ||FJ|||||||FJ|L7F7L7|F--J||F7||F-J|FJ|||F7L7|||FF--7F-7L-7LJLJLL7FJ||F--JF-7L7L-J-7
|
||||
|-J|FFL---J-F-JF---------7|F--7L7F-7F7|F--JFJF-7-LJLJ|FJLLJ|FJ||||LJL7|L||L7||L--7LJ|LJ|L7FJ|FJ|LJL-JLJL-JF7LJL|F7L-----7|L7||L7F7L7L7L-7JL-
|
||||
.LJF7LL-J7||L-7|-F-------J|L-7|JLJFLJL-JF-7L-JFJF7F--JL---7||FJ||||F7||FJ|FJ|L7F-JF-JF7L7||FJ|.L7F7F------JL--7LJL---7F-J|FJLJ-LJ|FJ7L-7|7LL
|
||||
|7JFL77.||-J.L||FJF------7|F-J|F-------7L7|F--JFJLJF-7F7F-JLJL7||L7||||L7||FJFJ|F-JF7||FJLJL-JF-J|LJF---7F-7F7L-7F--7LJF-JL7F7FF7|L--7.LJJ7|
|
||||
|J-LL.7--||J-FLJL-JF----7||L-7|L----7F7|FJ|L7F7L7F7|7|||L--7F-J||FJ||LJFJ||L7L-JL--J|||L7F7F-7L-7|F-JF-7LJ.LJL-7LJF7|F7L-7FJ||FJLJF7FJF|LFL-
|
||||
LFF7J-LJFJJ-F7F77F7L---7LJL--JL-7F7FJ||LJFL7LJL7LJ|L7||L7F-JL-7||L-JL7FJFJL7L7F-----J||FJ|LJFJF7LJL-7|FJF77F--7L7FJLJ|L-7LJFJ|L7F7|LJ7FJ.7J7
|
||||
||LJJ7J7||L-|LJL-J|F7F7L---7F7F7LJLJ||L--7-L7F-J.FJFJ|L7|L7JF7||L7F7FJ|FJ|FJFJ|F7F-7FJ|L7|F7L-JL7F--J|L-JL-JF-J||L---JF-JF7|FJ7LJ|L-7-|JF|FJ
|
||||
F|-JFFFFJ7|.L----7||LJL--7LLJLJL-7F--JF--JF7LJF-7|FJFJFJ|FJFJLJ|F||LJFJ|F7L7L7||LJJLJ|L-JLJL-7F7LJF7FJ7F--7FJ.F7|F7F-7|JFJ|||F--7|F7L7--J.|J
|
||||
LLJFJ--L-J-FJF7F-JLJF7F-7L7F-----J|F--JFF-JL--JFJLJJL-J.|L7L7F-JFJL-7L7LJ|F|FJ||.F7-F77F7F7F7LJ|F7|LJF7L-7|L--J|LJ||FJL7|FJ|LJF-J||L7|JJ|-J|
|
||||
LL7LJ|L-7|||FJLJF---JLJ-L7LJF7F7F7|L---7|F--7F-JF-7F7F-7|FJ-LJF-JF7FJFJF7|FJ||||FJL-JL-JLJ|||F7LJLJF7|L--JL---7L-7|||F7LJL-JF7L-7LJL||-F|L-7
|
||||
FL7JL7---7F-JF--JF77F7F--JF7|LJLJLJF7F7LJL7LLJF7L7||||FJLJF7F7L-7|||FL7|LJL7L7||L7F7F7F7F7LJLJL7F--JLJF-----7|L--JLJLJL7F7F-JL--JJ|JLJ-FL-L7
|
||||
77LF-FF-L-L--JF--JL-JLJF7FJLJF7F7F-JLJL---JF7FJ|FJLJLJL-77|||L--J||L-7|L-7FJFJLJFJ|||LJ|||F-7F7LJF----JF7F-7L--------7F|||L------7JJFLF7|JLF
|
||||
|L-77.J.L7JF-7L-----7F-JLJF7FJLJLJF--7F-7F7|||FJL--7F-7FJFJ|L--7FJ|F7|L--JL7|J|.|FJ||F-J||L7LJ|F7|F----JLJJL-----7F--JFJ||F-----7|.FFFFJ|J-F
|
||||
LJL|77-FFF7L7|F7F7F7|L7F--JLJF--7FJF-J|FJ|LJLJ|LF-7|L7LJL|FJLF-J|FJ||L7J7F-J|F-7LJ-LJL--JL-JF7|||||F--7F--------7|L--7L7||L----7LJ.LL.JFJ-FJ
|
||||
L|--.|F-FJL-JLJLJ|||L7|L-7F7FJF-JL7L--JL-JF7F7L7L7||FJF-7||.FJF7|L7|L-J|FL-7||FJF----7F-----J|LJLJLJF7||F-------JL-7FJJLJL7F7F-JL|-FFJ.|J.F7
|
||||
-|J-7|J-L-7F7F7F7LJL7LJF7LJLJ.L---JF-7F---JLJL7|FJLJL7L7||L7|FJ|L7||JFFF..FJLJ|JL---7|L-----7L-7F7F7||LJL---------7|L---7J|||L-7F7|FFJ7J.-FL
|
||||
|L77L|.7FLLJ||||L7F-JF7|L---7FF7JF-JFLJF7F---7LJ|F--7|FJLJFJLJ.L7|||J|7LF-L7F7|J.LLFJ|F7F7F7L-7LJLJLJL----7F------J|F7F7L7|||F7LJ|7L-JL-7|||
|
||||
JJ||.LF|7.F7LJLJFJL-7||L7F7FJFJL-JF7F7FJLJF--JF7|L-7LJ|F7FJF7F-7||LJ-JLF--LLJLJ77-FL7||LJ|||F7|F----7F---7|L------7LJLJ|FJ||LJ|F7|J7L7-L.FFL
|
||||
LFJFF---F-J|J.F7L--7|||-LJ||FJF---JLJLJF-7|JF-JLJF-JF-J|LJFJLJFJ||J|L--7.|7|.FLJ--|F|LJF7LJLJ|LJF--7LJF--JL--7F7F7L--7LLJFJL7JLJLJ77LJ7L-F|.
|
||||
L77LL7||L-7L7FJL---JLJL---JLJFJF--7F7F-JFJL-JF7F-JF7|F-JF7|F--JLLJF-77.L.7-.L7LLJ-F7L--JL-7F7|F7L-7L-7L-----7LJLJL7F7L--7L--JF777|.J77F-FFF7
|
||||
FJF7LL--L-L7LJF7F-----7F7F7F7|JL-7LJ|L-7|F7F7||L--JLJL7-|LJL---7LJ7L|77.F|JFLJ7-FFJ|F7-F--J||LJL-7L7FJ-F7F-7L-7F-7||L--7|F7F7|L--7JF7JL7FLJF
|
||||
|-7J7FLF77LL7FJLJF----J|LJ||||F--JF7L--JLJ||||L7F--7F7L7|F----7L7FJJLL7-FF.7.|7FLL7LJL7L---JL---7L-JL-7|LJ-L-7LJFJ|L7F7LJ|||||F--J||JJJLFJ7|
|
||||
7F|FLJ7FF7F-J||F-JF-7F7L7LLJLJL--7|L-----7|||L7|L-7LJL7LJL---7L7L77F77|7F-FJ7|F|.LL--7L-7|F-----JF7F-7LJF7LF7L--J-L-J||F7||||||J||-FJ7.F|-J.
|
||||
--JFJFLF|LJF7|FJF7L7LJL-JF7F7F7F7||F--7F7|LJL-J|F-J-F-JF-7F-7L7L7|-L77|LF.|--JLJFJJF-JF7L7L---7F-J|L7L7FJL-JL7F---7F-JLJLJLJLJL7F7F77-|-|J.|
|
||||
L|--.|.FJF-JLJL-JL-JJF7-FJLJLJLJ|LJL-7LJLJF7F-7|L--7|F7|-|L7L-JLLJ-JF--J|F-7JFLF7JFL--JL7L-7F7LJF7L-J-LJF----J|F-7|L7F---7F7F-7LJLJL7.LF7.F|
|
||||
.7FJ.J.L-J|-F-----77FJL7L----7F7L-7F7L--7L|||FJL--7|||||FJFJJ.F77L|JJ.|FLJFLF7.JJF------JF7LJL-7||.F7FF7L-----JL7LJFJL--7LJLJ|L7F-7FJ7F7JFJ.
|
||||
F-JFJJF|-L|.L--7F7|FJF7L-7|F-J||F7LJL--7L7|||L7F77LJ||||L-J.F-JL7L|-.7JLL-JJ.J7||L--7F7F7|L7F-7LJL-JL-JL-------7L--JF7F7|F7LF7|LJ7LJF-J|-|J7
|
||||
|7L|F|-|.LLFF-7LJ||L-J|F7L7|F7|LJL----7L-J||L7LJL--7||||F7F7L-7FJF7J-|7.L---..F7LJLFJ|LJ||FJ|FJF--7F----------7L--7FJLJ|||L7|L7F7F7FJF-J7LF|
|
||||
7J-FJ7.J7LLFL7L--JL---J|L7LJ|||F------JJF-JL-JF7F--JLJLJ|LJL7-|||||F-|-F7F7-77FLJLLL7|F7||L7|L7|F-J|F--------7L7F7|L--7LJ|FJL7LJLJ||FJJFJ7|7
|
||||
L-F7JJ7.7-FFJL7F-7F7F7FJ|L7FJLJL-7F--7FFJF7F--J||F7F7-F7|F--JFJL-J|7J|F777JF-77JJFLLLJ||LJ-LJ7LJL--JL----7F-7L-J||L---JF7||F7|F---J|L77|J|L|
|
||||
||||L-J|LF-|-LLJ7LJLJ|L--7LJF7F7FLJF7L7L7|LJF7.LJ|LJL-JLJL7F7|F7F7L-7-LF7FF7|F77FJ.||FJL-----7FF--7LF----J|FJF--J|F7F--JLJLJLJL----JFJFL.JJ|
|
||||
J-|F-L-F7L-|FF7F7F---JF--JF7||||F7FJL7L-JL--JL--7|F7F----7|||||LJ|F-JFL|L7||FJL7LJFF7L-----7FJFJF7L7L-----JL-JF-7||LJF--7F7F7F--7F-7|F7--.F.
|
||||
.LLJLLFJ-J-FFJLJLJF-7FJLF-J|||||||L-7L--7F7F7F-7LJ|LJF--7LJ|LJL-7LJF77JL7||||F-J7JFJL-7F---JL7L-JL7|FF7LF----7L7|LJF7L-7|||||L-7LJ7LJ-|7..F7
|
||||
|.|7F-JJ.J--L7F7F-JFJ|F-JF7LJLJLJ|F-JF7LLJLJ||JL--JF7L7FJF7|F---J.FJ|F77|LJ|||JF7JL--7|L7F7F7L----JL-JL7L---7L7||F7|L7FJLJ|||F7|F--77|L--7L.
|
||||
L-JL|7777FF||LJLJF7L7||F7|L-----7|L--J|F---7|L-----JL-JL7|LJL-7F7FL7||L7|F7|||FJL7F--JL7LJLJL7F7F-7F7F7L----JJLJLJ|L7|L-7FJ||||||F-J7JF-F-77
|
||||
FJFLJL|7-L-F-----JL7LJLJ||F-----JL----J|F--JL--7F--7F7F7LJF-7FJ||F-J||FJLJ|||LJF7|L--7FJF---7LJLJFJ||||F-7F7.F---7|FJL--JL-JLJLJ||F7J.FL--77
|
||||
J7|7|JLJ7JLL------7L7F77LJL----7F------JL----7F||F7LJLJL7FJ|LJFJ|L-7|||F7FJ||F-JLJ7F7|L7L--7|-F--JFJLJLJFLJL7|F--J|L---7F7F7F7|FJLJL-7JJ-F||
|
||||
FF|-L.|7L7|L7|FF7L|FJ||F7F-7F-7||F---7F----7FJFJLJL----7|L-7F7|FJF7||||||L7||L7F7F7||L7L7F7|L-JF-7|F--7F7F7FJ||F7||F---J|||LJL-JF7F7FJJ.-F77
|
||||
F7F-L7L-7JF--LFJL-JL-J|||L7|L7|LJL--7|L---7|L7|F7F7F7F-JL--J|LJ|FJ||LJ|||FJ|L7||LJ||L7L7LJ|L--7|FJ|L-7||LJLJJ|||L7LJF-7FJLJF7F7FJ||LJJF|.L|7
|
||||
J7L77F|L|.JJF|L------7|||FJ|FJL-----JL---7|L-J||||||LJF7|F-7|F-JL7|L7FJ|LJFJ.|LJF-JL7|7L-7L7F7LJL-JF-JLJF7|F-JLJFJF7|FJL7F-JLJLJLLJJ..FJL.L7
|
||||
L|.LLJF-JF|7FF--7F7F7||||L7|L7F7F-------7|L--7||||LJF7|L7|FJ||F-7|L-JL7L-7|F7L-7|-F-J|F7FJFJ|L7F--7L--7FJL-JF7F7L7|LJL7FJL-----7|LF-7-|7|.7|
|
||||
7||7LLLJ-FJF7L-7LJLJLJLJL-JL7LJLJF------JL---JLJLJF7|||FJ|||||L7|L---7L77|LJL7FJL-JF7||LJFJFL7||F-JF--J|F---J|||FJ|F--J|F--7F-7|F7|FJ7|FF|LJ
|
||||
L-L7.|.7.FFJ|F7L-----7F--7F7L7LF7L---------7F-7-F7|||||L7|L7||FJ|F7F7L7L-JF--JL-7F-JLJL-7|F7FJ|||F7L---JL7FF7LJLJF|L---J|LFJL7LJ|LJL7FF7L7-7
|
||||
|.FF-7-FFFL7LJL----7LLJF-J|L7L-JL7F----7F--J|FJFJ||||||FJL7||||FJ||||JL--7L7F7F-JL7F7F7F|LJ|L7LJ|||F7F7F7L-JL-----JF7F-7L7L-7L--JF-7L-JL7J-J
|
||||
77|L7L.||LFJF--7F-7L-7FJF7L7L7F7FJL---7|L---JL7L7|||||||F7|||||L7|||L-7F7|FJ||L7F7|||||FJF7L7|F7LJLJLJ|||F-7F7F7F-7||L7L7L-7L----JFJF--7|J-7
|
||||
--L-JF|LJ.L7|J7LJFJF7LJFJ|FJ-LJ|L-----JL------JFJ|||||||||||||L7LJ||F-J|||L7|L7LJ|||||||FJL-JLJL-----7|||L7|||||L7LJL-J7L--JF----7L7L7.LJJF7
|
||||
|-J-J-F-J7JLJFF7-L-J|F-JFLJF7F-JF7F--------7F-7L7||LJ||LJLJ|||7L-7|||F7|LJFJ|FJFFJLJ||LJ|F77F---7F7LFJLJ|FJLJ||L7L---------7|F---JJL-J77L7F7
|
||||
F7.FL7J.FF-LLFJ|F7F-JL7F---J|L--JLJF-----7FJ|FJFJ||F7||F---J|L-77||||||L-7S7||F7|F-7||F-J|L7L--7|||FJF-7LJF7-LJFJF7F7F--7F7LJL--7-FL-|.7F|JL
|
||||
L|7F7|.F|LF7FL7|||L-7FJL-7F7L-7F--7L7F--7LJFJ|LL7|LJ|||L---7L-7|FJLJ|||F-JFJ|LJ|LJ-|LJ|F7L7|F-7||||L-J||F7||F7.L-JLJ|L-7|||F7F-7L7L|---L7|.|
|
||||
F-J|J.FFF-J|F-J||L--JL--7LJL-7|L-7L-J|F-JF7L7L7FJL-7|LJF---JF7||L-7FJ||L-7|J|F7L7F7|F7LJL-J|L7||LJL--7FJ|LJLJL7F7F7JL--JLJLJ|L7L-JL--|.LF77.
|
||||
-JJL.FLLL-7|L-7LJF---7F7|7F7FJ|F7L---JL--JL7|FJL7F-JL-7|FF7F|LJ|F7||FJL7FJL7LJL7|||LJL-7F--JFJ|L--7F-JL-JF-7F7LJ|||F-------7L7L--77.FF-F.L77
|
||||
FLFJ-J.LLFJL--JF7|F--J|||FJ|L7|||F---------J|L-7|L7-F7|L7|L7L7FJ|LJ|L-7|L7FJF-7|LJL7F--J|F7FJFJF--J|F7F--JJLJ|F-J|LJF---7F7L7|F7FJ-L-J|.F.L7
|
||||
|-7J.J...L-7F7FJ|||F7FJLJL7L-JLJ|L------7F7-|F-JL7L7|||FJ|FJFJL7L7FJ|FJL7|L7|FJL7F-JL-7FJ||L7||L--7|||L-----7LJF7|F-JF7-LJL-J|||||.L|FJ7L-7|
|
||||
|FJ..|-7FLLLJLJ.LJLJLJF-7-L7F7F7L---7F--J||FJ|F7FJFJ|||L7||FJF-J7||F7L-7LJFJ||F7|L-7F7||FJL7||F7F-JLJ|7F7F-7L-7|||L--JL-----7LJ|L-7-LF-L..77
|
||||
F-JJ-|.FFF--7F-7JF---7L7|F7||LJL-7F7LJLF7|||FJ||L7L7|||FJ||L7|JF7||||F7|F-JJ||||L-7|||||L7FJ||||L--7FJFJ|L7|F7LJLJF-----7F--JF7L--J7.J-|7..|
|
||||
7JJ-7J7FFJF7|L7|FJF-7L-JLJLJ|F--7LJ|F--J||LJL7||LL7|||||FJ|FJ|FJ||||||||L-7FJ|||F7|||||L7|L7|LJ|F7FJ|-L7L-JLJL---7L7F--7LJF7FJL-7JJL7.L7J7-L
|
||||
LF-FF---JFJ|L7||L-J-L-----7FJ|F7L--J|F--JL7F-J||F7||||||L7|L7|L7||||||||F-JL7||||||||||FJ|FJ|F-J||L7|F7L--7-F--7LL-J|F-JJ-|||F--J7||77LJ||7|
|
||||
7|FFL7F7FJ.L7LJL-7F7JF77F-J|JLJL7F-7||F7F7|L7FJ||||||LJ|FJL7|L7||||||||||F-7||||||||||||FJL7|L7FJ|FJ||L7F7L7|F-JF---JL-7FFJ|||F-7J-.FJ-LJ7-J
|
||||
L-7--LJLJF--JF7F7LJL-JL-JF7|F---J|FJ|||||||FJL7LJ|||L-7||F7|L7||||||||||||FJ|||||||||||LJF-JL7||FJ|FJ|-||L7LJL--JF--7F7L7|FJ|LJFJ.L-J--F|L|.
|
||||
.|||7.||-L---J||L7F7F-7F7|||L-7F7|L7|||||||L7FJF7||L7FJLJ|LJFJ||LJLJ||||||L7|LJ||||||||F7L---JLJL7|L7|FJL7L7F7F--JF7||L7LJL-JF-JJJF|JFF.J-FF
|
||||
|J|-7F|FF--7F7||.LJLJFJ|||LJF-J|||FJ||||||L7|L7|LJL7||F--JF-JFJL7LF7LJ||||.|L-7||LJLJ|LJL--7F---7||F|||F7|FJ||L7|FJ|||FJF-7F7L--7JJLL|JL-F|J
|
||||
|FJ||7LFJF7LJ|LJF7-F7L7|LJF-JF7|||L7|||LJL7|L7|L7F-JLJL-7FJJFJF7L7||F-J|||FJF-JLJLF7FJF-7F7LJF-7|||FJ|||||L7|L7L-JFJLJL7|F||L---JJ|..|-|FL77
|
||||
F--|L-JL-J|F7L--JL-JL-JL7FJF7|LJ|L7||LJF--JL7||FJL---7F7||F-JFJL7LJ|L7FJLJL7|.F77FJLJFJ-||L-7L7LJ||L7|||||L||FL---JJF77|L7|L7F7JF7J---7F7|L7
|
||||
FJJLJ.FF7|LJL------7F7F-J|FJ||F-JFJ||F-JF7F7|||L7F7F7||LJ||F7L-7|F7|FJ|F---JL7|L7|F7FJF-JL-7|FJF7LJFJ|LJLJFJL-------JL7L7|L7LJL-J||JL|-LJ-LF
|
||||
-JFL.F7|L--7F------J||L-7LJ|LJL7FJ-LJ|F7|LJLJ|L7||||||L-7|||L7FJLJLJL-JL--7F7LJFJLJ|L7|F7F7||L-JL7.|FJF---JF7F----7F-7L7LJFJF7F--J77-|||7..|
|
||||
|L|LFJ|L--7|L---7F-7||F7|F---7FJL7F7FJ||L7F--JFJLJ||||F-J||L7|L----7F-----J||F7|F--JFJLJ||LJL7F-7L7|L7|F7F7||L---7LJ7L7L-7L-J||F|.F77.-L-7F-
|
||||
L7-FL7L---JL----J|FJ||||||F-7LJF-J|LJFJ|FJL-7FJF7LLJ|||F7|L7|L7F-7FJL--7F7FJ||||L7F7L7|FJL77FJL7L-JL-JLJLJLJL7F--JF7F7L-7L--7|L777JLF7FJLF|J
|
||||
|.LJ.L----7F7F--7||FJ||||||FL-7L-7L7FJ|||F--JL-JL7F7||||||FJ|-|L7|L7F-7|||||||||FJ|L7L7|F7L7|F7L----7F7F7F---JL---JLJL7J|F7FJ|FJL-.FL.L7.|L7
|
||||
-JFL.|7FLFJ|LJF-J|||FJ||||L7-FJF-J.|L-7||L--7F7F7||LJ|||LJL7L7|FJ|FJL7LJ||L7LJ||L7L7L7|LJL-JLJ|F-7F7LJLJ||F--7F7F7F7F7L7||LJL||-F.F||-L-F|-.
|
||||
JF-JFL-7-L7|F-JF-JLJL7||||FJFJFJF--JF7|||F--J|LJLJL7FJLJF--JFJLJJ||F-JF7|L7L7FJL7L-JJ|L-----7FJ|FJ||F7F7|||F-J|||||LJ|FJ|L--7LJJ|---F-J7-JFF
|
||||
J7.L-7.-F-J||F7L--7F7||||LJLL7|FJF7FJ|||||F-7L--7F-JL7F-JF-7L---7LJL7FJ||LL-J|F7L-7F-JF---7FJL-JL7|LJLJ||LJ|F7||||L-7LJFJF7FJ-|7L-JJ..||.LFJ
|
||||
F|-FJ---|F7|LJ|F--J|LJ|||JF--J||FJ||LLJ||LJ-|F7FJL7F7|L7FJFJF7F7|-F-J|FJL7F--J|L7FJL-7L-7|LJ|.F--JL--7FJ|F-J|||||L7FJF7L-JLJ.||F-JJ.-7L|7--7
|
||||
FL-F7FJFLJ||F-JL-7LL7FJLJ.L--7|||7|L-7FJ|F--J||L-7||||FJL7L7|LJLJFJF7|L7FJ|F-7L7||LF-JF7L---7FJF7F7F7|L7|L-7|||LJ-|L-JL----7-|L7-||FLJ7L|7|J
|
||||
-.FL||-FJ||||F-7FJ.LLJJF|-J|LLJ||FJF7|L7||F7FJ|F-J||||L--J7|L---7L-JLJFJL7||F|FJ|L7L-7|L----JL7|LJ||LJJLJF-J||L--7L7F7F-7F-J7JF---JLJ-|7LF77
|
||||
L-7JLL.-JFLJ||||L7FLL|-J.|JLF--J|L7|LJFJ||||L7|L-7||||F----JF-7FJ|F---JF-J|L7||JL-JFFJL---7F-7|L-7|L---7FL7FJL7F-JL||||FJL7.F----J|F-7J--J|7
|
||||
|--.7JF77.LFJL7L-J7|F|||77|.L7F7|FJL-7L7|LJL7||F7|LJ|||F---7L7||F-JF7F7|F-JFJLJF----JF7F--J|FJL-7||F---JF-J|F-J|F-7||LJL7FJ.|LJJ|JFL-JJ77F-J
|
||||
F7-7|-F7-|JL-7L7LF7-L|JJL||-LLJLJL7F7|LLJ|F-J|||LJJFJ|||F--JFJLJ|F7|LJ|||F7L--7L-7F7FJ|L---JL--7LJ||F7|FJF7||F7LJFJ||JJJ||-77J.-7F7L7.LFLJ7|
|
||||
||FF|7L7-|-|-|FJ-LJ.FJJ.F7|7.|7L-|LJLJ7JF7L-7||L--7|FJLJL-7FJF7-|||L-7||||L7F-JLFJ||L7L7F7F7F-7|F-JLJL7|FJ||||L7FJ|LJ--FJL7|FJFLJF7-|7J.L7L|
|
||||
L-J|..FJL7.J.LJ|-L7J77.F|J7F-77|.F7LJ|L-|L--J||F7FJ|L7F---JL-J|FJ||F7|LJ|L7|L-7F|FJL-JFJ||||L7||L7F7F7|||-||||FJL-7.LFLL7FJJ|-F.-FJ7FL.F7|.|
|
||||
|J-F7-77-LJLJ|J7-7JL|FJ-||-7LLJ-JLJ|||.LL7F7FJLJ|L7L7|L-7F7F-7|L-J||LJF-JFJ|F7|FJL--7FL-J|||FJ|L7||||LJ|L7LJ||L7F-JFFJJJLJ.||LLJLL-J.LJJ-L-7
|
||||
|.7---L|-|F7J|-77|--.J|F77.|.L|..|-|-LJJ-LJ|L7|FJFJJLJF-J||L7LJ|7LLJ7FJF7L7LJLJL7F--JF---J||L7L-JLJ|L-7L7L7.LJ.|L7|F77|J|J7FL7L|7LF-L-|J.7-L
|
||||
F77.|F7.FJ-J.JJLJ|JL|LLL-J.FF.|F-L7J7LJ77|-L-JFJFJJLF-JF7|L7L7L|J-|FFJFJ|FJ7F-7FJL7F-JF7F7|L7L---7FJF-JFJFJFJ-LL7|J77FJ.LJLJFL-FJ.F7.L7.FL-J
|
||||
FLF-|JL7||FL-JL||F..JJFJ.L.|L.F|J-F-|7L-|F-JJLL-JJLFL7FJLJFJFJ.|--J-|FJFJ|F7L7LJF-J|F7|||LJ7|F7F-JL7L7FJFJ.|7.LLLJL--FJF||L77|.|FF--7.JF-|F|
|
||||
L.|-77LFFF7JL7-LJ|--7F7-L77-.7.|..JJ.L7|.LJF7J|FJ|F|LLJ7L-L7||-|-JFFLJ-L7LJ|FJF7|-FJ||||L-7FJ|||-|FL-JL7|J7LLJ.F|.||J|FLJ-|LJ.FLFJ.|FFJL7J||
|
||||
.FL-J--||LF-|-F-|7|JF-JLLJJ7.LFFJ7J..FF--.FF7.L|LL||-LLJL7JLJ7FL-.FL..F-JF7|L7|LJJL7|LJL7FJ|FJ||FLLJ||-LJ.F-|L7J|F7L.LF|7-L|7FLL|J---L-L7F|J
|
||||
FJJ7.|-F|7JF|LLF-L77..|7.FF7-.LF7JLFJ|L7J..FJ-J..|||77||.||L.LJJ.F|.F-L-7|LJFJ|J|7.||.F-JL7LJL|L7||F|7.L|-LF--F-7LJ.L.F.|.||-JLLJ.-.|7J|L7J7
|
||||
|JJF7.L|LJ.LL77|J-|J7-J|FFLJ7.JLJL7J|7LL7.F|7-L-L-LJL7-|7L7|.|7--JFF|.LLLJJLL-J.L|-LJFJF-7L7JFL7L7LJLF7FF-77LLJJLJ.7J-L-7.L7L|7L7FLFF77|F|JL
|
||||
L7FJF-7F.LFJ|JL--7|-|FL-FJ7-|.L--L|--|7F-7|JL7-JJF|-FJ.LJ.-F7|--L7LJ|7-J7-F7-L-7LJ.|L|FJFJFJ.|.L-J.|7L7|||LJ-F77FJ-J-FLJ|F-7.|7-|JL-J.7-J..|
|
||||
.JJJ|JFL7F|FJ7..LL|-|7FFL-J||JFL-J.F||.L.L-77|F---J|JFJ.L7LFJJ7LJLF7|7.LF-FJ7LF|7FJ7JLJLL7|JJ--JJ7.F|-|77F||JLL-|...FJ7F|7-|F|7L|.7|F-|J.FF7
|
||||
J-LF|.|7|7|L-F-77-L-.|LJL7LLF.|JJ.L--J7JJ|LJFLF777LL-J-F.|-7JFJ.|FJ|L-7F7||-|7|---J7.||J7LJ.FL.L7LL7|-|L7-J|..|7J7.7J7F.L|J|7LL-7-L-J-|7FFJJ
|
||||
LF.FJF7-|-L--FL7L-7|-F.F-JL|.LF7F7L7-7JJFLLFFJ.LJ7-L|FF|F|.|7|.7J7...|LLL-F-7J.JFFF-7F.LFJJ-7.|7L7JLF7|F|J.|F7FJ...J||JJFF7LJF.FL7L-J.L-77|7
|
||||
F--JJL-7J|LJLJJLF-L7---J-|.J-.JLJJLL7JL7JJ.7.L|LLJ-.L-J-7J-L7LLJ---FJ-LJJ..JLL7.L-JLLLL-7-FJLF77L---7JJLJ.LFJL--F-F-JJ.LLJ|-F7-JJ.JJ.JJF7--7
|
||||
193
day10/main.zig
193
day10/main.zig
|
|
@ -1,193 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Coord = struct { row: usize, col: usize };
|
||||
|
||||
pub fn main() !void {
|
||||
const grid = @embedFile("data.txt");
|
||||
const width = std.mem.indexOf(u8, grid, "\n").?; // can't do this at comptime. damn
|
||||
const height = grid.len / width - 1;
|
||||
const start = std.mem.indexOf(u8, grid, "S").?;
|
||||
const startCoord = indexToCoord(start, width);
|
||||
const allStartingNeighbors = neighbors(startCoord, width, height);
|
||||
|
||||
// find the 2 path starting points
|
||||
var paths: [2]Coord = undefined;
|
||||
var pathIndex: u2 = 0;
|
||||
|
||||
for (allStartingNeighbors, 0..) |neighbor, dir| {
|
||||
if (neighbor) |c| {
|
||||
const value = grid[coordToIndex(c, width)];
|
||||
var validPath = false;
|
||||
if (dir == 0 and (value == '|' or value == 'F' or value == '7')) {
|
||||
validPath = true;
|
||||
}
|
||||
if (dir == 1 and (value == '-' or value == 'J' or value == '7')) {
|
||||
validPath = true;
|
||||
}
|
||||
if (dir == 2 and (value == '|' or value == 'J' or value == 'L')) {
|
||||
validPath = true;
|
||||
}
|
||||
if (dir == 3 and (value == '-' or value == 'F' or value == 'L')) {
|
||||
validPath = true;
|
||||
}
|
||||
if (validPath) {
|
||||
paths[pathIndex] = c;
|
||||
pathIndex += 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
// capture the loop's coordinates in a map
|
||||
var loop = std.ArrayList(Coord).init(allocator);
|
||||
defer loop.deinit();
|
||||
|
||||
try loop.append(startCoord);
|
||||
try loop.append(paths[0]);
|
||||
|
||||
// count the steps
|
||||
var steps: u16 = 1;
|
||||
var totalSteps: u16 = 0;
|
||||
var prevs = [2]Coord{ startCoord, startCoord };
|
||||
|
||||
while (true) {
|
||||
// for each of the 2 paths
|
||||
for (0..2) |i| {
|
||||
const temp = visit(paths[i], prevs[i], grid, width).?;
|
||||
|
||||
if (i == 0) {
|
||||
// try loop.put(temp, {});
|
||||
try loop.append(temp);
|
||||
}
|
||||
|
||||
prevs[i] = paths[i];
|
||||
paths[i] = temp;
|
||||
}
|
||||
|
||||
steps += 1;
|
||||
|
||||
// if the two paths converge (and not at the starting point again)
|
||||
if (paths[0].row == paths[1].row and paths[0].col == paths[1].col and (paths[0].row != startCoord.row or paths[0].col != startCoord.col)) {
|
||||
totalSteps = steps;
|
||||
}
|
||||
|
||||
// for part 2, continue the first path until it gets back to the beginning
|
||||
if (paths[0].row == startCoord.row and paths[0].col == startCoord.col) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{totalSteps});
|
||||
|
||||
// Part 2
|
||||
var visited = std.AutoHashMap(Coord, void).init(allocator);
|
||||
defer visited.deinit();
|
||||
|
||||
// scarn left to right, keeping track of if we're "in" or "out" of the loop
|
||||
var numVisited: u16 = 0;
|
||||
for (0..height) |r| {
|
||||
var in: bool = false;
|
||||
var lastAngle: ?u8 = null;
|
||||
|
||||
for (0..width) |c| {
|
||||
const coord = Coord{ .row = r, .col = c };
|
||||
const value = grid[coordToIndex(coord, width)];
|
||||
|
||||
const onLoop = contains(&loop, coord);
|
||||
if (onLoop) {
|
||||
if (value == 'S') {
|
||||
lastAngle = 'L'; // '7' for test data.. TODO don't hard code this
|
||||
} else if (value == '|') { // hit a part of the loop. toggle "in"
|
||||
in = !in;
|
||||
} else if (value == 'L' or value == 'F') { // we're starting to go "along" the loop
|
||||
lastAngle = value;
|
||||
} else if (value == '7' or value == 'J') { // we're coming out of the edge of the loop
|
||||
if ((value == '7' and lastAngle == 'L') or (value == 'J' and lastAngle == 'F')) {
|
||||
in = !in;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!onLoop and in) { // if we aren't on a loop, and inside, add it to the list!
|
||||
numVisited += 1;
|
||||
try visited.put(coord, {});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
printGrid(grid, width, visited, &loop);
|
||||
std.debug.print("Part 2: {any}\n", .{numVisited});
|
||||
}
|
||||
|
||||
fn printGrid(grid: []const u8, width: usize, visited: anytype, loop: anytype) void {
|
||||
for (grid, 0..) |value, idx| {
|
||||
const c = indexToCoord(idx, width);
|
||||
if (contains(loop, c)) {
|
||||
const code: u16 = switch (value) {
|
||||
'-' => 0x2501,
|
||||
'|' => 0x2503,
|
||||
'F' => 0x250F,
|
||||
'7' => 0x2513,
|
||||
'J' => 0x251B,
|
||||
else => 0x2517,
|
||||
};
|
||||
std.debug.print("{u}", .{code});
|
||||
} else if (visited.get(c) != null) {
|
||||
std.debug.print("X", .{});
|
||||
} else if (value == '\n') {
|
||||
std.debug.print("{c}", .{value});
|
||||
} else {
|
||||
std.debug.print(".", .{});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn contains(ar: *std.ArrayList(Coord), item: Coord) bool {
|
||||
for (ar.items) |i| {
|
||||
if (i.row == item.row and i.col == item.col) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
// pass it a coordinate and the previous coordinate, and it finds the next one
|
||||
fn visit(c: Coord, prev: Coord, grid: []const u8, width: usize) ?Coord {
|
||||
const value = grid[coordToIndex(c, width)];
|
||||
|
||||
return switch (value) {
|
||||
'-' => Coord{ .row = c.row, .col = if (prev.col < c.col) c.col + 1 else c.col - 1 },
|
||||
'|' => Coord{ .row = if (prev.row < c.row) c.row + 1 else c.row - 1, .col = c.col },
|
||||
'F' => if (prev.row > c.row) Coord{ .row = c.row, .col = c.col + 1 } else Coord{ .row = c.row + 1, .col = c.col },
|
||||
'7' => if (prev.row > c.row) Coord{ .row = c.row, .col = c.col - 1 } else Coord{ .row = c.row + 1, .col = c.col },
|
||||
'J' => if (prev.row < c.row) Coord{ .row = c.row, .col = c.col - 1 } else Coord{ .row = c.row - 1, .col = c.col },
|
||||
'L' => if (prev.row < c.row) Coord{ .row = c.row, .col = c.col + 1 } else Coord{ .row = c.row - 1, .col = c.col },
|
||||
else => null,
|
||||
};
|
||||
}
|
||||
|
||||
// returns all neighboring coordinates, or null if it would be off the grid
|
||||
fn neighbors(c: Coord, width: usize, height: usize) [4]?Coord {
|
||||
const up = if (c.row > 0) Coord{ .row = c.row - 1, .col = c.col } else null;
|
||||
const right = if (c.col < width - 1) Coord{ .row = c.row, .col = c.col + 1 } else null;
|
||||
const down = if (c.row < height - 1) Coord{ .row = c.row + 1, .col = c.col } else null;
|
||||
const left = if (c.col > 0) Coord{ .row = c.row, .col = c.col - 1 } else null;
|
||||
|
||||
return [_]?Coord{
|
||||
up,
|
||||
right,
|
||||
down,
|
||||
left,
|
||||
};
|
||||
}
|
||||
|
||||
fn coordToIndex(c: Coord, width: usize) usize {
|
||||
return c.row * (width + 1) + c.col;
|
||||
}
|
||||
|
||||
fn indexToCoord(index: usize, width: usize) Coord {
|
||||
return Coord{ .row = index / (width + 1), .col = index % (width + 1) };
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
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
|
||||
140
day11/data.txt
140
day11/data.txt
|
|
@ -1,140 +0,0 @@
|
|||
..............#..........................#.....................#.....#...................#..................................#...............
|
||||
.............................#.........................................................................................#..........#.........
|
||||
#......................#.................................................#.....................#...........#................................
|
||||
......#..............................#........................................#.............................................................
|
||||
................................#...........#.........#.............................................................#.....#..........#......
|
||||
..................#...................................................#...................#.................................................
|
||||
............................#...............................................................................................................
|
||||
........#.....#...............................................................................#...............#.............................
|
||||
#...................................#.....#.........................................#.....................................................#.
|
||||
..........................................................................#........................#..............#........#........#.......
|
||||
.....#.....#.............#.......................#..........................................................................................
|
||||
..............................#.............................#....................#......#...................................................
|
||||
............................................................................................................................................
|
||||
.......................................#....................................#........................................#......................
|
||||
.......#................................................#..............#............................#.......................................
|
||||
................#.................................................#.........................................#...............................
|
||||
.....................#.........................#.....................................#......................................................
|
||||
...............................................................................................#..................................#.........
|
||||
.#......................................................................................................................#...................
|
||||
........#...................................................................................................................................
|
||||
...............................#...........#.............#...............................#...........#...................................#..
|
||||
.............#.....#.............................................#.....#......................................#.............................
|
||||
............................................................................................................................................
|
||||
.......................#...........#.................#..............................#....................................#..................
|
||||
...............................................................................#.....................................................#......
|
||||
..#......#.............................#............................#..................................#........................#...........
|
||||
.............................#..........................#......#...........#................................................................
|
||||
....................#.........................#..................................................#..........................................
|
||||
......#............................................................................................................#........................
|
||||
...........................................................................................................#................#...............
|
||||
#..............#...................#.............................................#........................................................#.
|
||||
.........................................#.........................................................#........................................
|
||||
.....................#............................................#.....................#...................................................
|
||||
.................................................#......#...................................................................................
|
||||
.........................................................................................................#..............#.......#...........
|
||||
...............................#..................................................................................#...................#.....
|
||||
..........................#.........................#...........#..............#..........#..................#..............................
|
||||
..........................................#.............................#...................................................................
|
||||
............#......#................................................................................#.......................................
|
||||
................................................................................................................#.....#....................#
|
||||
...#.........................#................#...............................................................................#.............
|
||||
......................#..................................#.............................#...................#................................
|
||||
.......................................................................#.....#.................#............................................
|
||||
.......#..................#.........................#....................................................................................#..
|
||||
..........................................................................................#....................#............................
|
||||
........................................#........................#.....................................................#....................
|
||||
...................#.....................................................#.......#.............................................#............
|
||||
..............................#.................#...........................................................................................
|
||||
..#..................................................#......#................#.............................................#.........#.....#
|
||||
...........#..................................................................................#.....................#.......................
|
||||
.....................................................................................................#...........................#..........
|
||||
................#......................#........................................................................#...........................
|
||||
............................................................................................................................................
|
||||
.......#..............#............#............................#......#................#.....................................#.............
|
||||
............................................#........#.........................................#............................................
|
||||
..............................#..............................................................................#.......................#......
|
||||
............................................................................................................................................
|
||||
....................#............................................................#..............................................#...........
|
||||
......................................#..............................................................#...................................#..
|
||||
..........#.....................#.......................................#..............#....................................................
|
||||
............................................................................................................................................
|
||||
....#.....................#..................#......#.......#.................#...........................................#.................
|
||||
....................................#.........................................................#....................#.............#..........
|
||||
....................................................................................................#.......................................
|
||||
.................................................................#........................................#.................................
|
||||
..................#...................................................................................................#.....................
|
||||
.........................................................................#......................#...........................................
|
||||
#......................................................#...........................#............................#.........#.................
|
||||
...........................#............#..........................................................................................#........
|
||||
..................................................................#......................#..................................................
|
||||
................#................................#...........................#..............................................................
|
||||
........#.....................................................................................................................#.............
|
||||
...................................#........................................................................................................
|
||||
.......................#.....#................................................................................#.............................
|
||||
.#...........#...........................................#.................#....................#...........................................
|
||||
..........................................................................................#............#................#...................
|
||||
..........................#..........#......................................................................................................
|
||||
.....#...............................................................................#.....................#.....................#..........
|
||||
............................................................................................................................................
|
||||
..........#............#................................#.....................#..................................#..........................
|
||||
...............#...................#.........................#....................................#..................................#......
|
||||
............................................................................................................................................
|
||||
...........................................................................................................................................#
|
||||
...#.....................................................................................................#..................................
|
||||
......................#.............................#..........................#..............................#.............................
|
||||
..........................................#...................#..........#..........................#...............#.......................
|
||||
..............................#.....................................................................................................#.......
|
||||
.........................................................#................................#.................................................
|
||||
...............................................#............................................................................................
|
||||
..........#...........................#..............#..........................#.........................#...................#.............
|
||||
#.....................................................................................#.....................................................
|
||||
.....#............................................................#..........................#.................#............................
|
||||
...........................#.......#..............#.................................................................#.......................
|
||||
.......................................................................................................#....................................
|
||||
........#..........#.....................#..................#......................#......................................#...............#.
|
||||
.............#.........................................................#....................................................................
|
||||
................................................................#...........................................................................
|
||||
.....#.................#.................................................................#......................#.....#..........#..........
|
||||
................................#......#.............#.........................................#.....#......................................
|
||||
...........................................................................#.........................................................#......
|
||||
..........#................#................................................................................................................
|
||||
.................................................#..............................#..........................................#................
|
||||
.....................................................................................#.................#.........#..........................
|
||||
.......................................................................#....................................#............................#..
|
||||
...............#......#....................................#................................................................................
|
||||
.........#...............................#..........#..........................................................................#............
|
||||
...............................................................#.................#.........#.....#......................#...................
|
||||
............................#.....#.........................................................................................................
|
||||
......#..........................................#.......#...........................................................................#......
|
||||
..............#...................................................#........................................#......#.........................
|
||||
.............................................................................#..............................................................
|
||||
.....................................#................................#................................................#....................
|
||||
..........#..................#..............................#.............................#.................................................
|
||||
....#.....................................................................#......#............................................#.............
|
||||
......................#.................................#..............................................#....................................
|
||||
.............#..............................................................................................................................
|
||||
..........................................#......#...............................................#..........#...............................
|
||||
.........................#......#.......................................................#...............................................#...
|
||||
...........................................................#.................................#...................#..........................
|
||||
...#...............#..................#..............#....................#...........................................#.....................
|
||||
.....................................................................#...........#..........................................#......#........
|
||||
..............................#...............#.................................................#......#....................................
|
||||
........#.....#.............................................................................................................................
|
||||
#........................................................#.............................#.......................................#.......#....
|
||||
....................#..................................................#....................................................................
|
||||
..........................................#......................#..........................................................................
|
||||
.........................#...........................#.............................................#............#.........#.................
|
||||
.....................................................................................................................#..............#.......
|
||||
..........#...................................#............................................................#..................#.............
|
||||
.....#..........#...................#........................................#..............................................................
|
||||
.....................................................................#.........................#.......#....................................
|
||||
......................#......#..............................................................................................................
|
||||
.#......#...................................................................................................................................
|
||||
.................................#....................................................#...........#......................#...............#..
|
||||
.................#..................................#.........#.........#...........................................................#.......
|
||||
..............................................#..................................#..........................................................
|
||||
...........................#..........................................................................#.........#...........................
|
||||
..........................................#.................................................................................................
|
||||
.....................................#...........#..................#.........................................................#.............
|
||||
..................#....................................#.............................#...........#........#.............#...................
|
||||
158
day11/main.zig
158
day11/main.zig
|
|
@ -1,158 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Galaxy = struct { row: usize, col: usize };
|
||||
|
||||
pub fn main() !void {
|
||||
const content = @embedFile("data.txt");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
// put into ArrayList of ArrayLists
|
||||
var grid = try parseGrid(content, allocator);
|
||||
defer grid.deinit();
|
||||
std.debug.print("grid: {any}\n", .{grid});
|
||||
|
||||
// find empty rows
|
||||
const emptyRows = try findEmptyRows(grid, allocator);
|
||||
std.debug.print("empty rows: {any}\n", .{emptyRows});
|
||||
|
||||
// find empty columns
|
||||
const emptyColumns = try findEmptyColumns(grid, allocator);
|
||||
std.debug.print("empty cols: {any}\n", .{emptyColumns});
|
||||
|
||||
// duplicate empty rows
|
||||
// NOTE: not doing this any more, using Part 2 solution for Part 1
|
||||
//
|
||||
// for (emptyRows.items, 0..) |row, i| {
|
||||
// try grid.insert(row + i, grid.items[row + i]);
|
||||
// }
|
||||
//
|
||||
// // duplicate empty columns
|
||||
// for (emptyColumns.items, 0..) |col, i| {
|
||||
// for (grid.items, 0..) |_, row| {
|
||||
// try grid.items[row].insert(col + i, '.');
|
||||
// }
|
||||
// }
|
||||
|
||||
// find original galaxy locations
|
||||
var galaxies = std.ArrayList(Galaxy).init(allocator);
|
||||
for (grid.items, 0..) |row, i| {
|
||||
for (row.items, 0..) |char, j| {
|
||||
if (char == '#') {
|
||||
try galaxies.append(Galaxy{ .row = i, .col = j });
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var galaxies1 = std.ArrayList(Galaxy).init(allocator);
|
||||
var galaxies2 = std.ArrayList(Galaxy).init(allocator);
|
||||
|
||||
for (galaxies.items) |g| {
|
||||
const row = g.row;
|
||||
const col = g.col;
|
||||
|
||||
// how many expanded rows & cols before this galaxy?
|
||||
var expandedRows: usize = 0;
|
||||
for (emptyRows.items) |r| {
|
||||
if (r > row) {
|
||||
break;
|
||||
}
|
||||
expandedRows += 1;
|
||||
}
|
||||
|
||||
var expandedColumns: usize = 0;
|
||||
for (emptyColumns.items) |c| {
|
||||
if (c > col) {
|
||||
break;
|
||||
}
|
||||
expandedColumns += 1;
|
||||
}
|
||||
|
||||
const expansionFactor = 1_000_000;
|
||||
|
||||
try galaxies1.append(Galaxy{ .row = row + expandedRows, .col = col + expandedColumns });
|
||||
try galaxies2.append(Galaxy{ .row = row + (expansionFactor - 1) * expandedRows, .col = col + (expansionFactor - 1) * expandedColumns });
|
||||
}
|
||||
|
||||
// add up all their distances
|
||||
var part1: usize = 0;
|
||||
for (0..galaxies1.items.len - 1) |i| {
|
||||
for (i + 1..galaxies1.items.len) |j| {
|
||||
part1 += dist(galaxies1.items[j], galaxies1.items[i]);
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{part1});
|
||||
|
||||
var part2: usize = 0;
|
||||
for (0..galaxies2.items.len - 1) |i| {
|
||||
for (i + 1..galaxies2.items.len) |j| {
|
||||
part2 += dist(galaxies2.items[j], galaxies2.items[i]);
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("Part 2: {d}\n", .{part2});
|
||||
}
|
||||
|
||||
fn dist(a: Galaxy, b: Galaxy) usize {
|
||||
const x = if (a.row > b.row) a.row - b.row else b.row - a.row;
|
||||
const y = if (a.col > b.col) a.col - b.col else b.col - a.col;
|
||||
return x + y;
|
||||
}
|
||||
|
||||
fn findEmptyColumns(grid: std.ArrayList(std.ArrayList(u8)), allocator: std.mem.Allocator) !std.ArrayList(usize) {
|
||||
var cols = std.ArrayList(usize).init(allocator);
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
|
||||
for (0..width) |col| {
|
||||
var allEmpty = true;
|
||||
for (0..height) |row| {
|
||||
if (grid.items[row].items[col] == '#') {
|
||||
allEmpty = false;
|
||||
}
|
||||
}
|
||||
if (allEmpty) {
|
||||
try cols.append(col);
|
||||
}
|
||||
}
|
||||
return cols;
|
||||
}
|
||||
|
||||
fn findEmptyRows(grid: std.ArrayList(std.ArrayList(u8)), allocator: std.mem.Allocator) !std.ArrayList(usize) {
|
||||
var rows = std.ArrayList(usize).init(allocator);
|
||||
|
||||
for (grid.items, 0..) |row, idx| {
|
||||
var allEmpty = true;
|
||||
for (row.items) |char| {
|
||||
if (char == '#') {
|
||||
allEmpty = false;
|
||||
}
|
||||
}
|
||||
if (allEmpty) {
|
||||
try rows.append(idx);
|
||||
}
|
||||
}
|
||||
return rows;
|
||||
}
|
||||
|
||||
fn parseGrid(content: []const u8, allocator: std.mem.Allocator) !std.ArrayList(std.ArrayList(u8)) {
|
||||
var grid = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var al = std.ArrayList(u8).init(allocator);
|
||||
for (line) |char| {
|
||||
try al.append(char);
|
||||
}
|
||||
|
||||
try grid.append(al);
|
||||
}
|
||||
|
||||
return grid;
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
|
|
@ -1,71 +0,0 @@
|
|||
const fs = require("node:fs");
|
||||
|
||||
let data;
|
||||
try {
|
||||
data = fs.readFileSync("test.txt", "utf8");
|
||||
} catch (err) {
|
||||
return
|
||||
}
|
||||
|
||||
const lines = data.trim().split("\n");
|
||||
var part1 = 0;
|
||||
var part2 = 0;
|
||||
|
||||
lines.forEach((l) => {
|
||||
const parts = l.split(" ");
|
||||
const map = parts[0];
|
||||
const damaged = parts[1].split(",").map(Number);
|
||||
// const all = allArrangements(map)
|
||||
// const valid = all.filter((m) => isValid(m, damaged));
|
||||
// part1 += valid.length;
|
||||
|
||||
const map2 = [map, map, map, map, map].join("?");
|
||||
const damaged2 = [damaged, damaged, damaged, damaged, damaged].flat();
|
||||
// console.log(damaged2);
|
||||
const all2 = allValidArrangements(map2, damaged2);
|
||||
console.log("all2", all2);
|
||||
part2 += all2.length;
|
||||
});
|
||||
|
||||
// console.log("part1", part1);
|
||||
console.log("part2", part1);
|
||||
|
||||
function allValidArrangements(map, damaged, index = 0) {
|
||||
const i = map.substring(index).indexOf("?");
|
||||
if (i === -1) {
|
||||
return map;
|
||||
}
|
||||
|
||||
const one = allValidArrangements(replaceAt(map, i + index, "#"), damaged, index + 1);
|
||||
const two = allValidArrangements(replaceAt(map, i + index, "."), damaged, index + 1);
|
||||
return [one, two].flat();
|
||||
}
|
||||
|
||||
|
||||
function allArrangements(map, index = 0) {
|
||||
const i = map.substring(index).indexOf("?");
|
||||
if (i === -1) {
|
||||
return map;
|
||||
}
|
||||
|
||||
const one = allArrangements(replaceAt(map, i + index, "#"), index + 1);
|
||||
const two = allArrangements(replaceAt(map, i + index, "."), index + 1);
|
||||
return [one, two].flat();
|
||||
}
|
||||
|
||||
function replaceAt(str, index, replacement) {
|
||||
return str.substring(0, index) + replacement + str.substring(index + replacement.length);
|
||||
}
|
||||
|
||||
function isValid(map, damaged) {
|
||||
const trimmed = map.replace(/^\.+/, "").replace(/\.+$/, "");
|
||||
const parts = trimmed.split(/\.+/);
|
||||
let isValid = parts.length === damaged.length;
|
||||
damaged.forEach((d, i) => {
|
||||
if (!parts[i] || parts[i].length !== d) {
|
||||
isValid = false;
|
||||
}
|
||||
});
|
||||
|
||||
return isValid;
|
||||
}
|
||||
|
|
@ -1,87 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Record = struct { map: []const u8, damaged: std.ArrayList(u8) };
|
||||
|
||||
pub fn main() !void {
|
||||
const content = @embedFile("test.txt");
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var records = std.ArrayList(Record).init(allocator);
|
||||
defer records.deinit();
|
||||
|
||||
// parse lines
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
var parts = std.mem.split(u8, line, " ");
|
||||
const map = parts.next().?;
|
||||
var damageIterator = std.mem.split(u8, parts.next().?, ",");
|
||||
var damaged = std.ArrayList(u8).init(allocator);
|
||||
while (damageIterator.next()) |d| {
|
||||
const parsed = try std.fmt.parseInt(u8, d, 10);
|
||||
try damaged.append(parsed);
|
||||
}
|
||||
try records.append(Record{ .map = map, .damaged = damaged });
|
||||
}
|
||||
std.debug.print("records: {any}\n", .{records.items});
|
||||
|
||||
var part1: u8 = 0;
|
||||
for (records.items) |r| {
|
||||
// var all = std.ArrayList(u8).init(allocator);
|
||||
const all = allArrangements(r.map, r.damaged, 0);
|
||||
std.debug.print("all arrangements: {any}\n", .{all});
|
||||
|
||||
// part1 += numValid(r);
|
||||
}
|
||||
|
||||
std.debug.print("Part1: {d}\n", .{part1});
|
||||
}
|
||||
|
||||
// replaces ?s with every possible combination of . or #
|
||||
// fn allArrangements(r: Record, i: u8) []const u8 {
|
||||
fn allArrangements(map: []const u8, damaged: std.ArrayList(u8), start: u8) []const u8 {
|
||||
std.debug.print("allArrangements. map: {any} damage: {any} start: {any}\n", .{ map, damaged, start });
|
||||
// find the first ?
|
||||
const idx = std.mem.indexOf(u8, map, "?");
|
||||
if (idx == null) {
|
||||
return map;
|
||||
}
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var records = std.ArrayList(Record).init(allocator);
|
||||
defer records.deinit();
|
||||
|
||||
var one: [map.len]u8 = undefined;
|
||||
@memcpy(one, map);
|
||||
std.debug.print("? idx: {?d}\n", .{idx});
|
||||
return &[_]u8{1};
|
||||
}
|
||||
|
||||
fn numValid(r: Record) u8 {
|
||||
// var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
// const allocator = gpa.allocator();
|
||||
//
|
||||
// // generate all possible arrangements
|
||||
// var all = std.ArrayList(u8).init(allocator);
|
||||
// defer all.deinit();
|
||||
|
||||
const num = numQuestionMarks(r.map);
|
||||
std.debug.print("num ?: {d}\n", .{num});
|
||||
return num;
|
||||
}
|
||||
|
||||
fn numQuestionMarks(str: []const u8) u8 {
|
||||
var i: u8 = 0;
|
||||
for (str) |char| {
|
||||
if (char == '?') {
|
||||
i += 1;
|
||||
}
|
||||
}
|
||||
return i;
|
||||
}
|
||||
119
day13/main.zig
119
day13/main.zig
|
|
@ -1,119 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
const content = @embedFile("data.txt");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
// yo dog
|
||||
var grids = std.ArrayList(std.ArrayList(std.ArrayList(u8))).init(allocator);
|
||||
var sections = std.mem.split(u8, content, "\n\n");
|
||||
|
||||
while (sections.next()) |section| {
|
||||
var lines = std.mem.split(u8, section, "\n");
|
||||
var gridArrayList = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var lineArrayList = std.ArrayList(u8).init(allocator);
|
||||
for (line) |char| {
|
||||
try lineArrayList.append(char);
|
||||
}
|
||||
try gridArrayList.append(lineArrayList);
|
||||
}
|
||||
|
||||
try grids.append(gridArrayList);
|
||||
}
|
||||
|
||||
var part1: usize = 0;
|
||||
var part2: usize = 0;
|
||||
|
||||
for (grids.items) |grid| {
|
||||
const transposed = try transpose(grid, allocator);
|
||||
|
||||
const rowReflection = findRowReflection(grid);
|
||||
const columnReflection = findRowReflection(transposed);
|
||||
|
||||
part1 += 100 * (rowReflection orelse 0) + (columnReflection orelse 0);
|
||||
|
||||
const rowSmudge = findSmudge(grid);
|
||||
const colSmudge = findSmudge(transposed);
|
||||
|
||||
part2 += 100 * (rowSmudge orelse 0) + (colSmudge orelse 0);
|
||||
}
|
||||
|
||||
std.debug.print("part1 {d}\n", .{part1});
|
||||
std.debug.print("part2 {d}\n", .{part2});
|
||||
}
|
||||
|
||||
fn findSmudge(grid: std.ArrayList(std.ArrayList(u8))) ?usize {
|
||||
const height = grid.items.len;
|
||||
|
||||
for (1..height) |row| {
|
||||
var numDiff: u8 = 0;
|
||||
|
||||
for (1..row + 1) |d| {
|
||||
const row1 = grid.items[row - d];
|
||||
const row2 = grid.items[row + d - 1];
|
||||
|
||||
for (0..row1.items.len) |i| {
|
||||
if (row1.items[i] != row2.items[i]) {
|
||||
numDiff += 1;
|
||||
}
|
||||
}
|
||||
if (numDiff > 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (row - d == 0 or row + d == height) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (numDiff == 1) {
|
||||
return row;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
fn findRowReflection(grid: std.ArrayList(std.ArrayList(u8))) ?usize {
|
||||
const height = grid.items.len;
|
||||
|
||||
for (1..height) |row| {
|
||||
for (1..row + 1) |d| {
|
||||
const row1 = grid.items[row - d];
|
||||
const row2 = grid.items[row + d - 1];
|
||||
if (!std.mem.eql(u8, row1.items, row2.items)) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (row - d == 0 or row + d == height) {
|
||||
return row;
|
||||
}
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
fn transpose(grid: std.ArrayList(std.ArrayList(u8)), allocator: std.mem.Allocator) !std.ArrayList(std.ArrayList(u8)) {
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
|
||||
var grid2 = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
for (0..width) |c| {
|
||||
var row = std.ArrayList(u8).init(allocator);
|
||||
|
||||
for (0..height) |r| {
|
||||
try row.append(grid.items[r].items[c]);
|
||||
}
|
||||
|
||||
try grid2.append(row);
|
||||
}
|
||||
|
||||
return grid2;
|
||||
}
|
||||
100
day14/data.txt
100
day14/data.txt
|
|
@ -1,100 +0,0 @@
|
|||
.....O..#....O.O.....OO#...#.....#...........O#..OO...#O##..#.....#...O.OO...#.O......OO#...OO...O..
|
||||
OOO....#O.#..O#.#.OO...OO..O##...O.....O.O...#.O.......OOO.O...#.....#.#.O....O.O.....#...#.OOOO.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....OO##OO#...O#.O#...#.#
|
||||
#.O......O.#.O..OO.O..#....#.OO....#.#..#..O#.O....OO......#.##O...#.OO........O..OO...OOO#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..O.O..O..O..............#...O#O#.O.#.##..........##O....O.O...........O..O..O#...#..
|
||||
...#O.O.OO#..O..#.#...#O...O..#...#.........O...#OO#...#.O#....O...##..O...O.#O#.O#...O.O...#OO.O#..
|
||||
...##.##.O...O..#..#O.O.O...O.##..#.#.O..OO.O......OO..#..O.O..#..#.......O..O.....OO.OOO.O..O..#O.#
|
||||
....#O.O...#OO..O.O............O.....#O..#O#...#.........O.O..O...OO....#..O..##.O..####O#O.#.......
|
||||
.OOO.......##..O..#O.OO.##.....O....#..OO.#O.......OO..........OO..O..O#...#..O..##.O........#....O.
|
||||
....#.O#...#OO..............O..O.O...O...O...O....O###....O.#OO...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.#....#..#.###OOOO..#OO.#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.OO..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#OOO..#....#.#...O.#..
|
||||
....#...#.OO....#..OO#.#OO.O....OO..#..O....OO.......##.##O####O.O.O#..#....O.O......O.....#.O..O...
|
||||
.O#O#........O.#...O#O..#O...O.#..#.#..O#........O###..O..#...#..O.##..#............O.......O..O....
|
||||
........#.O.....O...O.....##.....##.#.#.#....OO####.#..O#....#O...#.O#..O.O.#.O......O..#..O.....O..
|
||||
..O#..##O.OOOO...OO....OO#.#.O.....#.#......#...#OO#...####O#....O...O.O.O.O#....O.##OO#..O.#.O..##.
|
||||
.##...............#.O#OO.#.......#...#O.#.OOO#.O...#....#....O#..O.#..O...O#...#..O#.O#O#........OO#
|
||||
...#......##...#.#O..O......O#O.O..OOO..O##....#....O.#..O....#........OO#.#...#.O#..O....O.O##..O#.
|
||||
.OO......O.....O...##..#...#....O.#....O....O...........OO.#.#..#...#.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.......#..OOOO.....O.....####...#.......O...O#O...O..#..#...##.#.....#....O....#...##...
|
||||
........O.O#OO#..#.O.....#.OOO......OO#.#.....O.#..#O.........#OOO......O..#......O..##....#O....#.#
|
||||
..O..#O.....##..#.OO..O..........OO..O...#.##O.#.#..O.O#.#.#......OOO......#..O..#.O....O#...OO#....
|
||||
...#.OOO.O......O#O...O.O.OO....OO#.....O.O.O#.....O##.OO......#......OOO#O.OO.O#...#.....O....OO...
|
||||
...#.#O..O...##.#.###.O.#...#.#....O.OO...O.O.O.O...#.#.O....#OO#.OO...#O...#O...OO.O..O..O....O..O#
|
||||
.##.O......#.##.....O...OO#...O.....O..#.....O.........#....O..#....O.####......#...#........O#..OO.
|
||||
.#.#.O.#.O#..OO.#....O...#.O...O..#.O.....#OO....#.O.O.O......OO...#.#.O#O#OO.#O.O.....O.........#..
|
||||
..#.#..O...#..#.....OO.#O...O#...OO.O...O#....##O....#.#...OO.#.....#.O#.....O.....O...#.#O.....#...
|
||||
.O..OO#.#OO...O..#..........OO.............##..####...#.O....O...#.#...O#..O.O..OO.#....OOO..#...OO.
|
||||
#...#....#.........OOOO....OO....O#O..........#..O#..O...#.OOO.....OO.......OO.##...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#...OO.......##......OO..#.O....#.##O.OO....#.O.#.OO..O....O.#..
|
||||
.O..O.#.O.#............O....#....#....#.#.....#...OO#...OO.##OO.#..#....#....#.O#.OO#.#.O.O#..O.....
|
||||
.OO#O...#.#......O...#...O##.O....O#...O..O..O..O.#O..#..###OO..#..O##O.#.O...O#O...OO.O..#.#O#..#.#
|
||||
#..OOOO...OOO.O..#O...OO##....O#..OO...O.O.#....#O#O....#.#....O#...O...O....O...#..O.#O..#..#..#O#.
|
||||
##.....OO#.....#.O.O..OO.O.#.....O..O....#....#.........OOO.O.....O#...O..#..........O.O.#..#...#..O
|
||||
##.#.#.O..O.....##.##.#O..#........O#....O..O....O....#..O.##OO#.O.O..O#...###.OO.O#..#.O...##..OO..
|
||||
O....#.....O...#.#.OO..OO.###.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..
|
||||
OO####.OO..O...#..#O#.O#.#......#...#.#.O##..##.O.....O.OO.O.O#...O...O...O...O.O#........#..O.O.O..
|
||||
.O#O......O...O.#O##.OO.O..OO#..#OO...O.O..O.#...#O..OO....O.#OO.#O.#..O...#....#..OO#.......###....
|
||||
..#O#O........#.O.#...#O.#.O..O.O#..O.O#OO.O.O#O.#OOO....O#.........#..O..#.O...O........O#.......O#
|
||||
...O.#.OO....#OO...#.........O..O.O.#OOO....O.....O..O.#.......OO..#O......#.#O..#.OO#O....O#.....O.
|
||||
O.#OO..............#.O...##....OO#OO.......O#.....O.O....##....O........#......O..#..#..###O...#....
|
||||
...O.OO..O#...#.#O..O#...#..OO...OO......O..#..#....O..#.#......#...#....#.OOOO.#....##......O#..#.O
|
||||
..#.......#...##OOO..O.....O..O.O.O..O#.....#.#O........O..#...#O..#...O#...#.OO....#.O..O#..O.#OO.#
|
||||
##.#.O.OO..O..##O...O..O..O.......O.O....#...O......O.O.#.O......O......O...O...O.#.#.OO#OO...##..O.
|
||||
.O...OO...#..O.O.#O..#O......#.#..#...........#O....#.###.#....#O.#...O....##...#.OO....O.#.O.O.O..O
|
||||
.#..O#..O......#O...O..#.#.....OO...#.##.......#..O.O.......#......#..#....#.##..O.......O...#.OO...
|
||||
O..O...#O.O#O#.....#O..#..#..#...O...O#.#O........O.OO.O.....#O#.#...O#.#...#O.#...#O.....#..O.O....
|
||||
OO.OO.#....O....O##..O#..O...#.......#......#.OO..O......#O#.OO.#...O.......#.#O....#.O...#.O.....O#
|
||||
.O#.....#O.O....OO..O..O.#O.#O.O.OO..#.#...O.........O#...OO....O...#..O....O#.O#..#O#..O.#..O....O.
|
||||
OO..##.O.......OO.O..#O...O...O.##...........O#.O...O....O#.#.OO...#O....O.#O......O#.O...........O.
|
||||
O.#...........#O#.O.##...O#....O.O...#..O...#.OO.....#OO..O#.#.O..........#.#..O.#...#.......##O#O..
|
||||
....O......OO.OO..........OO.O...O.....#.#...OO..#.O#.O......OO##O.O...#.OOO...#...#..O......OO.#...
|
||||
....#..#.#.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##....#...O.O
|
||||
.....#..O.......#..O.#..#..#..O#...#...#O...O#.OO#.O#O#OO..##.O#.O.#..O.#..O..O....#.O.O..O........O
|
||||
........OO...#OO.#..#.OO#...O..OO....#......OO#O#.#.#...#O.#.O......O.....O#..#...#....#.#O#..#...O.
|
||||
O#...##..O........#OO##...#......O...........OO#...O.O.##O........#....##O.....##..O.....O.#O#.#....
|
||||
......O....##.#.O##.O#........##O.O..##...O..#.O..O....#.OO...OO.#.......#.O.....OO#O.##O.O....O#..O
|
||||
..O....#...O.O...##.#....O....O..O......#...O..#..O......O.OO.#..#.O#...#..O.OO........#..#O...O..#.
|
||||
#.O.#.O.....O..###.#.............O.##O.#.OO..#.....#.....O.........O.OOOO#...#.O#.##O.......OO.#OO..
|
||||
....OOO..O...OO##.O...#.#.OO..O#...O.#..O..OO.#O.##..##....O.O..OO#O...O#.....O..O##......#.#......O
|
||||
..O.....O..#.........O#..O..#.OO..O##..O.O.##O#....O.OOO...#...O...O#O.#.O..............O....O#.#...
|
||||
OO.#....O.......O..O.#.OO....##....OOOO...O.......OOO#....O#...O#.OO..O.....#.##...#..#..O......#O.#
|
||||
.O...O...O.#O.O..OO##..#..#OO.O.OO....O........#O.....###OO.OO.OO..O##...O.#.O.....O......O...O##...
|
||||
...O...O..#..O.......O#O....##.O.OO#.O...#OO.#..O.O.#...#O.#.#...O..O...O..OOO..#..O..O..#.#..#.O..O
|
||||
.....#.......O.O...#.O.........O...#...#..O.##..OO...#.O..........O#.#..O#.#.O.OO.#........OO..O..O.
|
||||
#O.OO..#..#.###...O....O.#...........#O....O.#O.#..........O.........O.....#..O.#..O.....O....OO....
|
||||
O......O..O...O...O..O.OO...O#...O......#..#O.O#.OOO..#.#.....#O.....##..#OO...O.....####O..........
|
||||
O....O#..#O..OO#O...O.#..O.....#..#..O..#..O..O#O..#.......O.#.#...O.........O..OO#.......#.O..OO.#.
|
||||
.#.#...O.#O.....O....O.#O..O.#....OO..O#...#.O.#.OOO.O..O.....O.O..#.#..OO......#.#.O#O.#....O.O.O#.
|
||||
....#O..##..#.#..#..#....#.#O.#.O####.......##.......##O.O......O..OO.##OO.......#...O..O....O#....O
|
||||
.......O..OO.#.........O..O...OO...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.O.##O..#...O...O.#.##O....O....O...O..#.#O
|
||||
..O.O#O.....O#.O........##...#...#.O##O....#.#.#..O.O.OOO.##...O...##.O.O.#...O.#.#...##.....#.O..O#
|
||||
.O......O.#O...OOO..#..##...#...O...O..O.........O.O#.....##.......##..O.OO...#.#..........OOO..#...
|
||||
#O............O..#O#..#OO...O..#.O.O.O....O...#.#.#OO....O..##....O#..#...#OO..#.#........#........O
|
||||
.#....#O#.O.#.....#.O....O#.....O....OOO#O.O.O.....O..OO.#O..#..#.OOOO......#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.#...O...O..#O..O....#O...O.O##....O....O
|
||||
#O...#.OO#.#O........OO......#..O...O.OOOO.#.#..O#.##.O.O....#..O#..O.......#.O...#..#O......O..O...
|
||||
...O....O..O.#OO#...O.....O..#........OO.....OO.....#.O..O......O...#.OOO......OO...O.#O...O..O##...
|
||||
..#O.O.......##..O.OO.........#.........O.O#....O..O#.O...#OOO...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#..OOO.#O#..OO.O...........OO...#...OOOO...#..O##O.O..#...
|
||||
.O.O....O.#O.O#...#.#...........#.O.O#.#..O.#........O..O...#....O........O..O.#.#.#...#.........#O.
|
||||
.O#..#O...#.O#.#...#...O...#..O##O..O......O.O....#O.#..O#OOO.O.#.........O....O.#.O....#OO....#...O
|
||||
O#...#....#.#...#...O..##.#.....O.#..#.O....###O..O.OO#.....O...O.......#.....#O......#...OO.#.O..#.
|
||||
O.O#O.#...OO##.#OO..#...O..OO#.O.....##..OO.....##..#O...#...OO#.O...#......#.O#..##..#.O.....O#.#.O
|
||||
O..#O.O...OO.#O.O....#.OO...O...#..O.O..#OO............#........O..#.....#OOOO...O......O.##.O....O#
|
||||
#...#OO.OO.#.#...O...O....O..##.O...#..O.......####.....#......#..O...#.##....#O..O..O.#.#.#......O.
|
||||
.....O...O..#.O#...O..#.#.O#.O.OO.#..........O...OO#O#.....#.OO.........#OO.O...O..OO.O.#......O##..
|
||||
177
day14/main.zig
177
day14/main.zig
|
|
@ -1,177 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
const content = @embedFile("data.txt");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var grid = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
defer grid.deinit();
|
||||
|
||||
var grid2 = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
defer grid2.deinit();
|
||||
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var lineArrayList = std.ArrayList(u8).init(allocator);
|
||||
var lineArrayList2 = std.ArrayList(u8).init(allocator);
|
||||
|
||||
for (line) |char| {
|
||||
try lineArrayList.append(char);
|
||||
try lineArrayList2.append(char);
|
||||
}
|
||||
|
||||
try grid.append(lineArrayList);
|
||||
try grid2.append(lineArrayList2);
|
||||
}
|
||||
|
||||
var map = std.StringHashMap(usize).init(allocator);
|
||||
defer map.deinit();
|
||||
|
||||
transpose(&grid);
|
||||
try tiltWest(&grid);
|
||||
transpose(&grid);
|
||||
|
||||
var part1 = calculateLoad(grid);
|
||||
|
||||
std.debug.print("part 1: {d}\n", .{part1});
|
||||
|
||||
var prev: usize = 0;
|
||||
var loop: usize = 0;
|
||||
|
||||
const MAX = 1_000_000_000;
|
||||
for (0..MAX) |i| {
|
||||
// see if this grid arrangement is in our map
|
||||
const key = try getKey(&grid2);
|
||||
const hashed = map.get(key);
|
||||
|
||||
// if it is, we've found a loop
|
||||
if (hashed) |val| {
|
||||
prev = val;
|
||||
loop = i;
|
||||
break;
|
||||
}
|
||||
|
||||
try cycle(&grid2);
|
||||
|
||||
// add the new grid arrangement to the map
|
||||
try map.put(key, i);
|
||||
}
|
||||
|
||||
// figure out where in the loop we should stop
|
||||
const stop = (MAX - prev) % (loop - prev);
|
||||
|
||||
// cycle that many more times
|
||||
for (0..stop) |_| {
|
||||
try cycle(&grid2);
|
||||
}
|
||||
var part2 = calculateLoad(grid2);
|
||||
|
||||
std.debug.print("part 2: {d}\n", .{part2});
|
||||
}
|
||||
|
||||
fn getKey(grid: *std.ArrayList(std.ArrayList(u8))) ![]u8 {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var str = std.ArrayList(u8).init(allocator);
|
||||
for (grid.items) |row| {
|
||||
try str.appendSlice(row.items);
|
||||
}
|
||||
return str.items;
|
||||
}
|
||||
|
||||
fn cycle(grid: *std.ArrayList(std.ArrayList(u8))) !void {
|
||||
transpose(grid); // to tilt north, transpose so north is left
|
||||
try tiltWest(grid);
|
||||
|
||||
transpose(grid); // to tilt west, transpose again
|
||||
|
||||
try tiltWest(grid);
|
||||
// at this point, grid is back to normal
|
||||
flipY(grid); // to tilt south, flip (south is up) then transpose (south is left)
|
||||
transpose(grid);
|
||||
|
||||
try tiltWest(grid);
|
||||
// at this point, south is left, west is up. we want east left
|
||||
transpose(grid); // south is up, west is left
|
||||
flipY(grid); // grid is back to normal
|
||||
flipX(grid);
|
||||
try tiltWest(grid);
|
||||
flipX(grid);
|
||||
}
|
||||
|
||||
fn calculateLoad(grid: std.ArrayList(std.ArrayList(u8))) usize {
|
||||
var load: usize = 0;
|
||||
for (grid.items, 0..) |row, rowNum| {
|
||||
var rowMultiplier = grid.items.len - rowNum;
|
||||
for (row.items) |cell| {
|
||||
if (cell == 'O') {
|
||||
load += rowMultiplier;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return load;
|
||||
}
|
||||
|
||||
fn tiltWest(grid: *std.ArrayList(std.ArrayList(u8))) !void {
|
||||
for (grid.items) |row| {
|
||||
for (row.items, 0..) |cell, i| {
|
||||
if (cell == 'O' and i != 0 and row.items[i - 1] == '.') {
|
||||
var j = i;
|
||||
while (j > 0) {
|
||||
row.items[j - 1] = 'O';
|
||||
row.items[j] = '.';
|
||||
j -= 1;
|
||||
if (j < 1 or row.items[j - 1] != '.') {
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// assumes square grid
|
||||
fn transpose(grid: *std.ArrayList(std.ArrayList(u8))) void {
|
||||
const length = grid.items.len;
|
||||
|
||||
for (0..length - 1) |i| {
|
||||
for (i + 1..length) |j| {
|
||||
const temp = grid.items[i].items[j];
|
||||
grid.items[i].items[j] = grid.items[j].items[i];
|
||||
grid.items[j].items[i] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// flip a grid upside down
|
||||
fn flipY(grid: *std.ArrayList(std.ArrayList(u8))) void {
|
||||
const height = grid.items.len;
|
||||
|
||||
for (0..height / 2) |r| {
|
||||
const temp = grid.items[r];
|
||||
grid.items[r] = grid.items[height - r - 1];
|
||||
grid.items[height - r - 1] = temp;
|
||||
}
|
||||
}
|
||||
|
||||
// flip a grid left to right
|
||||
fn flipX(grid: *std.ArrayList(std.ArrayList(u8))) void {
|
||||
const length = grid.items.len;
|
||||
|
||||
for (0..length) |r| {
|
||||
for (0..length / 2) |c| {
|
||||
const temp = grid.items[r].items[c];
|
||||
grid.items[r].items[c] = grid.items[r].items[length - c - 1];
|
||||
grid.items[r].items[length - c - 1] = temp;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +0,0 @@
|
|||
O....#....
|
||||
O.OO#....#
|
||||
.....##...
|
||||
OO.#O....O
|
||||
.O.....O#.
|
||||
O.#..O.#.#
|
||||
..O..#O..O
|
||||
.......O..
|
||||
#....###..
|
||||
#OO..#....
|
||||
115
day15/main.zig
115
day15/main.zig
|
|
@ -1,115 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Lens = struct { label: []const u8, focalLength: u8 };
|
||||
|
||||
pub fn main() !void {
|
||||
var content = @embedFile("data.txt");
|
||||
|
||||
var words = std.mem.split(u8, content, ",");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var boxes = std.AutoHashMap(u32, std.ArrayList(Lens)).init(allocator);
|
||||
defer boxes.deinit();
|
||||
|
||||
var part1: u32 = 0;
|
||||
while (words.next()) |w| {
|
||||
// stupid last char thing
|
||||
const word = if (w[w.len - 1] == 10) w[0 .. w.len - 2] else w;
|
||||
|
||||
// Part 1
|
||||
part1 += hash(word);
|
||||
|
||||
// Part 2
|
||||
const dash = std.mem.indexOf(u8, word, "-");
|
||||
const equals = std.mem.indexOf(u8, word, "=");
|
||||
const idx = dash orelse equals orelse unreachable;
|
||||
const label = word[0..idx];
|
||||
const box = hash(label);
|
||||
std.debug.print("\nAfter \"{s}\":\n", .{word});
|
||||
|
||||
if (dash != null) {
|
||||
// if dash, find the box
|
||||
if (boxes.getPtr(box)) |list| {
|
||||
// get the list, and find a lens with this label in it
|
||||
var indexToRemove: ?usize = null;
|
||||
for (list.items, 0..) |l, i| {
|
||||
if (std.mem.eql(u8, l.label, label)) {
|
||||
indexToRemove = i;
|
||||
}
|
||||
}
|
||||
|
||||
// if it's there, remove it
|
||||
if (indexToRemove) |i| {
|
||||
_ = list.orderedRemove(i);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// if equals, parse out parts, put it in the box
|
||||
const focalLength = try std.fmt.parseInt(u8, word[idx + 1 ..], 10);
|
||||
const lens = Lens{ .focalLength = focalLength, .label = label };
|
||||
|
||||
// does this list exist? use it. otherwise make a new one
|
||||
var list = boxes.get(box) orelse std.ArrayList(Lens).init(allocator);
|
||||
|
||||
// find if this lens is already in the list
|
||||
var dupIdx: ?usize = null;
|
||||
for (list.items, 0..) |l, i| {
|
||||
if (std.mem.eql(u8, l.label, label)) {
|
||||
dupIdx = i;
|
||||
}
|
||||
}
|
||||
|
||||
// if it is, replace it with the new lens
|
||||
if (dupIdx) |i| {
|
||||
try list.replaceRange(i, 1, &[_]Lens{lens});
|
||||
} else {
|
||||
try list.append(lens);
|
||||
}
|
||||
try boxes.put(box, list);
|
||||
}
|
||||
|
||||
printBoxes(boxes);
|
||||
}
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{part1});
|
||||
|
||||
var part2: usize = 0;
|
||||
var it = boxes.iterator();
|
||||
while (it.next()) |box| {
|
||||
const boxNumber = box.key_ptr.*;
|
||||
|
||||
for (box.value_ptr.items, 0..) |lens, slotNumber| {
|
||||
part2 += (boxNumber + 1) * (slotNumber + 1) * lens.focalLength;
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("Part 2: {d}\n", .{part2});
|
||||
}
|
||||
|
||||
fn hash(word: []const u8) u32 {
|
||||
var sum: u32 = 0;
|
||||
for (word) |c| {
|
||||
if (c == 10) {
|
||||
break;
|
||||
}
|
||||
sum += c;
|
||||
sum *= 17;
|
||||
sum = sum % 256;
|
||||
}
|
||||
|
||||
return sum;
|
||||
}
|
||||
|
||||
fn printBoxes(boxes: std.AutoHashMap(u32, std.ArrayList(Lens))) void {
|
||||
var it = boxes.iterator();
|
||||
while (it.next()) |list| {
|
||||
std.debug.print("Box {d}: ", .{list.key_ptr.*});
|
||||
|
||||
for (list.value_ptr.items) |lens| {
|
||||
std.debug.print("[{s} {d}] ", .{ lens.label, lens.focalLength });
|
||||
}
|
||||
std.debug.print("\n", .{});
|
||||
}
|
||||
}
|
||||
254
day16/main.zig
254
day16/main.zig
|
|
@ -1,254 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Dir = enum(usize) { up, right, down, left };
|
||||
const Coord = struct { row: usize, col: usize };
|
||||
const Beam = struct { dir: Dir, coord: Coord };
|
||||
|
||||
pub fn main() !void {
|
||||
var content = @embedFile("data.txt");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var grid = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
defer grid.deinit();
|
||||
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var lineArrayList = std.ArrayList(u8).init(allocator);
|
||||
|
||||
for (line) |char| {
|
||||
try lineArrayList.append(char);
|
||||
}
|
||||
|
||||
try grid.append(lineArrayList);
|
||||
}
|
||||
|
||||
const energy = try energize(Beam{ .dir = Dir.right, .coord = Coord{ .row = 0, .col = 0 } }, grid);
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{energy});
|
||||
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
|
||||
var maxEnergy: usize = 0;
|
||||
|
||||
for (0..height) |row| {
|
||||
for ([_]usize{ 0, width - 1 }) |col| {
|
||||
const dir = if (col == 0) Dir.right else Dir.left;
|
||||
const start = Beam{ .dir = dir, .coord = Coord{ .row = row, .col = col } };
|
||||
const e = try energize(start, grid);
|
||||
if (e > maxEnergy) {
|
||||
maxEnergy = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (0..width) |col| {
|
||||
for ([_]usize{ 0, height - 1 }) |row| {
|
||||
const dir = if (row == 0) Dir.down else Dir.up;
|
||||
const start = Beam{ .dir = dir, .coord = Coord{ .row = row, .col = col } };
|
||||
const e = try energize(start, grid);
|
||||
if (e > maxEnergy) {
|
||||
maxEnergy = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("Part 2: {d}\n", .{maxEnergy});
|
||||
}
|
||||
|
||||
fn energize(start: Beam, grid: std.ArrayList(std.ArrayList(u8))) !usize {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var beams = std.ArrayList(Beam).init(allocator);
|
||||
defer beams.deinit();
|
||||
|
||||
// add the first beam
|
||||
try beams.append(start);
|
||||
|
||||
var energized = std.AutoHashMap(Coord, void).init(allocator);
|
||||
defer energized.deinit();
|
||||
|
||||
var beamHistory = std.AutoHashMap(Beam, void).init(allocator);
|
||||
defer beamHistory.deinit();
|
||||
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
|
||||
while (true) {
|
||||
// make 2 new lists: beams to add, and beams to remove.
|
||||
// batch these while iterating, and do it all after
|
||||
var beamsToAdd = std.ArrayList(Beam).init(allocator);
|
||||
defer beamsToAdd.deinit();
|
||||
|
||||
var beamsToRemove = std.ArrayList(usize).init(allocator);
|
||||
defer beamsToRemove.deinit();
|
||||
|
||||
if (beams.items.len == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
for ((&beams).items, 0..) |*b, beamNumber| {
|
||||
if (isOutOfGrid(b, grid)) {
|
||||
try beamsToRemove.append(beamNumber);
|
||||
continue;
|
||||
}
|
||||
|
||||
try energized.put(b.coord, {});
|
||||
|
||||
if (beamHistory.contains(b.*)) {
|
||||
try beamsToRemove.append(beamNumber);
|
||||
continue;
|
||||
}
|
||||
|
||||
try beamHistory.put(b.*, {});
|
||||
|
||||
const row = b.coord.row;
|
||||
const col = b.coord.col;
|
||||
|
||||
const value = grid.items[row].items[col];
|
||||
|
||||
const goStraight = value == '.' or (value == '|' and (b.dir == .up or b.dir == .down)) or
|
||||
(value == '-' and (b.dir == .left or b.dir == .right));
|
||||
|
||||
if (goStraight) {
|
||||
switch (b.dir) {
|
||||
.up => if (row == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.coord.row -= 1;
|
||||
},
|
||||
.right => b.coord.col += 1,
|
||||
.down => b.coord.row += 1,
|
||||
.left => if (col == 0) {
|
||||
b.coord.col = width + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.coord.col -= 1;
|
||||
},
|
||||
}
|
||||
} else if (value == '|') {
|
||||
if (row == 0) {
|
||||
// if we are on the top row, change the beam to go down
|
||||
b.dir = Dir.down;
|
||||
b.coord.row += 1;
|
||||
} else {
|
||||
// otherwise, change beam direction to up and move it up one cell
|
||||
b.dir = Dir.up;
|
||||
b.coord.row -= 1;
|
||||
if (row != height - 1) {
|
||||
// and if we're not on the _bottom_ row,
|
||||
// create a new beam going down, below this cell
|
||||
const newBeam = Beam{ .dir = Dir.down, .coord = Coord{ .row = row + 1, .col = col } };
|
||||
try beamsToAdd.append(newBeam);
|
||||
}
|
||||
}
|
||||
} else if (value == '-') {
|
||||
if (col == 0) {
|
||||
// if we are on the first col, change the beam to go right
|
||||
b.dir = Dir.right;
|
||||
b.coord.col += 1;
|
||||
} else {
|
||||
// otherwise, change beam direction to left and move it left one cell
|
||||
b.dir = Dir.left;
|
||||
b.coord.col -= 1;
|
||||
if (col != width - 1) {
|
||||
// and if we're not on the _last_ column,
|
||||
// create a new beam going right, to the right this cell
|
||||
const newBeam = Beam{ .dir = Dir.right, .coord = Coord{ .row = row, .col = col + 1 } };
|
||||
try beamsToAdd.append(newBeam);
|
||||
}
|
||||
}
|
||||
} else if (value == '/') {
|
||||
switch (b.dir) {
|
||||
.up => {
|
||||
b.dir = Dir.right;
|
||||
b.coord.col += 1;
|
||||
},
|
||||
.right => if (row == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.up;
|
||||
b.coord.row -= 1;
|
||||
},
|
||||
.down => if (col == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.left;
|
||||
b.coord.col -= 1;
|
||||
},
|
||||
.left => {
|
||||
b.dir = Dir.down;
|
||||
b.coord.row += 1;
|
||||
},
|
||||
}
|
||||
} else if (value == '\\') {
|
||||
switch (b.dir) {
|
||||
.up => if (col == 0) {
|
||||
b.coord.col = width + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.left;
|
||||
b.coord.col -= 1;
|
||||
},
|
||||
.right => {
|
||||
b.dir = Dir.down;
|
||||
b.coord.row += 1;
|
||||
},
|
||||
.down => {
|
||||
b.dir = Dir.right;
|
||||
b.coord.col += 1;
|
||||
},
|
||||
.left => if (row == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.up;
|
||||
b.coord.row -= 1;
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove the beams in reverse order
|
||||
const len = beamsToRemove.items.len;
|
||||
for (0..len) |j| {
|
||||
const idx = beamsToRemove.items[len - j - 1];
|
||||
_ = beams.orderedRemove(idx);
|
||||
}
|
||||
beamsToRemove.clearAndFree();
|
||||
|
||||
// add the new beams
|
||||
for (beamsToAdd.items) |beam| {
|
||||
try beams.append(beam);
|
||||
}
|
||||
beamsToAdd.clearAndFree();
|
||||
}
|
||||
|
||||
return energized.count();
|
||||
}
|
||||
|
||||
fn isOutOfGrid(beam: *Beam, grid: std.ArrayList(std.ArrayList(u8))) bool {
|
||||
const row = beam.coord.row;
|
||||
const col = beam.coord.col;
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
return row < 0 or row >= height or col < 0 or col >= width;
|
||||
}
|
||||
|
||||
fn printGrid(grid: std.ArrayList(std.ArrayList(u8)), energized: std.AutoHashMap(Coord, void)) void {
|
||||
for (grid.items, 0..) |line, row| {
|
||||
for (line.items, 0..) |char, col| {
|
||||
if (char == '.' and energized.contains(Coord{ .row = row, .col = col })) {
|
||||
std.debug.print("#", .{});
|
||||
} else {
|
||||
std.debug.print("{c}", .{char});
|
||||
}
|
||||
}
|
||||
std.debug.print("\n", .{});
|
||||
}
|
||||
}
|
||||
254
day17/main.zig
254
day17/main.zig
|
|
@ -1,254 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Dir = enum(usize) { up, right, down, left };
|
||||
const Coord = struct { row: usize, col: usize };
|
||||
const Beam = struct { dir: Dir, coord: Coord };
|
||||
|
||||
pub fn main() !void {
|
||||
var content = @embedFile("test.txt");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var grid = std.ArrayList(std.ArrayList(u8)).init(allocator);
|
||||
defer grid.deinit();
|
||||
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var lineArrayList = std.ArrayList(u8).init(allocator);
|
||||
|
||||
for (line) |char| {
|
||||
try lineArrayList.append(char);
|
||||
}
|
||||
|
||||
try grid.append(lineArrayList);
|
||||
}
|
||||
|
||||
const energy = try energize(Beam{ .dir = Dir.right, .coord = Coord{ .row = 0, .col = 0 } }, grid);
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{energy});
|
||||
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
|
||||
var maxEnergy: usize = 0;
|
||||
|
||||
for (0..height) |row| {
|
||||
for ([_]usize{ 0, width - 1 }) |col| {
|
||||
const dir = if (col == 0) Dir.right else Dir.left;
|
||||
const start = Beam{ .dir = dir, .coord = Coord{ .row = row, .col = col } };
|
||||
const e = try energize(start, grid);
|
||||
if (e > maxEnergy) {
|
||||
maxEnergy = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (0..width) |col| {
|
||||
for ([_]usize{ 0, height - 1 }) |row| {
|
||||
const dir = if (row == 0) Dir.down else Dir.up;
|
||||
const start = Beam{ .dir = dir, .coord = Coord{ .row = row, .col = col } };
|
||||
const e = try energize(start, grid);
|
||||
if (e > maxEnergy) {
|
||||
maxEnergy = e;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("Part 2: {d}\n", .{maxEnergy});
|
||||
}
|
||||
|
||||
fn energize(start: Beam, grid: std.ArrayList(std.ArrayList(u8))) !usize {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var beams = std.ArrayList(Beam).init(allocator);
|
||||
defer beams.deinit();
|
||||
|
||||
// add the first beam
|
||||
try beams.append(start);
|
||||
|
||||
var energized = std.AutoHashMap(Coord, void).init(allocator);
|
||||
defer energized.deinit();
|
||||
|
||||
var beamHistory = std.AutoHashMap(Beam, void).init(allocator);
|
||||
defer beamHistory.deinit();
|
||||
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
|
||||
while (true) {
|
||||
// make 2 new lists: beams to add, and beams to remove.
|
||||
// batch these while iterating, and do it all after
|
||||
var beamsToAdd = std.ArrayList(Beam).init(allocator);
|
||||
defer beamsToAdd.deinit();
|
||||
|
||||
var beamsToRemove = std.ArrayList(usize).init(allocator);
|
||||
defer beamsToRemove.deinit();
|
||||
|
||||
if (beams.items.len == 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
for ((&beams).items, 0..) |*b, beamNumber| {
|
||||
if (isOutOfGrid(b, grid)) {
|
||||
try beamsToRemove.append(beamNumber);
|
||||
continue;
|
||||
}
|
||||
|
||||
try energized.put(b.coord, {});
|
||||
|
||||
if (beamHistory.contains(b.*)) {
|
||||
try beamsToRemove.append(beamNumber);
|
||||
continue;
|
||||
}
|
||||
|
||||
try beamHistory.put(b.*, {});
|
||||
|
||||
const row = b.coord.row;
|
||||
const col = b.coord.col;
|
||||
|
||||
const value = grid.items[row].items[col];
|
||||
|
||||
const goStraight = value == '.' or (value == '|' and (b.dir == .up or b.dir == .down)) or
|
||||
(value == '-' and (b.dir == .left or b.dir == .right));
|
||||
|
||||
if (goStraight) {
|
||||
switch (b.dir) {
|
||||
.up => if (row == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.coord.row -= 1;
|
||||
},
|
||||
.right => b.coord.col += 1,
|
||||
.down => b.coord.row += 1,
|
||||
.left => if (col == 0) {
|
||||
b.coord.col = width + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.coord.col -= 1;
|
||||
},
|
||||
}
|
||||
} else if (value == '|') {
|
||||
if (row == 0) {
|
||||
// if we are on the top row, change the beam to go down
|
||||
b.dir = Dir.down;
|
||||
b.coord.row += 1;
|
||||
} else {
|
||||
// otherwise, change beam direction to up and move it up one cell
|
||||
b.dir = Dir.up;
|
||||
b.coord.row -= 1;
|
||||
if (row != height - 1) {
|
||||
// and if we're not on the _bottom_ row,
|
||||
// create a new beam going down, below this cell
|
||||
const newBeam = Beam{ .dir = Dir.down, .coord = Coord{ .row = row + 1, .col = col } };
|
||||
try beamsToAdd.append(newBeam);
|
||||
}
|
||||
}
|
||||
} else if (value == '-') {
|
||||
if (col == 0) {
|
||||
// if we are on the first col, change the beam to go right
|
||||
b.dir = Dir.right;
|
||||
b.coord.col += 1;
|
||||
} else {
|
||||
// otherwise, change beam direction to left and move it left one cell
|
||||
b.dir = Dir.left;
|
||||
b.coord.col -= 1;
|
||||
if (col != width - 1) {
|
||||
// and if we're not on the _last_ column,
|
||||
// create a new beam going right, to the right this cell
|
||||
const newBeam = Beam{ .dir = Dir.right, .coord = Coord{ .row = row, .col = col + 1 } };
|
||||
try beamsToAdd.append(newBeam);
|
||||
}
|
||||
}
|
||||
} else if (value == '/') {
|
||||
switch (b.dir) {
|
||||
.up => {
|
||||
b.dir = Dir.right;
|
||||
b.coord.col += 1;
|
||||
},
|
||||
.right => if (row == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.up;
|
||||
b.coord.row -= 1;
|
||||
},
|
||||
.down => if (col == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.left;
|
||||
b.coord.col -= 1;
|
||||
},
|
||||
.left => {
|
||||
b.dir = Dir.down;
|
||||
b.coord.row += 1;
|
||||
},
|
||||
}
|
||||
} else if (value == '\\') {
|
||||
switch (b.dir) {
|
||||
.up => if (col == 0) {
|
||||
b.coord.col = width + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.left;
|
||||
b.coord.col -= 1;
|
||||
},
|
||||
.right => {
|
||||
b.dir = Dir.down;
|
||||
b.coord.row += 1;
|
||||
},
|
||||
.down => {
|
||||
b.dir = Dir.right;
|
||||
b.coord.col += 1;
|
||||
},
|
||||
.left => if (row == 0) {
|
||||
b.coord.row = height + 10; // put it out of the grid to get cleaned up
|
||||
} else {
|
||||
b.dir = Dir.up;
|
||||
b.coord.row -= 1;
|
||||
},
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// remove the beams in reverse order
|
||||
const len = beamsToRemove.items.len;
|
||||
for (0..len) |j| {
|
||||
const idx = beamsToRemove.items[len - j - 1];
|
||||
_ = beams.orderedRemove(idx);
|
||||
}
|
||||
beamsToRemove.clearAndFree();
|
||||
|
||||
// add the new beams
|
||||
for (beamsToAdd.items) |beam| {
|
||||
try beams.append(beam);
|
||||
}
|
||||
beamsToAdd.clearAndFree();
|
||||
}
|
||||
|
||||
return energized.count();
|
||||
}
|
||||
|
||||
fn isOutOfGrid(beam: *Beam, grid: std.ArrayList(std.ArrayList(u8))) bool {
|
||||
const row = beam.coord.row;
|
||||
const col = beam.coord.col;
|
||||
const height = grid.items.len;
|
||||
const width = grid.items[0].items.len;
|
||||
return row < 0 or row >= height or col < 0 or col >= width;
|
||||
}
|
||||
|
||||
fn printGrid(grid: std.ArrayList(std.ArrayList(u8)), energized: std.AutoHashMap(Coord, void)) void {
|
||||
for (grid.items, 0..) |line, row| {
|
||||
for (line.items, 0..) |char, col| {
|
||||
if (char == '.' and energized.contains(Coord{ .row = row, .col = col })) {
|
||||
std.debug.print("#", .{});
|
||||
} else {
|
||||
std.debug.print("{c}", .{char});
|
||||
}
|
||||
}
|
||||
std.debug.print("\n", .{});
|
||||
}
|
||||
}
|
||||
232
day18/main.zig
232
day18/main.zig
|
|
@ -1,232 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
const Point = struct { row: i32, col: i32 };
|
||||
const Direction = enum(usize) { up, right, down, left };
|
||||
const Instruction = struct { direction: Direction, distance: usize };
|
||||
|
||||
pub fn main() !void {
|
||||
var content = @embedFile("test.txt");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var path = std.AutoHashMap(Point, void).init(allocator);
|
||||
defer path.deinit();
|
||||
|
||||
var instructions = std.ArrayList(Instruction).init(allocator);
|
||||
defer instructions.deinit();
|
||||
|
||||
try parseInstructions(content, &instructions);
|
||||
|
||||
var minCol: i32 = 0;
|
||||
var maxCol: i32 = 0;
|
||||
var minRow: i32 = 0;
|
||||
var maxRow: i32 = 0;
|
||||
|
||||
var row: i32 = 0;
|
||||
var col: i32 = 0;
|
||||
for (instructions.items) |ins| {
|
||||
for (0..ins.distance) |_| {
|
||||
try path.put(Point{ .row = row, .col = col }, {});
|
||||
|
||||
if (row > maxRow) {
|
||||
maxRow = row;
|
||||
}
|
||||
if (row < minRow) {
|
||||
minRow = row;
|
||||
}
|
||||
if (col > maxCol) {
|
||||
maxCol = col;
|
||||
}
|
||||
if (col < minCol) {
|
||||
minCol = col;
|
||||
}
|
||||
|
||||
if (ins.direction == Direction.up) {
|
||||
row -= 1;
|
||||
} else if (ins.direction == Direction.right) {
|
||||
col += 1;
|
||||
} else if (ins.direction == Direction.down) {
|
||||
row += 1;
|
||||
} else {
|
||||
col -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("min row:{d}, max row: {d}\n", .{ minRow, maxRow });
|
||||
std.debug.print("min col:{d}, max col: {d}\n", .{ minCol, maxCol });
|
||||
|
||||
// guess at finding a spot inside
|
||||
var inside = Point{ .row = @divFloor(maxRow - minRow, 2), .col = @divFloor(maxCol - minCol, 2) };
|
||||
|
||||
var filled = try path.clone();
|
||||
defer filled.deinit();
|
||||
|
||||
std.debug.print("count pre: {d}\n", .{path.count()});
|
||||
|
||||
try fill(&filled, inside);
|
||||
|
||||
std.debug.print("count post: {d}\n", .{filled.count()});
|
||||
|
||||
// printGrid(filled);
|
||||
|
||||
// Part 2
|
||||
var path2 = std.AutoHashMap(Point, void).init(allocator);
|
||||
defer path2.deinit();
|
||||
|
||||
var instructions2 = std.ArrayList(Instruction).init(allocator);
|
||||
defer instructions2.deinit();
|
||||
|
||||
try parseInstructions2(content, &instructions2);
|
||||
|
||||
minCol = 0;
|
||||
maxCol = 0;
|
||||
minRow = 0;
|
||||
maxRow = 0;
|
||||
|
||||
row = 0;
|
||||
col = 0;
|
||||
for (instructions2.items) |ins| {
|
||||
for (0..ins.distance) |_| {
|
||||
try path2.put(Point{ .row = row, .col = col }, {});
|
||||
|
||||
if (row > maxRow) {
|
||||
maxRow = row;
|
||||
}
|
||||
if (row < minRow) {
|
||||
minRow = row;
|
||||
}
|
||||
if (col > maxCol) {
|
||||
maxCol = col;
|
||||
}
|
||||
if (col < minCol) {
|
||||
minCol = col;
|
||||
}
|
||||
|
||||
if (ins.direction == Direction.up) {
|
||||
row -= 1;
|
||||
} else if (ins.direction == Direction.right) {
|
||||
col += 1;
|
||||
} else if (ins.direction == Direction.down) {
|
||||
row += 1;
|
||||
} else {
|
||||
col -= 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std.debug.print("min row:{d}, max row: {d}\n", .{ minRow, maxRow });
|
||||
std.debug.print("min col:{d}, max col: {d}\n", .{ minCol, maxCol });
|
||||
|
||||
// guess at finding a spot inside
|
||||
inside = Point{ .row = @divFloor(maxRow - minRow, 2), .col = @divFloor(maxCol - minCol, 2) };
|
||||
|
||||
var filled2 = try path2.clone();
|
||||
defer filled2.deinit();
|
||||
|
||||
std.debug.print("count pre: {d}\n", .{path2.count()});
|
||||
|
||||
try fill(&filled2, inside);
|
||||
|
||||
std.debug.print("count post: {d}\n", .{filled2.count()});
|
||||
}
|
||||
|
||||
fn fill(grid: *std.AutoHashMap(Point, void), point: Point) !void {
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var toVisit = std.ArrayList(Point).init(allocator);
|
||||
defer toVisit.deinit();
|
||||
|
||||
try toVisit.append(point);
|
||||
|
||||
while (toVisit.items.len > 0) {
|
||||
const p = toVisit.pop();
|
||||
// std.debug.print("Looping in fill. point: {any}\n", .{p});
|
||||
const ns = [_]Point{ Point{ .row = p.row - 1, .col = p.col }, Point{ .row = p.row + 1, .col = p.col }, Point{ .row = p.row, .col = p.col + 1 }, Point{ .row = p.row, .col = p.col - 1 } };
|
||||
for (ns) |px| {
|
||||
if (!grid.contains(px)) {
|
||||
try grid.put(px, {});
|
||||
// try fill(grid, px);
|
||||
try toVisit.append(px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn parseInstructions(content: []const u8, instructions: *std.ArrayList(Instruction)) !void {
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var parts = std.mem.split(u8, line, " ");
|
||||
const dirString = parts.next().?;
|
||||
|
||||
var direction: Direction = undefined;
|
||||
|
||||
if (std.mem.eql(u8, dirString, "U")) {
|
||||
direction = Direction.up;
|
||||
} else if (std.mem.eql(u8, dirString, "R")) {
|
||||
direction = Direction.right;
|
||||
} else if (std.mem.eql(u8, dirString, "D")) {
|
||||
direction = Direction.down;
|
||||
} else if (std.mem.eql(u8, dirString, "L")) {
|
||||
direction = Direction.left;
|
||||
} else {
|
||||
unreachable;
|
||||
}
|
||||
|
||||
const distance = std.fmt.parseInt(u8, parts.next().?, 10);
|
||||
|
||||
const instruction = Instruction{ .direction = direction, .distance = try distance };
|
||||
try instructions.*.append(instruction);
|
||||
}
|
||||
}
|
||||
|
||||
fn parseInstructions2(content: []const u8, instructions: *std.ArrayList(Instruction)) !void {
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len < 1) {
|
||||
break;
|
||||
}
|
||||
|
||||
var hex = line[6..12];
|
||||
const dirString = hex[5..6];
|
||||
var direction: Direction = undefined;
|
||||
|
||||
if (std.mem.eql(u8, dirString, "0")) {
|
||||
direction = Direction.right;
|
||||
} else if (std.mem.eql(u8, dirString, "1")) {
|
||||
direction = Direction.down;
|
||||
} else if (std.mem.eql(u8, dirString, "2")) {
|
||||
direction = Direction.left;
|
||||
} else if (std.mem.eql(u8, dirString, "3")) {
|
||||
direction = Direction.up;
|
||||
} else {
|
||||
unreachable;
|
||||
}
|
||||
|
||||
const distance = try std.fmt.parseInt(usize, hex[0..5], 16);
|
||||
|
||||
const instruction = Instruction{ .direction = direction, .distance = distance };
|
||||
try instructions.append(instruction);
|
||||
}
|
||||
}
|
||||
|
||||
fn printGrid(grid: std.AutoHashMap(Point, void)) void {
|
||||
for (0..300) |row| {
|
||||
for (0..300) |col| {
|
||||
if (grid.contains(Point{ .row = @as(i32, @intCast(row)) - 43, .col = @as(i32, @intCast(col)) - 5 })) {
|
||||
std.debug.print("#", .{});
|
||||
} else {
|
||||
std.debug.print(".", .{});
|
||||
}
|
||||
}
|
||||
std.debug.print("\n", .{});
|
||||
}
|
||||
}
|
||||
200
day9/data.txt
200
day9/data.txt
|
|
@ -1,200 +0,0 @@
|
|||
8 10 9 -2 -17 8 190 771 2208 5345 11753 24409 49063 97014 190779 375658 743112 1477240 2945141 5868120 11637263
|
||||
-9 -16 -26 -42 -67 -89 -41 278 1345 4163 10710 24787 53710 111805 227699 459451 925644 1868703 3782952 7672020 15562542
|
||||
28 51 96 170 284 469 798 1415 2573 4692 8485 15300 28049 53554 108059 229471 503402 1116673 2463878 5353430 11394522
|
||||
10 16 22 28 34 40 46 52 58 64 70 76 82 88 94 100 106 112 118 124 130
|
||||
8 24 56 121 238 431 742 1256 2137 3671 6309 10700 17701 28348 43769 65017 92798 127066 166454 207507 243680
|
||||
3 13 33 61 105 197 418 951 2204 5084 11556 25688 55464 115742 232843 451380 844073 1525447 2670475 4539407 7510219
|
||||
15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55
|
||||
4 5 21 57 125 255 506 977 1818 3241 5531 9057 14283 21779 32232 46457 65408 90189 122065 162473 213033
|
||||
5 12 36 95 219 453 862 1541 2644 4472 7720 14109 27863 58876 128976 283411 610443 1272472 2551916 4913291 9078231
|
||||
2 19 48 88 142 226 378 659 1139 1866 2825 3907 4925 5735 6545 8524 14856 32421 74326 163554 338048
|
||||
3 2 -4 -12 -13 15 119 394 1027 2386 5231 11268 24599 55319 127898 299662 699808 1609223 3620339 7952681 17068804
|
||||
9 19 41 88 184 362 655 1088 1698 2633 4409 8432 17912 39299 84354 172945 336675 623603 1104781 1884372 3117140
|
||||
11 10 7 2 -5 -14 -25 -38 -53 -70 -89 -110 -133 -158 -185 -214 -245 -278 -313 -350 -389
|
||||
19 24 24 19 9 -6 -26 -51 -81 -116 -156 -201 -251 -306 -366 -431 -501 -576 -656 -741 -831
|
||||
9 32 76 155 293 539 990 1835 3446 6555 12569 24088 45704 85172 155057 274974 474551 797258 1305258 2085449 3256879
|
||||
4 22 61 126 216 323 429 496 442 104 -778 -2444 -4602 -5001 3844 41336 151368 424562 1035747 2304666 4791100
|
||||
0 0 9 40 118 299 697 1509 3030 5661 9946 16758 27950 48215 89776 183216 400828 904162 2036175 4492208 9625134
|
||||
13 25 39 60 106 222 501 1112 2341 4666 8915 16616 30800 57904 112321 227047 477565 1032763 2257999 4913736 10521598
|
||||
6 22 40 69 146 357 871 2004 4337 8920 17613 33667 62784 115219 210184 385179 715340 1352050 2596670 5035253 9774610
|
||||
2 9 16 23 30 37 44 51 58 65 72 79 86 93 100 107 114 121 128 135 142
|
||||
-1 -2 -8 -29 -74 -137 -160 57 1057 4150 12265 31578 74476 164761 346652 700523 1371301 2621840 4937055 9232612 17279510
|
||||
7 3 -1 -5 -9 -13 -17 -21 -25 -29 -33 -37 -41 -45 -49 -53 -57 -61 -65 -69 -73
|
||||
18 35 77 152 275 474 797 1337 2301 4165 8004 16198 33941 72398 155095 330403 695128 1437759 2915603 5788900 11248491
|
||||
7 28 76 166 310 512 772 1122 1725 3072 6312 13746 29508 60444 117184 215382 377075 632084 1019348 1588046 2398322
|
||||
-3 10 34 68 126 257 565 1229 2528 4882 8928 15661 26685 44639 73889 121610 199423 325802 529526 854522 1366528
|
||||
6 4 15 51 125 266 551 1157 2441 5079 10347 20719 41097 81174 159640 311114 596708 1118810 2039715 3601703 6142457
|
||||
12 35 71 120 182 257 345 446 560 687 827 980 1146 1325 1517 1722 1940 2171 2415 2672 2942
|
||||
-2 4 33 113 285 614 1209 2261 4127 7519 13909 26350 51070 100480 198753 392053 767092 1484370 2836777 5350987 9959291
|
||||
-6 -2 3 9 20 44 93 183 334 570 919 1413 2088 2984 4145 5619 7458 9718 12459 15745 19644
|
||||
12 25 49 95 174 290 437 612 857 1353 2630 6055 14955 37103 90000 211717 482514 1066813 2292543 4797075 9788236
|
||||
-4 4 16 26 29 26 31 88 318 1047 3127 8672 22628 55944 131699 296469 640572 1332626 2675974 5196610 9773547
|
||||
14 20 26 42 100 265 654 1485 3185 6596 13338 26437 51445 98542 186642 351540 662034 1251569 2380155 4556366 8781478
|
||||
17 28 52 116 263 555 1079 1958 3381 5702 9728 17440 33609 69151 147721 318136 676961 1408280 2851676 5615220 10758379
|
||||
27 38 47 50 36 -21 -161 -409 -683 -567 1192 7716 25976 70370 168856 372991 773719 1525352 2880909 5242830 9234076
|
||||
9 24 52 89 130 174 242 430 1026 2727 7008 16735 37199 77905 155712 300326 563743 1036074 1871316 3328125 5832568
|
||||
18 30 58 130 290 604 1169 2128 3710 6351 11024 20036 38775 79266 167002 353463 738166 1506184 2990058 5769178 10825356
|
||||
23 37 62 108 193 352 660 1280 2553 5166 10476 21162 42594 85792 173866 355862 735855 1532471 3197482 6646280 13695427
|
||||
-7 -9 1 33 93 192 372 760 1668 3760 8302 17494 34850 65539 116523 196223 313307 474021 677271 906407 1116355
|
||||
4 13 35 70 118 179 253 340 440 553 679 818 970 1135 1313 1504 1708 1925 2155 2398 2654
|
||||
13 32 68 135 266 535 1087 2173 4187 7702 13502 22607 36288 56069 83713 121189 170617 234188 314056 412199 530246
|
||||
15 39 72 119 196 333 580 1029 1874 3542 6945 13932 28069 55954 109395 208956 389625 709697 1264414 2206485 3776346
|
||||
23 48 100 198 372 668 1150 1905 3070 4928 8170 14508 27993 57733 123378 265976 568880 1196482 2462432 4942379 9645683
|
||||
22 37 58 84 123 216 478 1175 2866 6656 14639 30679 61822 120915 231510 436964 817030 1517731 2805360 5166426 9499429
|
||||
9 38 78 125 175 224 268 303 325 330 314 273 203 100 -40 -221 -447 -722 -1050 -1435 -1881
|
||||
10 28 69 152 306 570 993 1634 2562 3856 5605 7908 10874 14622 19281 24990 31898 40164 49957 61456 74850
|
||||
10 30 66 140 289 566 1040 1795 2928 4546 6762 9690 13439 18106 23768 30473 38230 46998 56674 67080 77949
|
||||
10 33 71 120 172 215 233 206 110 -83 -405 -892 -1584 -2525 -3763 -5350 -7342 -9799 -12785 -16368 -20620
|
||||
10 22 42 79 147 285 585 1232 2574 5271 10644 21490 43883 90886 189731 395088 813105 1645355 3271757 6413156 12459158
|
||||
10 22 42 75 127 213 369 668 1240 2296 4156 7281 12309 20095 31755 48714 72758 106090 151390 211879 291387
|
||||
-4 -11 -10 7 44 101 174 255 332 389 406 359 220 -43 -466 -1089 -1956 -3115 -4618 -6521 -8884
|
||||
6 13 27 55 126 305 707 1511 2974 5445 9379 15351 24070 36393 53339 76103 106070 144829 194187 256183 333102
|
||||
20 33 58 101 165 248 350 501 838 1791 4500 11709 29625 71674 165847 368562 789903 1638140 3296401 6452952 12322160
|
||||
23 39 62 92 129 173 224 282 347 419 498 584 677 777 884 998 1119 1247 1382 1524 1673
|
||||
8 23 43 75 141 283 577 1166 2326 4597 9059 17933 35875 72670 148631 305041 623716 1262615 2518947 4938203 9498009
|
||||
5 6 14 50 148 354 723 1323 2267 3805 6514 11618 21442 39941 73131 129065 216721 342776 504702 677906 793712
|
||||
17 39 77 145 271 506 944 1760 3284 6161 11714 22748 45250 91860 188860 390266 806371 1661427 3408743 6955423 14089337
|
||||
8 11 17 19 16 30 134 493 1416 3421 7337 14514 27296 50072 91574 169956 324336 641639 1319313 2809709 6143224
|
||||
20 40 82 157 276 450 690 1007 1412 1916 2530 3265 4132 5142 6306 7635 9140 10832 12722 14821 17140
|
||||
26 51 92 152 243 410 767 1551 3215 6604 13286 26131 50219 94068 170936 299469 502108 798261 1187076 1611454 1890399
|
||||
5 4 -3 -16 -37 -71 -118 -146 -26 614 2709 8433 22564 55138 126495 276803 584082 1198534 2408270 4765262 9325584
|
||||
16 24 24 20 20 33 68 136 256 466 840 1512 2708 4787 8292 14012 23056 36940 57688 87948 131124
|
||||
2 4 17 50 116 232 419 702 1110 1676 2437 3434 4712 6320 8311 10742 13674 17172 21305 26146 31772
|
||||
9 21 50 100 171 262 381 562 889 1527 2760 5036 9019 15648 26203 42378 66361 100921 149502 216324 306491
|
||||
13 19 47 108 224 444 870 1714 3432 7027 14700 31188 66405 140452 292753 598086 1193703 2323675 4409173 8156732 14720782
|
||||
9 14 24 54 143 367 864 1895 3980 8163 16475 32679 63396 119726 219493 390258 673259 1128452 1840842 2928308 4551141
|
||||
2 1 4 10 10 -19 -107 -262 -420 -378 302 2477 7844 19892 45891 100715 213678 440047 879496 1704492 3202470
|
||||
23 51 106 201 353 596 998 1681 2859 4937 8750 16060 30476 59057 115120 223470 430907 828331 1597490 3107587 6107791
|
||||
20 41 78 134 207 294 404 583 954 1767 3431 6461 11241 17567 24329 30972 45742 113631 394186 1354910 4215913
|
||||
24 44 85 162 305 572 1065 1962 3594 6612 12299 23081 43291 80299 146385 262490 466732 834112 1520337 2853824 5518005
|
||||
13 25 53 116 249 517 1041 2041 3906 7306 13366 23927 41924 71916 120808 198810 320683 507327 787771 1201630 1802099
|
||||
21 36 51 65 78 93 132 286 825 2400 6393 15550 35227 75980 158961 326806 664625 1338584 2663715 5218371 10030592
|
||||
-2 10 41 111 263 574 1177 2302 4346 7998 14498 26240 48213 91352 180004 367865 770694 1631114 3442799 7181181 14719595
|
||||
18 37 69 128 236 416 695 1128 1861 3265 6203 12558 26282 55463 116296 240439 488096 970361 1885949 3579504 6631284
|
||||
16 22 39 87 214 510 1121 2263 4236 7438 12379 19695 30162 44710 64437 90623 124744 168486 223759 292711 377742
|
||||
9 12 25 49 89 160 301 608 1312 2951 6717 15102 33027 69744 142059 280147 539226 1025523 1957432 3810972 7658912
|
||||
20 23 28 51 127 324 759 1624 3256 6337 12400 24960 51801 109240 229543 473023 946556 1830019 3410988 6125145 10594043
|
||||
13 41 81 141 250 464 868 1574 2715 4435 6875 10155 14352 19474 25430 31996 38777 45165 50293 52985 51702
|
||||
9 25 60 119 218 394 712 1273 2236 3882 6772 12095 22397 43107 85819 175561 367114 781429 1685305 3661271 7960379
|
||||
4 -3 -16 -36 -64 -101 -148 -206 -276 -359 -456 -568 -696 -841 -1004 -1186 -1388 -1611 -1856 -2124 -2416
|
||||
12 22 40 66 101 159 289 616 1428 3364 7800 17594 38458 81425 167274 334550 654272 1257026 2382572 4469306 8312199
|
||||
16 36 62 92 124 156 186 212 232 244 246 236 212 172 114 36 -64 -188 -338 -516 -724
|
||||
-7 -6 1 14 33 58 89 126 169 218 273 334 401 474 553 638 729 826 929 1038 1153
|
||||
21 41 85 171 323 570 943 1470 2169 3039 4049 5125 6135 6872 7035 6208 3837 -795 -8595 -20689 -38453
|
||||
0 2 3 7 42 189 631 1728 4124 8892 17723 33165 58918 100191 164127 260302 401304 603398 887283 1278947 1810626
|
||||
6 27 66 133 252 474 900 1733 3392 6747 13590 27567 55991 113275 227215 450074 877438 1679215 3149022 5780661 10383546
|
||||
9 31 60 105 196 390 771 1445 2548 4325 7416 13619 27615 60490 136517 305923 669051 1423011 2953492 6016853 12099022
|
||||
10 10 21 57 143 333 754 1693 3747 8052 16589 32520 60419 106134 175917 274623 403748 562914 764993 1088463 1815555
|
||||
0 11 47 123 250 438 717 1186 2100 4005 7931 15653 30030 55432 98265 167604 275944 440079 682119 1030655 1522082
|
||||
4 2 5 13 19 5 -59 -207 -444 -647 -311 2028 9979 31542 83085 196006 427388 876388 1708621 3191415 5743531
|
||||
21 28 30 24 16 36 154 489 1199 2436 4246 6390 8058 7444 1146 -16649 -55239 -128788 -258066 -472604 -813324
|
||||
2 1 3 8 31 126 434 1265 3232 7490 16224 33728 68807 139949 285947 586660 1201702 2439383 4874513 9541916 18242623
|
||||
11 15 11 0 -8 20 173 655 1882 4654 10510 22528 47110 97732 202274 416411 846705 1688621 3286965 6229712 11491728
|
||||
22 34 53 83 132 217 384 759 1656 3781 8578 18756 39018 77011 144606 259984 452078 771652 1319659 2317357 4271044
|
||||
-1 10 40 92 174 315 592 1169 2349 4640 8836 16114 28148 47241 76476 119887 182651 271302 393968 560632 783418
|
||||
11 27 70 166 357 711 1348 2493 4581 8479 15978 30885 61394 125101 259370 542362 1135062 2364307 4885498 10000015 20273388
|
||||
16 34 71 142 262 448 727 1148 1805 2912 5045 9795 21275 49208 114707 260357 566838 1179102 2346051 4478772 8233684
|
||||
-1 3 10 20 33 49 68 90 115 143 174 208 245 285 328 374 423 475 530 588 649
|
||||
8 19 45 96 187 347 635 1155 2072 3652 6373 11169 19859 35758 64343 113626 193536 313097 473469 653950 786771
|
||||
16 27 57 113 198 323 534 953 1841 3719 7634 15727 32332 65876 131823 256818 484209 881806 1555374 2678560 4566449
|
||||
6 15 32 61 113 206 365 622 1016 1593 2406 3515 4987 6896 9323 12356 16090 20627 26076 32553 40181
|
||||
12 22 41 78 161 360 818 1788 3675 7089 12934 22598 38391 64551 109515 190999 347381 663416 1328773 2771447 5959410
|
||||
20 37 57 82 120 202 409 905 1974 4070 7921 14798 27191 50372 95791 188266 381292 790377 1667237 3566548 7718806
|
||||
13 31 51 84 169 384 851 1731 3207 5457 8622 12766 17791 23206 27605 27891 19281 389 -3571 134438 850205
|
||||
12 30 69 155 343 727 1450 2720 4851 8376 14327 24862 44585 83254 161329 321456 652505 1340181 2773452 5766664 12017378
|
||||
7 33 73 127 195 277 373 483 607 745 897 1063 1243 1437 1645 1867 2103 2353 2617 2895 3187
|
||||
14 28 57 126 266 511 910 1580 2847 5550 11627 25187 54445 115233 237408 476507 934644 1797152 3395149 6309420 11538196
|
||||
12 20 31 64 149 337 730 1545 3236 6713 13717 27432 53431 101047 185216 328782 565363 943750 1538049 2477213 4031782
|
||||
4 9 15 22 30 39 49 60 72 85 99 114 130 147 165 184 204 225 247 270 294
|
||||
8 16 40 86 162 281 478 850 1629 3313 6920 14505 30198 62187 126285 251980 492162 938034 1741020 3143748 5522366
|
||||
16 27 42 65 100 151 222 317 440 595 786 1017 1292 1615 1990 2421 2912 3467 4090 4785 5556
|
||||
6 20 54 122 238 416 670 1014 1462 2028 2726 3570 4574 5752 7118 8686 10470 12484 14742 17258 20046
|
||||
9 24 58 124 248 479 909 1713 3230 6126 11716 22596 43907 85957 169853 339829 690242 1423895 2975313 6264575 13205537
|
||||
10 30 69 129 215 346 572 997 1808 3310 5967 10449 17685 28922 45790 70373 105286 153758 219721 307905 423939
|
||||
5 6 12 44 147 410 1009 2300 5014 10641 22129 45070 89636 173785 328969 611348 1125520 2076190 3879935 7401246 14436738
|
||||
4 23 58 126 255 497 955 1823 3438 6343 11360 19672 32913 53265 83561 127393 189224 274503 389782 542834 742771
|
||||
-3 3 14 23 25 25 43 111 257 471 648 503 -547 -3539 -10163 -23009 -45867 -84085 -144990 -238377 -377071
|
||||
24 32 45 77 159 360 827 1863 4068 8584 17521 34717 67143 127585 239871 449153 842175 1587195 3012500 5760444 11088242
|
||||
-1 -10 -11 17 100 263 524 900 1447 2377 4337 9008 20296 46552 104484 225721 467367 928352 1773957 3271571 5841540
|
||||
7 9 21 54 125 261 505 927 1647 2882 5033 8829 15541 27268 47277 80348 133031 213663 331917 497560 717981
|
||||
10 25 59 126 244 435 733 1209 2021 3494 6227 11208 19891 34148 55951 86561 124900 164655 189507 165690 30862
|
||||
17 39 65 91 129 232 527 1254 2820 5913 11798 23063 45363 91274 188528 397238 845276 1799567 3807034 7968541 16464470
|
||||
10 5 8 41 136 332 666 1164 1850 2805 4324 7237 13480 27024 55294 111236 216218 403981 725888 1257753 2108568
|
||||
23 28 45 103 240 500 936 1633 2784 4889 9214 18760 40184 87465 188797 399575 827065 1677498 3345611 6582649 12805268
|
||||
16 36 75 162 343 693 1348 2572 4878 9227 17344 32245 59237 108076 197887 368248 703127 1380167 2768016 5612597 11386394
|
||||
9 25 48 72 98 137 208 331 515 741 940 966 564 -667 -3316 -8207 -16451 -29503 -49224 -77948 -118554
|
||||
8 11 19 51 147 387 916 1974 3939 7405 13332 23309 39939 67244 110732 176273 266070 368619 437421 350083 -164985
|
||||
1 18 58 126 237 431 788 1443 2601 4552 7686 12508 19653 29901 44192 63641 89553 123438 167026 222282 291421
|
||||
6 14 44 113 249 499 946 1753 3263 6207 12115 24099 48316 96714 192312 379634 745628 1461428 2864106 5612169 10971811
|
||||
3 -1 -4 15 107 376 1022 2428 5329 11117 22350 43537 82253 150582 266772 456790 755159 1204011 1848664 2727187 3850311
|
||||
-2 11 36 86 184 371 731 1440 2846 5587 10754 20106 36344 63451 107105 175172 278286 430523 650176 960638 1391400
|
||||
2 12 49 136 307 612 1119 1915 3118 4931 7803 12816 22494 42330 83446 166930 330518 638386 1194857 2162772 3787073
|
||||
14 23 56 129 259 471 826 1484 2816 5579 11168 21959 41757 76363 134274 227530 372722 592175 915320 1380269 2035607
|
||||
-3 10 37 93 208 427 810 1432 2383 3768 5707 8335 11802 16273 21928 28962 37585 48022 60513 75313 92692
|
||||
14 26 51 89 140 204 281 371 474 590 719 861 1016 1184 1365 1559 1766 1986 2219 2465 2724
|
||||
13 18 22 22 18 15 24 62 151 316 582 970 1492 2145 2904 3714 4481 5062 5254 4782 3286
|
||||
2 9 33 96 243 556 1172 2313 4353 7978 14545 26820 50378 96085 184258 351319 660028 1214703 2183217 3828008 6548853
|
||||
16 14 18 44 112 244 468 833 1440 2494 4382 7782 13808 24196 41536 69555 113456 180318 279562 423488 627888
|
||||
26 51 102 207 421 842 1643 3133 5872 10895 20161 37455 70161 132626 252290 480413 910142 1705891 3149624 5711711 10156653
|
||||
-8 -9 -5 6 26 57 101 160 236 331 447 586 750 941 1161 1412 1696 2015 2371 2766 3202
|
||||
6 11 36 109 272 579 1093 1890 3099 5048 8652 16275 33429 71844 154659 324750 657532 1279953 2397844 4334305 7582398
|
||||
12 13 19 49 142 372 874 1886 3822 7408 13943 25807 47456 87359 161694 301190 563352 1053519 1959875 3609765 6557578
|
||||
3 11 30 60 101 153 216 290 375 471 578 696 825 965 1116 1278 1451 1635 1830 2036 2253
|
||||
2 5 14 38 86 167 290 464 698 1001 1382 1850 2414 3083 3866 4772 5810 6989 8318 9806 11462
|
||||
12 14 25 57 123 242 448 813 1520 3071 6796 15951 37865 87827 195703 416649 847748 1652956 3099403 5608869 9829151
|
||||
11 19 46 109 234 461 861 1576 2893 5363 9976 18403 33316 58797 100847 168006 272095 429091 660146 992761 1462126
|
||||
12 23 46 76 103 123 168 360 988 2610 6216 13584 28159 57134 115970 237426 488356 999153 2012874 3963868 7599263
|
||||
10 27 58 116 238 503 1059 2170 4308 8331 15813 29644 55142 102218 189816 355285 674142 1300799 2549636 5050248 10033414
|
||||
-1 -4 -11 -23 -41 -66 -99 -141 -193 -256 -331 -419 -521 -638 -771 -921 -1089 -1276 -1483 -1711 -1961
|
||||
25 51 96 173 317 600 1159 2245 4300 8080 14874 26942 48463 87669 161677 307220 603675 1220565 2511928 5198007 10707121
|
||||
6 28 60 95 122 126 88 -15 -210 -528 -1004 -1677 -2590 -3790 -5328 -7259 -9642 -12540 -16020 -20153 -25014
|
||||
14 27 46 83 176 401 886 1840 3627 6937 13133 24885 47239 89311 166843 305910 548124 957743 1631160 2709319 4393682
|
||||
16 28 49 81 128 208 369 702 1349 2526 4627 8552 16517 33764 71801 154073 325302 666144 1315301 2501803 4590846
|
||||
28 43 66 110 191 336 602 1103 2052 3863 7434 14852 30927 66172 142094 299937 614308 1213403 2307810 4230074 7487335
|
||||
17 21 36 76 171 394 901 1991 4208 8544 16875 32885 63920 124479 242406 469310 897323 1685023 3096214 5556282 9732049
|
||||
20 27 37 61 114 218 416 815 1700 3806 8912 21041 48724 109025 234339 483377 958252 1830189 3377111 6037213 10483638
|
||||
0 13 36 73 134 248 489 1018 2144 4402 8643 16149 28862 50022 85992 151103 279532 552483 1156778 2504561 5466066
|
||||
7 5 0 -5 0 33 133 396 1045 2545 5774 12261 24502 46365 83595 144430 240339 386893 604780 920975 1370076
|
||||
13 9 9 34 128 365 862 1820 3630 7095 13832 26934 52012 98876 184552 339505 621668 1148550 2168444 4210603 8385165
|
||||
-5 -12 -23 -30 -18 35 158 387 765 1342 2175 3328 4872 6885 9452 12665 16623 21432 27205 34062 42130
|
||||
5 9 17 39 105 283 715 1694 3815 8241 17147 34472 67267 128237 240613 447347 827905 1527761 2808205 5127421 9268133
|
||||
25 37 57 106 230 518 1137 2397 4859 9508 18054 33532 61594 113281 210702 398013 761477 1464303 2804527 5307542 9869150
|
||||
11 17 46 114 241 455 798 1334 2159 3413 5294 8074 12117 17899 26030 37278 52595 73145 100334 135842 181657
|
||||
4 -1 -4 12 78 257 677 1583 3423 7014 13911 27274 53877 108552 223482 466589 976170 2023577 4123518 8225636 16048444
|
||||
0 1 0 -3 -8 -15 -24 -35 -48 -63 -80 -99 -120 -143 -168 -195 -224 -255 -288 -323 -360
|
||||
11 18 29 49 92 206 522 1339 3257 7370 15531 30701 57394 102230 174608 287511 458455 710594 1073993 1587081 2298296
|
||||
13 15 9 -12 -48 -79 -45 193 934 2793 6973 15712 33032 66133 128347 245886 473338 927958 1861532 3802331 7819427
|
||||
2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62 66 70 74 78 82
|
||||
11 27 52 97 186 362 709 1407 2852 5898 12324 25725 53226 108808 219736 438752 866576 1692276 3264166 6213201 11668991
|
||||
4 13 42 103 207 362 569 822 1123 1528 2245 3810 7372 15123 30914 61103 115686 209767 365428 614065 999261
|
||||
15 21 37 86 203 434 831 1439 2272 3276 4278 4921 4586 2303 -3346 -14328 -33259 -63497 -109221 -175488 -268259
|
||||
11 16 28 64 160 393 913 1979 3985 7464 13083 21703 34688 54819 88416 149606 268111 502480 961366 1836266 3450112
|
||||
19 28 52 114 257 565 1198 2452 4861 9361 17538 31985 56799 98260 165752 273013 439839 694418 1076536 1641980 2468565
|
||||
15 15 13 12 12 1 -45 -137 -191 184 2178 8829 27103 71775 172317 384631 810367 1627833 3140255 5849526 10566770
|
||||
12 11 5 -6 -22 -43 -69 -100 -136 -177 -223 -274 -330 -391 -457 -528 -604 -685 -771 -862 -958
|
||||
14 26 38 50 62 74 86 98 110 122 134 146 158 170 182 194 206 218 230 242 254
|
||||
13 19 31 63 138 294 607 1239 2530 5172 10540 21334 42843 85426 169298 333601 653532 1273267 2471552 4797589 9360217
|
||||
11 3 -4 4 47 149 343 691 1325 2507 4689 8539 14934 25131 41979 74636 152691 362315 929342 2395398 5968245
|
||||
18 22 40 91 193 361 613 998 1668 3038 6128 13283 29669 66335 146381 317205 674569 1409654 2901085 5895585 11864268
|
||||
11 37 82 161 309 586 1087 1974 3560 6490 12081 22905 43732 83003 155088 283716 507161 886051 1515060 2540273 4184711
|
||||
25 39 52 67 92 144 269 587 1366 3134 6880 14520 30088 62684 133303 289715 637379 1401437 3047748 6514061 13642856
|
||||
4 -4 -20 -50 -102 -185 -302 -435 -512 -331 602 3393 10381 26381 61265 135375 290656 612718 1272684 2603156 5230544
|
||||
16 37 62 103 197 413 863 1725 3295 6108 11215 20791 39404 76543 151493 302640 605473 1208410 2406047 4790866 9565986
|
||||
18 28 36 48 72 117 192 305 462 666 916 1206 1524 1851 2160 2415 2570 2568 2340 1804 864
|
||||
6 31 75 155 307 590 1091 1932 3290 5463 9049 15351 27179 50290 95789 183908 349686 651191 1181055 2082235 3569067
|
||||
13 24 44 80 152 311 679 1524 3380 7215 14639 28129 51229 88660 146248 230547 347999 503434 697670 923926 1162710
|
||||
10 22 32 51 114 303 788 1898 4249 8981 18195 35742 68605 129235 239371 436181 782284 1383028 2418714 4208909 7345156
|
||||
7 30 81 174 320 532 841 1335 2242 4084 7930 15770 31017 59118 108216 189751 318817 514002 796327 1186766 1701670
|
||||
14 27 59 134 293 607 1198 2270 4163 7468 13293 23865 43815 82762 160259 314926 620952 1217673 2362755 4528740 8580085
|
||||
8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88
|
||||
8 0 -4 18 98 273 583 1076 1829 3005 4987 8667 16029 31260 62764 126655 252582 493110 938366 1738280 3135532
|
||||
-3 4 19 42 73 112 159 214 277 348 427 514 609 712 823 942 1069 1204 1347 1498 1657
|
||||
14 24 32 37 53 130 397 1139 2922 6787 14546 29230 55761 101947 179931 308262 514798 840698 1345812 2115835 3271653
|
||||
7 23 56 112 206 369 661 1190 2131 3727 6237 9780 14024 17718 18228 11631 -5265 -28077 -27602 87844 547546
|
||||
23 36 62 118 231 444 832 1544 2899 5581 11011 22063 44521 90194 183657 376560 777027 1608138 3321360 6812948 13832967
|
||||
8 0 -5 4 43 136 319 644 1176 1961 2930 3727 3573 1607 -1170 4025 48104 214582 698717 1914790 4680631
|
||||
6 17 37 64 93 116 122 97 24 -117 -349 -698 -1193 -1866 -2752 -3889 -5318 -7083 -9231 -11812 -14879
|
||||
-2 -7 -2 33 136 369 821 1608 2870 4765 7460 11119 15888 21877 29139 37646 47262 57713 68554 79133 88552
|
||||
18 20 30 66 151 310 570 972 1603 2653 4499 7817 13726 23977 41217 69385 114336 184842 294188 462668 721393
|
||||
3 0 -3 -6 -9 -12 -15 -18 -21 -24 -27 -30 -33 -36 -39 -42 -45 -48 -51 -54 -57
|
||||
16 28 38 46 52 56 58 58 56 52 46 38 28 16 2 -14 -32 -52 -74 -98 -124
|
||||
|
|
@ -1,78 +0,0 @@
|
|||
const std = @import("std");
|
||||
|
||||
pub fn main() !void {
|
||||
const content = @embedFile("data.txt");
|
||||
var lines = std.mem.split(u8, content, "\n");
|
||||
|
||||
var gpa = std.heap.GeneralPurposeAllocator(.{}){};
|
||||
const allocator = gpa.allocator();
|
||||
|
||||
var list = std.ArrayList(std.ArrayList(i32)).init(allocator);
|
||||
defer list.deinit();
|
||||
|
||||
while (lines.next()) |line| {
|
||||
if (line.len == 0) {
|
||||
break;
|
||||
}
|
||||
var history = std.ArrayList(i32).init(allocator);
|
||||
var nums = std.mem.split(u8, line, " ");
|
||||
while (nums.next()) |num| {
|
||||
const parsed = try std.fmt.parseInt(i32, num, 10);
|
||||
try history.append(parsed);
|
||||
}
|
||||
|
||||
try list.append(history);
|
||||
}
|
||||
|
||||
var part1: i32 = 0;
|
||||
var part2: i32 = 0;
|
||||
|
||||
for (list.items) |history| {
|
||||
var derived = std.ArrayList(std.ArrayList(i32)).init(allocator);
|
||||
try derived.append(history);
|
||||
|
||||
var cur = history;
|
||||
while (true) {
|
||||
var d = try derive(cur, allocator);
|
||||
try derived.append(d);
|
||||
cur = d;
|
||||
|
||||
var allZero = true;
|
||||
for (d.items) |item| {
|
||||
if (item != 0) {
|
||||
allZero = false;
|
||||
}
|
||||
}
|
||||
if (allZero) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
var newItem: i32 = 0;
|
||||
var newItem2: i32 = 0;
|
||||
for (derived.items, 0..) |_, j| {
|
||||
// part 1
|
||||
const idx = derived.items.len - j - 1;
|
||||
const lastItem = derived.items[idx].getLast();
|
||||
newItem = lastItem + newItem;
|
||||
|
||||
// part 2
|
||||
const firstItem = derived.items[idx].items[0];
|
||||
newItem2 = firstItem - newItem2;
|
||||
}
|
||||
|
||||
part1 += newItem;
|
||||
part2 += newItem2;
|
||||
}
|
||||
|
||||
std.debug.print("Part 1: {d}\n", .{part1});
|
||||
std.debug.print("Part 2: {d}\n", .{part2});
|
||||
}
|
||||
|
||||
fn derive(history: std.ArrayList(i32), allocator: std.mem.Allocator) !std.ArrayList(i32) {
|
||||
var list = std.ArrayList(i32).init(allocator);
|
||||
for (0..history.items.len - 1) |idx| {
|
||||
try list.append(history.items[idx + 1] - history.items[idx]);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
0 3 6 9 12 15
|
||||
1 3 6 10 15 21
|
||||
10 13 16 21 30 45
|
||||
Loading…
Add table
Add a link
Reference in a new issue