This commit is contained in:
Acvaxoort 2023-12-10 16:43:59 +01:00
parent 29812f29f6
commit f1f6f0f79c
4 changed files with 347 additions and 0 deletions

7
day10/Cargo.lock generated Normal file
View File

@ -0,0 +1,7 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "day10"
version = "0.1.0"

8
day10/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[package]
name = "day10"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]

140
day10/input.txt Normal file
View File

@ -0,0 +1,140 @@
.|-J--7F7F-F|-F777F7J-J7F--7..-LJ7F|.F7L-77--F7|7.F-7-77.F.L---J.F---FLJF-F|77-|-----|-FL-J-|7-7FF.7--F7F7.F--F7.FF-F--J-.L-L77--77|---L7--7
--7-L7.FJ7--JF---7F||.LL|J-7.FJ7.-JJ--JJ.||JFJLF.FJ-|7J7L7-L7JJ|77-J||JFLJJ.LL--7JFJJJ||FL.LJ|-7FFL.FJ|F-F-|J||L-L-LJL-7LJFLJJL--F77.LF.|F|F
LJ7L|.L|..LF|JF-7L-7-7|L||7L|L7-7|7FF-JL|F|-J77L7FJ.L|--J|7LJ.|F7-F7||77J7.F7|LLL.|-|---7JF7-|-7-7|FJF7..LLJLLJ..L7LL-FL7FF-LFJ.FF.-|7LJ.-L|
FJF7-7.|FL-7L||-|JFJ-|JJ||7J|F7F|JFL|.J7L--7LFJ||||L.L-|.-L.LF-JJJLFJL7..F|.|7...F7--.|F|.FJ7JFLJL|JFFL-7|FLLJL|-|-F.FF-7-LF.LJ-JL7||FJFJJLJ
--J|.7.FJF7|7--7F7|-7J7.||L-LJ|7.||.7-||.|J|LFL7FLJ7F7JF-L|-F|F7FFFF7LF-F-7FLL-7.7L-J-FF--7F7F7JF--7FF7LL|-F--7JFJF7-FJ7LL77-|...FFLJJ7|JFJJ
L|.LF-F7LLJJL|.JL||FLL|F|F|7|JL-77L..--J-F-|.LJ||--LJL||-||F-|.|-FFJ|F7-L7L7-7||F7.LJ|LL7FJ||||F7-L-7.-7||F-7LJ7L-|JLJ-77F|L|L-FJJ77|F|-JLJJ
||.|.L|.||.LJ|.|.L-L7|L7L|.LJF-LL-LJ-|JJJ.|LFJFJ|7FL|-|JF-J77LLF-7L7LJL7||FJFF7LL77.FJ-L|L-JLJ||L7JJ.FL|L|7.FJL7LJ|F|.||7--7|F-7J-FJJ|||F|.F
-FF-.|JLLJ|7.F.J-JJJL--|-J7LF|-|-|J-F||.F|-F7LJ.JJ-F-7|77|.LF.LL7|FL--7L-JL77LJ.F-J.F|7JL-7F--J|FJ|.|7-JJJLF7LLJ-|7.FJ-LJ.LLJF.|..|7-|.F---J
LFJ7||.LFF-L7JF.7|7.LJ7L7JF-LJ77FF7.FF7F77F|L77.|7.L7|77-F777.F7|L7F--JF-7FJ7777L-FFF7F7F7||-F7||-F--J-|FFF||-|-777--J|FLFLJFJFL|.LL.F-J.FJ|
|.J7.F|.FJ|JL-LJL-|7F|LFJFL7JLJ-FJ|F7|||||F|FJ7F7FF-J|F7FJL7F-7FJFJL7F-JFLJF7.F7LFF7|||LJ|||FJLJL7|J.L7J|JFJL7-F7F|7|.L--7JF7F|--7LLF77LL-J7
F7J|-L-L-|-7FJLFJ|.L77F-L--777F|L7||||LJ|F-J|F7|F7L-7|||L-7|L7||FJF7|L--7F7|L7|L--JLJ|L-7||||F---JF-7-|7JFL-7|FJ|FJJF7F7J..|L|77L|F|L-7J|L.|
F-JLJLJJJ.|LJ7FF-F-FJJ|JJ.F-JJ7F7|LJLJF-JL-7|||F||J|||||F7||L|LJL-J||F--J|||FJL-7F--7L--JLJ||L7F--JFJLF7FF7FJ|L7L7FFJ|F7JL-|7|L|JL-7FFL.7---
..||-|F--JJ-FFLJ||-||-|--7|7FFF||L7F7FJF-7FJLJL7||F7|||||LJL7L----7||L7F7|||L--7LJ7.L7F--7FJL7||F--JF7|L7|LJFJFJFJFJFJ||7JFFF.||LJ..J||FF7||
|7F7.|J.LLL-7J-L-7JL77.-F-J--|L|L7LJ|L7|FJL-7F-J|||||LJ|L7F-JF7F7FJLJFJ|||LJF--JFF7F-J|F7||F7|LJL-7L||L7||F7|FJFJL|FJFJL7FF7J--F7|J..L-|JL-J
.-JJ7|LFJF--|.|.||7.LJ7.-JJ|.7-L7|F7L7||L-7FJL7FJ||||F-JFJ|F-J|||L--7L7|||F-JF7F7|||F-J|LJLJLJF--7L7||FJ|LJ||L7L-7|L7L7FJF7F7|LF-7JL7|7|7J|J
|J7L|L.|FJJ-|.F-JJJFJJ|..|7LF---J|||7|||F-JL7FJL7||LJL7|L7|L-7LJL7F-JFJ|||L--J|||||LJF7L----7FJF7L-J||L7L7FJ|J|F-JL7|FJL7||||-FJFJ-L|-L7--FJ
JL7.JLF|JL7JLFLJ..FJ7.|-FJ7FL-7F7LJL7|LJL77FJ|F7|||F--JF7||F7L--7LJF7L7|LJF---J|LJL7FJL--7F-JL-J||F7||FJFJL7L7||F-7||L-7|||||.L7L7JLL-|J|.|7
FF|-L7-7F-7.F|F77-F|LFJFJ|LF7.||L--7|L-7FJFJFJ|LJ||L7F7|LJLJ|7F7L7FJL-J|F-JF7JLL-7FJL---7|L--7F-JFJ|||L7|JFJFJ|LJFJ||FFJLJLJL-7|FJ-F|7|FF7.F
F777--FJJJLF-|-LL.FJ7FFF-7J|L7LJF7J|L--J|-|FJF|F7LJFJ||L---7L-JL7|L---7||F7|L7JF7|L7F7F7||F77|L-7|FJ|L7|L7L7|-L7FJFJ|FJF------J|L77-J-LFJ77J
L-J777|-|LL|7LJ|L--.F7||FJ-L7L--JL7L---7L7||F7LJL7FJ-|L7F77L---7||F---J||||L7|FJ||FJ|LJ||LJL-JF-J||FJFJL7|FJ|F7||||FJL7|.F7F---JFJ--7F-J||F7
.|-F7-7.77.LL--JJJF-.FFJ|7JLL7F-7FJF---JFJ||||FF7||F7L7LJL7LF7F||||F-7FJLJL7||L7|||7L-7|L-7F-7|F7||L7L--J|L7LJ||L-J|F7||FJLJF-7FJ7J7.J|FL-F7
7-J|J..FLFL7F7J||.F|F-JFJF7F7||FJ|-L---7|FJ|||FJ||||L7L--7L-JL-JLJ||FJ|F---J||FJ||L7JFJ|F7|||LJ|||L7L---7L7L7FJ|F--J|||||F--J7LJ-LF77.77J.|J
L7FJF7-7FL-JJJ.F-7--L-7|L||||LJL7|F7F--J||FJ|||FJ||L7L-7|L--7F---7LJL-J|F77FJLJFJL7L7L7||LJL7F7||L7L7F--JFJFJL7|L-7FJ||LJL-7F7F-7-||7-LL-L|7
.L|-7.FLJ.-|JJ-7FF7.|FJL7||||LF-J|||L7F7LJ|FJ|||FJL7|F-JF-7-LJF7FL7F---J||FJF-7|F-JFJFJ|L--7|||||J|FJL--7L-JF7LJF-JL7LJF7F7||LJFJ-||J.7-7.|7
|.|.F.77||.-7J.|F-J-LL-7LJ||L7L-7||L7LJL7FJL7|||L-7LJL7LL7L7F-JL--JL7F-7|LJFJJLJL7FJFJFJF7FJLJ||L-JL7F7LL7F7|L--JF--JF7||||LJF7L--J|-7L-JLJJ
|-|-JF|-FJ.LJ777F77|.F7L-7|L7L-7||L7|F--J||FJ|||-FJF--JF-JFJL------7||FJL-7L7F7F-JL7L7|FJ|L7F-J|F--7|||F7LJ|L7F-7|F7FJLJLJ|F-J|F--7|.|J|.L7J
LJJ7FLLF-F.L|LF7||F-7|L7FJL7L-7||L7||L--7L7L7||L7|FJF7.L-7|F7F-----JLJL-7-L7|||L--7|FJ|L7|FJL-7LJF7||||||F7|FJL7||||L----7LJF7LJF7LJFL-|7LL.
.|FFFJJ|JFLF-7|||||FJ|FJL-7|F7|LJFJ||F7LL7L-JLJFJ|L-JL-7FJ|||L-----7F---JF7|LJ|F7FJ|L7|-|||F--JF-J||LJ|||||||F7||||L-----JF-JL77||J.FJ||F-LF
LFJJJLFLF7|L7LJLJLJL7||F-7||||L-7L-J|||F7L-7F--JFJF--7FJL7|||LF----J|F7LFJLJF-J||L7L-JL-JLJL7FFJF7|L-7LJ||LJ||||||L-----7FJF-7L7|L--7FFL-7-|
||||L777|L7LL-----7FJ||L7|||||F7L7F-J||||F-J||F7|FJF7LJ7FJ||L7L----7LJL7L--7|F7|L7L---7F7F-7|FJFJLJF7L-7||F7LJLJLJF-7F--J|FJ.L7LJF--JJJL.---
FL|77JF-L7|F------J|FJL-J||||LJ|L||F7||||L-7L7|||L7||F7FJFJL7|F7F--JF--JF-7|LJ||FJJF-7LJLJF|LJFJF7FJL7FJ|||L------J||L---JL7F7L--JJFL-LL|.J.
J.|J7-L-FJ||F-----7||F---J||L7FJFJ||||||L--JFJ|||FJ|||LJFJF7||||L--7L--7L7||F-J|L-7|FJ|F7F-JF-J7|||F7|L7||L--------7|F7F7F7LJL--7L--J..L77|.
|7|.-77.L7|LJF-7F-JLJL-7F-J|FJL7|FJ||||L---7|FJLJ|FJ|L-7L7||||||.F7|F--JFJLJL--JF-J||F7||L7FJ.F7||LJ||FJLJF7F7F7F-7|||LJ|||F----J7.F7--7.L77
FF-.L|FF7||F7L7|L---7F-JL7FJL-7||L7|LJ|F7F7||L--7LJFJF7L7||||||L7|||L7F7L-7F----JF7|||||L7|L-7|||L7FJLJF7FJ||||LJLLJ|L-7LJ|L-----77||--|.FJ|
F|JF7F-J|||||FJL----JL7F7|L---J|L7|L-7|||||||7F7|F-JJ||.||||||L7||||FJ||F7||F7F7J|||||||FJ|F-J||L7|L--7|LJJLJLJF---7L7FJF7L7F7F--J77||-FLJ-7
-JFL-L-7||LJ|L-------7|||L-7F-7L7||F7|||||LJ|FJLJ|F7FJ|FJ||||L7|||||L7|||||||LJL7|||||||L7|L7FJL7|L7F7||F----77|F--JJLJ|||LLJLJF7F-7FL-7-|F7
.F7.LF-JLJF7L--7F7F--J|||F7||FJFJ||||||||L-7|L7F-J||L7||FJ|||FJ|||||FJ||||||L7F-J|||LJ||7||FJL7L|L7||||LJF7F-JFJL7F-7|F-JL-7F7FJLJFJJ-LJ.LLJ
.LJJ7L----JL--7|||L--7LJ|||LJL7L-JLJ||LJ|F7||FJL7FJ|FJLJ|FJ||L7|||||L7||||||FJL-7||L-7LJFJ|L7FJFJFJ||||F-JLJ.FJF7||FJFJF--7LJLJF-7|.|..77..|
F-JJFF7F------JLJL77FJF7|||LF7L----7LJF7|||||L7FJ|FJL-7.LJFLJFJ|LJ||FJ||||||L--7|||F7|F-JFJJ|||L7|L||||L----7|FJ|LJL-JFJF7L7F-7L7LJ7-77L7--|
F.-7FJLJF7F7F----7|FJFJ|LJL-JL-----JF-J|||LJL7|L7|L7F7L--7F--JFJF-J||FJ|||||F7FJLJ||LJL7FJF-J|F-JL7|||L7F---J|L7L-----JF|L7|L7|FJ7F|JLLFJL77
|FLLL-7FJLJLJF---JLJFJFJF----7F7F7F7|F-J|L-7FJ|7||FJ||F--JL-7FJ-L-7||L7LJLJ|||L7F-JL-7JLJ.L7FJ|F7FJ||L7|L7-F7|FJF7F-7F-7|FJL-JLJ-F-.F7.LJ||J
J--||L||J7.LFJF----7L7L7L7F--J|LJLJLJL7FJF7|L7L7LJL7|LJF---7LJF-7FJ||FJF7.FJ|L7||F-7FJF7F7FJ|-||||L||7LJ|L-JLJL-J||FJ|FJ||F7F7F7|LJ-F-J..|..
||FJFFJ|-F--JFJF7FFJFJ-L-JL-7FJF------JL-JLJFJFJF--JL--JF-7L7|L7|L7||L-JL7L7L7||||FJL-JLJ|L7L7||||FJL7F-7F-------J|L-JL7||||||||F7|.LF7.-|7.
L7J-L|FJ-L---JFJL-JFJF--7F7FJL7L-----7F7LF-7L7|J|F-7F7F-JLL-JF7|L7LJ|F-7FJFJFJLJLJL7F--7FJ.L7|||||L-7|L7LJF-------JF7F7LJLJLJLJ|||F7-|-7..FF
L7--FLJJ.FF7F7L-7F7|.L-7|||L-7|F----7LJL-JFJ7|L7LJFJ||L---7F-JLJFJF7||FJL7|FJF-----JL7|LJF--J||||L7FJ|LL--JF-7F-7F-J||L--7F-7F-J||||.|FJFJFJ
-L-LL|.FLFJLJL--J|||F--JLJ|F7LJL---7|F7F-7L-7|FJF-JFJL--7FJL---7|FJLJ|L7FJLJJ|F--7F-7L7JFJF-7||||FJL-JF7F--J7|L7|L-7|L--7||.LJF7|LJL7-|.7JFJ
FL7.|.|JLL---7F-7|LJL----7||L7F-7F-JLJ||FJF7|||-L7FJFF-7|L--7F7|||F-7|FJL--7FJL7FJL7L7L7L7|FJ|LJLJ|F7FJ|L---7|FJL7FJL7F7||L---J||F--JJJF.F-J
|.|F-7.|JLF7F|||LJFF7FF7FJLJFJL7LJF-7-LJL-JLJLJF-JL--JFJL-7FJ|LJLJ|-|||F7F-JL7FJ|F7||L7L7LJL7L7F--7||L7|F---JLJ|FLJF7LJLJL-----J|L-77-7JLJF-
FFJ7.F|J.L|L7LJF7F7||FJ|L--7L77L--JFJF--------7L7F7F7FJFF7LJ|L-7F7|FJ|||LJF7LLJ.LJ||F7L7|F--JFJL-7LJL-J|L----7F7F-7||F7F7F------JF7L77.LJF|.
7-L-FJLJ--L7L-7|LJLJLJFJF7-L7L-7F--JFJF7F--7F7|FJ|||LJF7|L-7F7FJ||||FJ|L-7|L--7F-7LJ|L7||L7F7L7F7L7F7F7L7F--7LJ|L7||||LJLJF7F---7||FJJ77|7|J
.||JLFJ7J7LL-7|L-----7L7||F7L-7|L---JFJ|L-7LJLJL7||L--JLJF-J||L7|||||JL7FJ|F7FJ|FJF7L7LJL7|||FJ||.LJLJL7LJF7L-7L-JLJLJF-7FJLJF-7LJLJJF7-LJ7.
LFF7L7.J-||.FJL-----7L7LJLJL--J|F7F-7|LL--J|F7F7LJ|F----7L--J|.||||LJF-JL-J|LJFJL7|L-JF7FJ||LJ|||F7F---JF-J|F7|F-7F7F7L7||F--JFJ|7|L-F-7F-77
|JL|F|7J.F-7L-7F7F7FJLL-7F----7|||L7|L7F7F7FJLJL-7|L---7|F7F7L7|||L7JL-7F-7L-7L7FJL7F7||L7LJF--JLJ|L----JF7LJ||L7|||||FJ|LJF-7L7F77..LLLJ-J|
.7F|FF7-F|FJF7||LJ|||F7FJL7F--JLJL-JL-J||||L7F---JL7F7FJLJ|||FJLJ|FJF--J|FJF-JFJ|F-J|LJL-JF7L----7|F7F7F7|L-7|L-JLJLJ||FL-7L7L7LJL777-JF-.||
||FLFJL7FJL-J|LJF7|L-JLJF7|L7F---------JLJ|FJL--7F7|||L7FFJ|LJF7LLJFL--7|L7L7FJFJL7FJF----JL7F-7FJ||LJLJLJF7LJLF7F--7|L--7L-J.L-7FJ.J..|.FJ|
FL7-L-7|L---7|F-JLJF-7F-JLJFJ|F-----------J|F---J||LJL7L7L7L--JL-7F----JL7L7LJFJF7LJFJF7F7F7|L7|L7|L--7F--JL-7FJLJF-J|F-7L7JF7F7LJ77|FL-FLF-
LJ.7LFJ|F7F-JLJF--7|LLJF7F-JFJL------------JL--7FJL--7|FJL|F--7F7||F---7FJ-|F7L-JL-7L-JLJLJ|L-JL-J|F7FJ|F----JL7F-JF7LJLL7L-JLJL7F7-LJJ-LJ|J
.FJ.LL7LJLJF-7FJF-JL7LFJLJF-JF7F-----7F--------J|F---JLJJFJL-7||||LJF--JL-7||L7F7F-JF---7F7L-----7LJLJFJL---7F7||F-JL---7|F7F---J|||LJ--|.--
F7J|-LL7F-7|FJ|-L---JFJF--JF-J||F---7|L-------7L|L----7F7|F7FJ||LJF7L--7F-J||FJ||L-7L--7LJL------JF7F7|F----J|LJLJF7F---J||LJF7F-J|J77.FF-J|
|J.|L|-LJJ||L7|F-----JFJF--JF7LJL7F-JL--------JFJF----J||LJLJ7LJF-JL---J|F-J|L7|L--JF-7L7F7F--7F7FJLJLJL-----JF7F7|LJF7FFJL--JLJF-J|7-7.J7|7
FF7FF7F---J|JLJL--7F7FJ7L---JL7F7|L-----7F--7F7L7|F---7||F7F7F7LL-7F---7|L7FJ.|L7JF7L7||||||F7LJ||F7JF--------JLJLJF7|L7L-----7FJJL|7J..L7J7
7-||||L--7FJF-----J|LJF------7||||F----7LJF7||L-JLJF--J|LJLJLJ|F--J|F--JL7|||FL7L7|L-JL7LJLJ|L--J||L7L-----7F--7F7F|LJFJF7F7F7LJJ|JLL7J.FJ.7
LJF-JL---J|.L-----7|F-JF7F--7LJ|LJL---7L--JLJ|F---7L--7|F7F7F-J|F-7|L-7F7|LJF-7L-JL-7F7L-7F-JF7F-JL7||F7F--J|F-J||FJF7|FJLJLJL---7--JLF|JL7.
|7L---7F7FJF-----7LJL--JLJF7L-7|-F----JF7F7F7||F-7|F7FJ||LJLJ|FJL7LJF-J||L-7L7|F7|F7LJL-7||F-J||F--JL-J|L---JL--JLJFJLJL7F7F7F-7FJJ.|-F|7FFL
-7F---J||L7L7F7F7L7F7F-7F-JL--J|FJF7F-7|LJLJLJLJFJLJLJFJL----7L7FJLFL-7||F7L7||||FJ|-F--JLJ|F-J|L-----7L------7F7F7L----J|LJLJ.LJJ.F7.-J7.FJ
|LL-7F7|L-JLLJLJL7|||L7|L-7F7F7|L7|LJFJ|F-7F----JF7F7FJF-7F7FJFLJJLF-FJ|LJ|FJ||||L7L7L----7||F-JF-7F7FJF----7F||LJ|F---7FJ-F-----7J|L-J|L7L7
||LL||||.LF-7F---JLJL-JL-7||LJLJFLJF7L-JL7|L-----J||LJFJFJ|LJ--JJ-FJ7|FJJLLJFJLJL7L7L7F--7||LJF7L7LJ||FJ-F-7L7|L-7||F-7LJF7|F---7|-FJJF7F-7|
.LJL||LJF|L7LJF7F7F-7F7F7|LJ-F7F7F7||F-7FJL---7F--J|F-JLL7|J|JJ|J7F.LLJ|7-||L-7F7L7L7||F-JLJF7||7|F7LJ|F7|FJFJ|F-JLJL7|F7|LJ|JF7LJ|F7.JL|F7-
|7-FLJJ|7F7L--JLJ||FJ||||L7FFJLJLJLJLJ-|L----7|L---JL--7|LJ.LJ.|7-J-||JF-7|F--J|L7|FJLJ|F7F-JLJL7LJL--J|LJL-JJLJF----J||||F-JFJL-7-||7JLF|JL
L7JFJF|F-J|F7F7F7LJL7|LJL7L-JF--------7L-7F--JL7F7F-7F-JF--777L-JL|LJ-7L.LFJF--JFJLJF-7|||L----7||F7F--JF-------JF----J||||F7|F--J7||J-FFLJ.
LJ-|FF7L-7||LJ|||F--JL7F7L7F7|F-----7FJF-JL--7-LJLJ|LJF7L7FJ77.|JL77.L7.FLL-JF--JF-7L7|LJL--7F7|L-JLJF--JF-------JJF7F7|LJLJ|||.F7F|L-7|LL-7
-|F-7||F7||L-7||LJF---J|L7||LJL----7||FL-7F--JF--7|F-7|L7|L7F7F-7.J7LJL-J7|JFJF-7|FJFJL---7FJ||L-7F7FJF--JF7F7F7F7FJ||||F-7FJ||FJL7|F-JJJ|F|
|LL7||LJ|||7FJLJF7|F-7FL7|LJF------J||F77|L---JF7L-JFJ|FJ|FJ|LJFJ7L7J-L7-FL7L-JJLJL-JF7F77||FJL--J|LJ.L---JLJLJ|||L7|||||LLJF|||F-J||J|.FJFL
F.||LJF7||L7L--7|LJL7|F-JL--JF--7F-7LJ|L7|F7F7FJ|F-7L7|L-JL-JF-JJ-F----|7|JL.|7FF----JLJL-JLJF7F7FJF--7F7F7F---J|L-JLJLJL----JLJL-7|L-7F7-J.
F-FJF-J||L7L7F7LJFF7||L--7F-7L7FJ|FJF7|FJLJLJLJ-LJJL7LJF7F7F7L-7-7FJ7|FJ-LJFJL-JL7F7F-7F7F7F7||||||L-7LJLJ|L---7|F----7F7F7F7F-7F7LJF-J|L7.7
|.L-JF-JL7L7|||F7FJLJ|F7FJ|LL-JL-JL-JLJL-------7F--7L7FJLJ||L--J-7|-F7JJL|---7J7FLJLJ|LJLJLJ||||||F--JF7F7L----J|L---7||||LJ|L7||L7FJF-JFJ.|
FF-F7L--7L7|LJ|||L--7|||L-JF7F--7F---------7F--J|F-JFJ|F7-LJF|.||.|F|JL7.F.|F7.LFF--7F------J|||LJL---JLJL---7F-JF7F-JLJ|L7FJFJLJJ|L-JF-J|FF
LF-J|FF7L7|L-7||||F-JLJL--7|||F7|L---7F---7LJF--JL-7L7LJ|-|||.L-F7|FJFFJFF-77L77FJF-JL-7F7F-7|||F-----7F7F7F7LJF-JLJF--7|FJL7L-7F7|F-7L----7
LL-7|FJL7|L--JLJL-JF7F---7|||LJ||F7F7LJF--JF-JF7F--J.L--J7JLL||F||JJFFF7-L7||F|-L7|7F77LJ||FJ|LJL----7LJLJLJL-7L----JF-JLJ|FJF-J|LJL7|F--7FJ
F--J|L-7LJF--7F---7|||F--JLJL7FJ||LJL--JF--JF-J|L---7FF7F77|FF--J|..F7||7FJL7F7F7|L7||F7JLJL-JFF7F--7L-------7L-7F---J-F7F7L-JF7L7F7||L7JLJJ
L--7L--JF7|FFJL7F-J|LJL-----7|L7LJF7F---JF--JF7L----JFJ|||7F7L--7L-7||||FJF-J|||LJFJ|LJL7|F7F--J||F7L-----7F7L-7|L7F---JLJ|F7FJ|FJ|||L7L--7J
LF-JF7F7|||FJF7|L7FJF-------JL-JF7|LJF---JF7.|L-7F7F-JFJ||FJL7F7L-7||LJ|L7|JJ||L-7L7L--7L-JLJF-7LJ|L7F-7F7LJL-7||FJL-7F---J|LJFJL7||L7|F--J7
FJF7|LJ||||L7|LJ|||-L7F7F7F7F7F-JLJF7L----JL-JF7LJLJF-J-||L-7|||F7||L7FJFJL7FJL7||FJF--JF-7F7L7L7FJ|LJLLJ|F--7LJLJF7FJL7F7J|F-JL|LJL-JLJ-|J|
L7||L7L||LJ|LJFF-J|F-J|LJ||||||F---JL------7F-J|F---JF-7|||||||||||L-J|FJF-J|F-JFJL7L--7|J||L-JL|L7F-7F--JL7FJF7F7|LJF7||L-J|F--7JF-7-L-7JL|
LLJL-JJLJJ-F---JF-JL7FJF-J|||LJL-7F--77F7F7|L-7|L-7F7L7|||F7|||LJ|L-7FJ|FJF7||-FJF7L--7||FJL77F7L-JL7|L----JL7|||||F-JLJ|F-7||F-JF|FJ..FL-J|
F|.LL7.LL--L7F7FJF7.LJLL--JLJ7F--J|F-JFJLJ||F7|L--J||FJLJ|||||L-7L7J|L-JL7|LJL7L7||F--JLJL7FJFJL-7F7|L--7F-7FJ|LJLJL----JL7LJ||JF-JL-7-7.LF7
FJ.|---JFJF|LJ||FJ|F--7F-7F7F7L---JL--JF--JLJLJF7F-JLJF7FJ||||F-JFJFJF7F7|L--7|J||LJF7-F7FJ|LL--7|||L--7|L7|L7L7F----7F7F7|F-JL-JF7F-JF7--L7
L|-|..|FF|L7JJLJL7|L-7|L7||LJL----7F7F-JF-7F--7||L7F7FJLJFJ|||L-7|FJFJLJLJF7FJL-JL--J|FJ|L-JF-7FJLJ|F7FJL-JL7L-JL---7LJLJ|LJF7F7FJ||LJ---F..
-F-F-77|-F.7.FF--JL7FJL-JLJF7F-7F7LJ|L--JFJ|F-J|L7LJ|L-7.L7|||F7||L7L---7FJ|L---7F7F-JL7L7F7L7|L7F7LJLJF---7|F7F-7F7L-7F7L--J||LJ|LJ.F-|-7-L
F|F7J.J|L|.LF7L-7F7LJF7F7F7|LJFJ||F7L----J||L-7|FJ-FJF-JF-J||LJ|||FJF---JL7|F7F-J|LJ|F7L7LJ|FJL7LJL----JJF7||||L7LJ|F7LJL-7LFJL7LF7-FFJL---7
F|7.F-JJ||FFJL--J|L7FJLJLJLJF7L-JLJL---7|F-JF7||L7FJFJF7L7FJL-7|||L7|F7|F-JLJ|L7FJF7FJ|.|F-JL-7L7F-------JLJLJL7L-7|||F7F7L7|F-JFJ|--J7|FL.F
FF--L.7J--FL---7FJJLJFF7F---JL------7F7L7|F-JLJ|FJL7L-JL-J|F--J||L-JLJL7|F-7FJFJL7||L7|FJL---7L7||F-7F-7F7F--7L|F-JLJLJLJL-JLJF7L7|..F|J7|F7
L|7.J7L-|.FF7F-J|F----JLJF--7F7F---7LJL-J|L7F77||F7|F-----JL-7FJL--7F--JLJ-||FJF7|||FJ|L-7F--JFJLJL7LJ|LJLJF7L7|L7F-7F-7F-7F7FJL-JL7F7JJL-LJ
..F7.|F7JFL|LJF7|L------7|F-J|LJF7FJ-F7F7|FJ|L7|||LJL7LF7.F7FJ|F7F-J|F-7FF-J|L7|LJ|||FJF7|L-7-L7F--J7F7F---JL-JL-J|FJL7||FJ|LJF-7F7L7---F7.-
J7L|..-JLF7L-7|LJF-----7|||F-JF-J|L--JLJLJL7|FJ||L7F7L-JL7|||FJ||L7FJL7L7L7FJFJL-7|LJ|FJLJF-JF7LJF7JFJLJF7F7LF7|F7||F7||||FJF7L7LJL-JF7.|J7|
LJL|--.F-JL7FJ|F7L7F--7LJ|||F7L-7L------7F7LJL7|L7LJ|F---J||||FJ|FJL-7L7|FJ|FJF--JL-7|L-7FJLFJL--JL-JF7FJLJL-JL-JLJLJLJ||||FJL7L---7|---|F-L
L7--7F-|F-7LJFJ||JLJ.FJF7|LJ||F7L------7LJL7F7|L7L7FJL-7F-JLJ|L7LJF--J7|||FJL7|-F-7|||F-JL-7L------7FJ||F----------7F-7LJLJL-7|F7F7L77|7FJJ.
|F7.LL-LJLL-7|-||F7.FJFJ|L7FJLJL----7F7L-77LJLJJ|FJL-7FJ|F---J-L-7L-7F7|LJ|F7|L7|FJFJ|L7F--JF7F7F--J||LJL7FF7LF7|F7|L7L-7F---JLJ||L7L7JLFJ.F
7J-.||-LL7F-J|FJLJ|FJFJFJFJL-------7LJL--JF7F7F7||F7FJL-JL77F77F-JF-J||L-7|||L7||L7L7|FJ|F7.|LJ|L-7FJF7F7L-JL-J|FJ||FJ-FJL--7LF7LJFJFJ7L-7JJ
J..7-F77L-L--JL--7LJFJ7L7|F--------JF----7|||LJLJ||LJF-7F-JFJL7L-7L7FJL7FJLJL7|||FJFJ|L7LJL7L7FJF-J|FJLJL-----7LJFJ|L-7|F7F-JFJL-7L-J-7|.L|7
J7.FJL--7.FLLF7F-JF7|F-7LJL---------JF---J||L-7F-J|F7L7LJF7L-7|F7|FJ|F-JL7F-7LJ||L7L7|FJF-7|FJ|FL--JL----7JF7FL-7L7|F7|LJ|L--JF--J.|JLJ77F77
.-7|7FJLF7JF|||L-7|||L7|F7FF7F7F-----J-F-7|L7FJL7FLJL7L7|||JFJ|||||FJL7F7||FJF7LJFJFJ||FJ-LJL7|F-7F--7F7JL-JL--7L-JLJLJFFJF7F7L-7-|..FJ-7F-|
FLLJFJFL.LLFFJL--J|LJFJLJL7|||LJF7F-7F-JFJ|FJL7FJF7F7L7L-JL7L7|||||L7FJ||LJL-JL-7|FJFJ||F7.F7|||FJL-7LJL---7F-7L-7F7F7F7L-J|||F-J.|FFJFL-7JJ
7J.|JFFJL-LFJF-7F7|JFJF7F7LJLJF-JLJFJ|F-J7|L-7||FJ|||FJF7F7|FJ||LJ|FJL7||F7F7F-7||L7|FJ||L7||||||F-7L--7F7|LJFJF-J|LJLJL--7|||L-7J-LLJF7|L||
L.J7-7|.|FFL7||LJ|L7L-JLJL7F-7|F---JL|||F7L-7||||FJ||L7|LJLJL7|L-7|L7FJ||||||L7|||L||L7||FJ||||||L7|F7LLJL--7L7L--JF7F7F7FJLJ|F-J.LLJJ|FFF|J
|.||-J-.-FF-||F--JFJLF---7LJ-LJL---7FJ|FJ|F-J|||||FJL7|L7F7F7|L7FJ|FJL7|||||L7|||L7|L7|||L-J|||||FJ|||F-7F7FJJL7F7FJ||LJLJF7LLJ777.LF--7.L|.
F|-J7.|7|LJ7LJL7F7|F-JF-7L7F-------JL7LJJ|L7FJ|||||F-JL7||||LJFJL7||F-J||||L7||||FJ|L||LJLF-J|||||LLJ||-LJ|L-7FJ||L7|L----JL------7-7F-JL.FF
L|JFJF--F7.|JL|||LJL-7L7L7LJF----7F7FJF--JFJL7|LJ|||F-7|LJ|L7FL7FJLJL7FJ||L-JLJ||L7|FJL-7FJF7|||LJF--JL--7|F-JL7||FJ|F7F----------J7|-JJ-FL|
7J.|FL7F-|FF7FFJ|F---JFJLL7FJF---J|LJ-L-7FJF-JL-7LJLJFJL7|L7L7-||F-7L||FJL---7FJ|FJ||F7FJ|FJ|||L-7|F-7F7FJ|L-7FJ|LJ|LJ|L-------7J-L77FJ|FJ.|
F-FLL77F.L7JFL|FJL7F-7L-7FJ|SJF7F7L7JF--JL7|F7F7L--7-L7FJF-JFJFJ|L7L-J|L7F-7FJL7|L7|LJ||FJ|FJ||F-J||J|||L7|F7|L7L----7|F7F7F7F-J7-FL-J--|-FJ
F7F7|-F7FL7-|||L7FJ|FJF-JL7||FJLJL7L7L--7FJLJ||L7F7L7FJ|FJF7|FJFJFJF-7L7||FJ|F-J|FJ|F7||L-J|FJ|L-7|L7|||FJ|||L7|F7F7FJLJ||LJ|L7---JJ||7|L7FL
|FLL---J-|J-7-L-JL-JL7L-7.LJLJF---JFJF--JL7F7||FLJ|FJL7|L7|||L7|FL7|FJFJ||L-J|F7|L7LJ||||F7||F|F7||FJLJLJFJ||FJ||LJ|L-7FJL-7|FJ7L7L-L7J-JL77
-JJ.|-||L|J.||FFLLF--JF-JF---7L---7|FL7F-7LJ||L-7-LJF-JL7||||FJL7|||L7L7LJF--J||L7L-7|||FJLJL7LJ|||L----7L-JLJ||L7-L7FJL-7FJLJL7-F--.|.FL|.|
LJ7-F7L7.|-JJ-|777|F-7|F7L--7L----JL-7LJFJF7||F7L7FFJF7FJ|||||F7|FJL7L7L7||F7FJ|FJF-J|LJL7F-7L-7LJ|F-7F7L-----7L7L-7LJ|F-JL-7JFLF7-7.L|7.L-L
FJ.L--7JFJ7|7|||7-LJLLJ|L---JF7F7F7F7|F-JFJ||||L7L7L7|||FJ|LJ|||||F7L7L7|FJ|||FJ|FJF7L7F-J|FJF7L7FJL7||L7F--7FJ-L-7L-77|F7F-J-L.L|J|7-J.FJ|J
LJF-|F|F|F|-|-LL7J7LF7|L7F--7|||LJ||LJL7FJFJ||L7L7|FJ|||L7L-7LJ||LJ|FJ-|||FJ|||FJL-J|FJ|F7|L-J|FJL7FJ|L7|L-7|L---7|F-J-LJ||-J7.77L-L-7J.J77|
LFJ-77L|-L7.F--L7.7|||F7LJF7LJ||7FJL7LFJ|FJFJ|FJFJ|L7|||FJF7L7FJL7FJL-7||||FJ|||F---JL7LJ|L-7FJL7FJ|-L7|L-7|L7F--JLJ.||L7LJLFL7L7|.||JFJF|-F
L-7.L.7|--7.LLFFJFF-JLJL7FJL--J|FJF7L7|FJL7L7||-L7L7|||||FJL7|L--J|F--JLJLJ|FJ||L---7FJF-JF-J|F7|L7L77|L-7||FJL----7FFF-L|J.|LJ-7F-7J.JJLJ--
FJFF|--L7.L||.LJ-|L----7|L7F-7FJ|FJ|FJ|L7FL7||L-7L7|LJ||||FFJL-7F-JL------7|L7LJF---J|FJF7L7FJ||L7L7L7L--JLJL7F-7F7L7F-7FLJ.F7-|F--F-FJ-|.L|
J.F|--|.|--7--JJ|LF----JL-JL7LJFJL7||-L-JF7|||F-JFJL7L|||L7|F7FJL-7F7F7F7FJL7L7FJF--7||FJL7||FJ|FJ7L7L-----7FJ|FJ||FJJJ|7L-LJFJFJ-L|-JFF|7.|
|.LL|FL.||FJ.J.F|-L----7F--7L-7L-7||L---7|LJ|||7FJF7L7|||FJ|||L7F-J|LJLJ|L-7L7|L-JF-J||L7J||||FJ|F7FJF7F---JL-J|FJLJ.|LL77FLJL-JLFJ.|--7JF|J
7J-FF7JJLJF77|F-JFJFF--J|F-JF7|F-J||F7F-JL-7||L7L-J|FJLJ|L7|||FJ|F7L--77L7FJ|LJF--JF7|L7L7||||L7|||L7|LJF-7LFF-J|.LJ.|JL---7L7J|.|-L-.FF--.-
L.||LJ7|7FJ-|J-JF7--L7F7|L-7||||F7||||L-7F7LJL7L7F-JL-7FL7|LJ||JLJL7F7L-7||-F-7L--7||L7|FJ||||FJLJ|FJL7||FJF7L-7L77.|.77|F-F7J77.LJJJF-JJL77
LF-JLFJ-LL-JJL.|FJ.LFJ|LJ7FJ|LJLJ|||||F7LJL-77L7||F7F7L-7|L-7||F---J||F-J|L7L7L---J||FJLJ7LJLJL7F7||F7L7|L-JL-7|FJ-7JFLFJL7.J.L|7-|LF--||FLJ
FLJL-JJFLJ7|.|.FLL-JL-JF-7|FJF-7FJ|||||L7F7FJF-J|LJ|||F7|L--J|||F-7FJ|L-7|FJFJF---7||L------7F-J|LJLJL7LJF----JLJLF|.F|J|LJFFJ|LF---J--JLLJ|
|-77|.F|.LJF---L7.J7JJLL7LJL7L7LJFJ||||FJ|||F|F7L7FJ|||LJJ-|.||||FJL7|F7|||.L-JF--J|L7F7F---JL-7L7F--7|F-JFF---7JFLJ-J|-F|JFJ--F77F-|-L..||L
7.77|7|-.L-.|..L7F-|LF--JF-7L7L7FJFJ|||L7||L7||L7|L7||L7-77FLLJLJL7FJ||LJ||F---JF-7L7||LJF7-F7||FJL-7LJL--7L7F7|-J.J-7J7J|L-..LJJJ77LFJFJL|J
L7L--7|FFJL-7J7-L----L7F7|-|FJFJ|FJFJLJ-LJ|FJLJJ||F||L-J7L77JLL.|FLJ-|L-7LJ|F7F7L7L7||L-7|L7||FJL-7-L7F7F7L-J|||J77..L7.FJF.|7.J77|LF7|LL7JJ
FF7L|LJJJ-.JLL-.|77--FJ|LJFJ|FL7|L7L-7F---JL--7FJ|FJL---7JLJFL7-FFF--JF-JJJLJ|||FJ|LJ|F7|L7LJLJF-7|F-J|LJL---JLJF|77LJL-J7.FJF|LF|FFLL7--L7.
7L7--LJ7.|.|JJL.F77L|L-JJ7L-J-LLJ-L7FJL7F7F7F7|L7|L7F7F-J-FJ|-77L.L--7|JJ.|F|||||F---J|||FJF-7FJFLJL-7L-------7J7JL|F7J-JFJJ.|7-7|F|JF|-7F-J
|-J|7.FL-7L7LF-|JF7-7|FLLJJ7J|JJFLL||J|LJ||LJ||JLJF||LJ-JFF-77.--F77FJL7.L77FLJ||L---7|LJL-JFJL--7F--JF-7F-7F-J.|LL7J|J.|F7F-J-77-|J.|-FJFL7
JFF-J.L-J-||-J.|7LLL-JF-JL-7-L.LJ|.LJL|JL|L7LLJ-LL-LJ.L.F-JFJ-JF-|L-JF-J-.L7F.FJL7F--J|-F7F-JF-7FJ|F7FJFJ|FJL-7.L-7JFL7-FJJ7||||J-|--L.JL|FL
L7JFLF7||LFL-||.7J.|F7LJ-----F|-LFL77LL..L-J.|JL|-FLJ-7--|-J|FJ7|L7F7L7JFJ-|JFL7FJL--7L7|||F7|||L7LJ|L7|FJL7F-J7.JJ-|-L-LJFLL7LJ...L||FJ..J|
LJ77LLL7JF77FLL|J.F-JLJJ7-7L--J|.|F--JFF-J|-L7.LL--JFLLJ|L-.F-|F--J||FJ.LJ-J.FLLJ-||LL7||LJ|||FJFJF-JFJ|L7FJ|F7L|F7J.FJ...|7F-|7|-7.--7.-.LF
LLF--JLJ--FJJ7.|JF77J|L-|.||LF--7|7F|F-JJJ|-|J|FLFJ-LJJFJ7F7L--L--7|||J.F|-FJ-7LL7|L-FJ|L7FJ||L7L7L-7L7L7|L7LJL7L-J-777.F.LFFLF-|7||.F-.|.F.
..LJ--7JF|.LL-FJ7J|LF-JF7-FF-L-7LL7FF-||JJL7-.L|FJLF.F|-FFFF-|JF||LJ||FJ-|-|J7|J|-LJLL-J|||-LJFJFJLFJFJ.||FJF7FJ7.F.LL-7F7.FJ-|J.7F77L.|JFJ7
LL---J|LFJ-.|-|F7--JLJF|.|FJ.|FL-7F7.F---7||...L|L77-777|FJ|7-F--7|FLJ7.F|LJ.|.-JJ..||7LLLJ7.FJFJFFJFJ|.LJL7|LJJF-J77.LFJL--7F|-LJFJF.FL7.LJ
LJLJ7.-77..L77JL---L7FFJ|-||7|JJF|JJ7.|7LFF-.F--JF|JF7.FLJ-J|7|FLJJ77.L-|--F-LL--77F|-L7J.LJFL7L7FJFJL7.LL.LJFL-J7-L7F|L|JJ|LLFFJF-.L7JLF--|
F-7JFFJLJF|JLL..|JF7LJJ-F7FL-J--FJ|FF-J|FLJJ.-L7-L7-7.-JFLF|-F|JL|JF--|JLJL|7JJF|JLF-7LF7FFFJFL-JL-JJ..|.|F|.7F-FF77F7LF7|.|...F7|F--J77L--J
|.L-7J-L7-JLLL--L-FL--LJ.LLJLJ-L|-7JJLL--J-L-J.JJ.L-J-J.LJ|JJJJ7.J-FJLL-L-.J---FJ..|.|.L|7.|.LLJ.|JJ.FF--L-L7JL-F7-FJ|-7J|7L7-|LJ.LJ-LJ7--J-

192
day10/src/main.rs Normal file
View File

@ -0,0 +1,192 @@
use std::cell::UnsafeCell;
use std::fs::read_to_string;
fn main() {
let input_str = read_to_string("input.txt").unwrap();
// the layout as in the file
let layout = input_str.lines().map(|str| str.as_bytes()).collect::<Vec<_>>();
let layout_width = layout[0].len();
let layout_height = layout.len();
// Double the sizes
let layout_width2 = layout_width * 2;
let layout_height2 = layout_height * 2;
// layout at double the resolution with spaces between each segment for task 2
// E - enclosed, M - main loop, O - outside
let mut layout_enclosing = vec![vec![b'E'; layout_width2]; layout_height2];
// Step counter for task 1
let mut steps = 1;
unsafe {
#[derive(Clone, Copy, Debug)]
enum Direction {
Left,
Right,
Up,
Down,
}
// Pipe walker, a structure that describes an abstract entity walking around the pipes
#[derive(Clone, Copy)]
struct PipeWalker {
x: usize,
y: usize,
dir: Direction,
}
let layout_enclosing_cell = UnsafeCell::new(layout_enclosing);
// Functions that move the walker around the pipes
// also leaves a trail of M's in the layout_enclosing
// They use an unsafe cell because otherwise the closures would have a borrow conflict
let move_left = |walker: &mut PipeWalker| {
let layout_enclosing_mut = &mut *layout_enclosing_cell.get();
layout_enclosing_mut[walker.y * 2][walker.x * 2 - 1] = b'M';
layout_enclosing_mut[walker.y * 2][walker.x * 2 - 2] = b'M';
walker.x -= 1;
walker.dir = Direction::Left;
};
let move_right = |walker: &mut PipeWalker| {
let layout_enclosing_mut = &mut *layout_enclosing_cell.get();
layout_enclosing_mut[walker.y * 2][walker.x * 2 + 1] = b'M';
layout_enclosing_mut[walker.y * 2][walker.x * 2 + 2] = b'M';
walker.x += 1;
walker.dir = Direction::Right;
};
let move_up = |walker: &mut PipeWalker| {
let layout_enclosing_mut = &mut *layout_enclosing_cell.get();
layout_enclosing_mut[walker.y * 2 - 1][walker.x * 2] = b'M';
layout_enclosing_mut[walker.y * 2 - 2][walker.x * 2] = b'M';
walker.y -= 1;
walker.dir = Direction::Up;
};
let move_down = |walker: &mut PipeWalker| {
let layout_enclosing_mut = &mut *layout_enclosing_cell.get();
layout_enclosing_mut[walker.y * 2 + 1][walker.x * 2] = b'M';
layout_enclosing_mut[walker.y * 2 + 2][walker.x * 2] = b'M';
walker.y += 1;
walker.dir = Direction::Down;
};
let mut walkers: Vec<PipeWalker> = vec![];
walkers.reserve(2);
// Find the starting position and starting walkers
for (j, &row) in layout.iter().enumerate() {
for (i, &elem) in row.iter().enumerate() {
if elem == b'S' {
(&mut *layout_enclosing_cell.get())[j * 2][i * 2] = b'M';
if i > 0 {
let elem2 = layout[j][i - 1];
if elem2 == b'-' || elem2 == b'L' || elem2 == b'F' {
walkers.push(PipeWalker { x: i, y: j, dir: Direction::Left });
move_left(walkers.last_mut().unwrap());
}
}
if i < layout_width - 1 {
let elem2 = layout[j][i + 1];
if elem2 == b'-' || elem2 == b'J' || elem2 == b'7' {
walkers.push(PipeWalker { x: i, y: j, dir: Direction::Left });
move_right(walkers.last_mut().unwrap());
}
}
if j > 0 {
let elem2 = layout[j - 1][i];
if elem2 == b'|' || elem2 == b'F' || elem2 == b'F' {
walkers.push(PipeWalker { x: i, y: j, dir: Direction::Left });
move_up(walkers.last_mut().unwrap());
}
}
if j < layout_height - 1 {
let elem2 = layout[j + 1][i];
if elem2 == b'|' || elem2 == b'J' || elem2 == b'L' {
walkers.push(PipeWalker { x: i, y: j, dir: Direction::Left });
move_down(walkers.last_mut().unwrap());
}
}
}
}
}
// Walk around the main pipe loop, count steps for task 1
loop {
let advance_walker = |walker: &mut PipeWalker| {
match walker.dir {
Direction::Left => {
match layout[walker.y][walker.x] {
b'-' => move_left(walker),
b'L' => move_up(walker),
b'F' => move_down(walker),
_ => {}
}
}
Direction::Right => {
match layout[walker.y][walker.x] {
b'-' => move_right(walker),
b'J' => move_up(walker),
b'7' => move_down(walker),
_ => {}
}
}
Direction::Up => {
match layout[walker.y][walker.x] {
b'|' => move_up(walker),
b'7' => move_left(walker),
b'F' => move_right(walker),
_ => {}
}
}
Direction::Down => {
match layout[walker.y][walker.x] {
b'|' => move_down(walker),
b'J' => move_left(walker),
b'L' => move_right(walker),
_ => {}
}
}
}
};
steps += 1;
advance_walker(&mut walkers[0]);
if walkers[0].x == walkers[1].x && walkers[0].y == walkers[1].y {
break;
}
advance_walker(&mut walkers[1]);
if walkers[0].x == walkers[1].x && walkers[0].y == walkers[1].y {
break;
}
}
layout_enclosing = layout_enclosing_cell.into_inner();
}
// Flood the layout from edges to determine what is enclosed
let mut to_flood: Vec<(u16, u16)> = vec![];
to_flood.extend((0..layout_width2).map(|x| (x as u16, 0u16)));
to_flood.extend((0..layout_width2).map(|x| (x as u16, (layout_height2 - 1) as u16)));
to_flood.extend((1..layout_height2 - 1).map(|x| (0u16, x as u16)));
to_flood.extend((1..layout_height2 - 1).map(|x| ((layout_width2 - 1) as u16, x as u16)));
loop {
if to_flood.is_empty() {
break;
}
let &(x, y) = to_flood.last().unwrap();
to_flood.pop();
// If an unflooded E (enclosed) is found, convert it to O (outside) and flood neighbours
if layout_enclosing[y as usize][x as usize] == b'E' {
layout_enclosing[y as usize][x as usize] = b'O';
if x > 0 {
to_flood.push((x - 1, y));
}
if x < layout_width2 as u16 - 1 {
to_flood.push((x + 1, y));
}
if y > 0 {
to_flood.push((x, y - 1));
}
if y < layout_height2 as u16 - 1 {
to_flood.push((x, y + 1));
}
}
}
// Count enclosed space for task 2
let count_enclosed = layout_enclosing.iter()
.step_by(2)
.fold(0, |acc, row| {
acc + row.iter()
.step_by(2)
.fold(0, |acc, &elem| acc + if elem == b'E' { 1 } else { 0 })
});
println!("Steps: {}", steps);
println!("Enclosed: {}", count_enclosed);
}