aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorReiner Herrmann <reiner@reiner-h.de>2020-12-24 16:09:48 +0100
committerReiner Herrmann <reiner@reiner-h.de>2020-12-24 16:09:48 +0100
commite2fedcbca8df3ac1849c544eef672c5dc793789c (patch)
tree5a8a5352218986987f551e0ebca22ae34a939136
parentdb055828ef14e84557248bf2d02e20c1a6b97b17 (diff)
day24
-rw-r--r--input24430
-rw-r--r--src/main.rs187
2 files changed, 616 insertions, 1 deletions
diff --git a/input24 b/input24
new file mode 100644
index 0000000..a373adb
--- /dev/null
+++ b/input24
@@ -0,0 +1,430 @@
+nwesesesesewswenwswsesesenesenwnesenwse
+nwnenwnwnenenwnenwnenewnwenenwwnenesesenw
+neneswnenwenwseeneweswsenesewnenenee
+senwewnwnenenwnwnwwesenenwswnenwwnwnw
+swseseeseswseseeswseneseswsesesenwsesew
+weeneeneswsewnwnesweseneswenwneswne
+swseseswswneswswsesewswswseswse
+swswseeswswwswnweenewswswesenwswwse
+swswswswsweswseeswseseseseeswwsewnw
+eneeseenenweeneenenee
+eesesenwsesweeseeese
+neenenenewnenenenenenwnenenenwnwne
+nenenwnwnwnenwnenwnwswnenesenenwnw
+neneweweneneenenenenesewneeneenee
+nwweswswewneenenwneneneeswneneneswne
+eeseeneseesesesewneswseeeseese
+swseswsenwswnewswseswswswseswswse
+senenenwnwnenwnwnwewnwwnwswnenenwnwnwenw
+senwnenenwnwnenwnwwnwswnwnwnenwnwenenwnw
+neweseneswswnwswnwswseneseenwseeswee
+esesweeneeneswsenwsweeeeseeseee
+nenenwewseswseseswsewseneewwwnww
+neeswswenwnewnwnwwswwwneswswnwwwnwnw
+wwweswwwwwwswwwwww
+eeseenweenwseneeeeeeweeenee
+eeeeesenenenwesweeeswenwswseswee
+neswenenesenenenewnwenesweneneeswne
+swswswenwswwswswswswswwwswweswnwsww
+seseswseseseeswneeeeesewesesenenw
+swwswwwswwwswwswsweneswwwsesww
+eneeswenweewenwseeeseeeseswwnw
+swnenwswswswseseswswswwseswswswswswswsw
+seeseseeseeeesesesenwsenwseweseese
+swswswswnwnesweswewseseneswswwnenwsw
+eewnenweneswwseeeeneneeeeeene
+esenweswwnwnwnwnwnwnwnwnwnwnwnwnwwnw
+seeeeeseeneeswweeeeeeneenw
+weneswswenenenenwneswneswneneneesene
+wnwsesesenwnwnenwnwnesweneenwseswwsw
+sewsesesesesesesesewsenesesesesesenesese
+swswswwnwswswwweswswswnewwseswsww
+nwneneswnwnwnenenenwsenenwnwnenwwnene
+neenwenenwsweseeswsesweeseseswneswene
+eneeenewewneeneeneweneeesee
+nwnwwwnwnewsenwsenw
+sesesewswswwneneneeseeewswnwswnwsenw
+sewwswwnwwewwwneswswswwwneew
+nwsenwwnenenenesenwsenenenenenenenenenwne
+sewsewnesenwsenesenwsesweswswsesenenw
+eseeeeeeeenweeeeseesee
+eseenwseesweswenweseenweeeeswee
+neseseseswwneswsesesesewseseseswse
+sesweewseseeesenwseeeseeswsweneenw
+wnwneseeeseseeseenwwenwseseesese
+enwneswnwneneneneneneneenenwnenwwnene
+wnwneneneneneneewnwwnenweneesw
+nwnenenenwnenenwenenwneneseswnewnenene
+nwwsenwnwnenwnenwnenwneneneenwnwsenenww
+wwwsewwnwwwnewwneswwewww
+swseswwswseswswswswsenwseneeneewsenwsw
+nwnesenenwenwnwnwnenwnwnwneswnwnwnenene
+seeeweswnenenwsenewenenwewneseee
+nwwnwneseswsesweenweswsese
+seeseseswsesenesesesenesewseseseeese
+swwswneswwnwswneswwewsesewswswsww
+seswneswswseswswseseswnwswswswswseswew
+wwwwwswwewseswwwwwswwnenesw
+nwnwwsenwnenwnwnwnwneenwnwnwnwnenwnww
+nwnwneswwswseswswnwnwenwnenesenenenwswenw
+neneneneeneeseneneneeneneneswnwnenee
+neeeswswnweenwsweseneeseswnwnewe
+neswesenwneneneenenweeneene
+swseeneewnwseeeenwesenweseseeswnw
+eweneeneseeneneneneeeseeeneewene
+eeneneewneneeeswneneeneeenwsenenew
+nwnwswsweswswnenwswseswswswsweswswnesw
+neeeeseeeswewenenwswnene
+nwenwnwenwswnwnwwnwswnwnwneswnwneswswese
+neswseweeneneeeseenwwnenesenenwnee
+wswwseewwwewweewwswnewwwsww
+swswswwswswwwswswswswswnweeswswswsw
+enenenenenenenenenenwnenenwsenenenewnw
+seseswseseseeswseneseseseseseneseesee
+neewneeweeeeeneese
+enewneseeweneneeneneewenesenene
+enwswneeswnwswsewenwwnesewneswseswe
+senwswnwnenwnwwnenwnwswnwnwnwnwnwnwnwnwe
+sewswneswswswseseseseswswseneswseswswsw
+nwnenwwsewneneswnweenwnwnenwnwnwsenene
+eswwewswswnwswsw
+wwwwwwwwswsenw
+nwnwnwnwnwnwnwwwnwnwwnwnwwnwnenwsese
+seswnewnenwnweswnwsesenwseeseesesewnw
+neneseneeswneneneswwsenwnw
+nwnwnwnewnwnesenwnwnenwnwswnwneseenwnw
+wwneneeneswneneeewwnesesenenenese
+eseeswswsesenwneeewswnenwnwnewnw
+nwnesesenewwwswnwewsenwwsewnwwww
+eneeenewneneeneneneneswnenwewnesee
+neneenewenenenenew
+nwsenweewnwwwwenwnwswnwnenwswnwnwse
+seseeeeeeswwsenwseeseeseseeese
+wwwnwwwwwwwewewwwwwww
+swswseseneseswswsewseseseswenwneseseswsw
+seswsesesenweseeseswwseseneswsesesesese
+swswseswswswswswswswswswnwswswseswsw
+nweeneewneeseseesenwsenwseweswnwnw
+eeeeeseseeeeewsweenweeeese
+nwesesesesenenewwwneeeeweeee
+eenenwneneeswewneeeeneenee
+seseseswseswseswsenwseeswsesenwseseswne
+eseseseswseeneseeseseewnwswsesenese
+nwnenwnwseewsenwenewsenwsweswswenenee
+wsenwnwwnwwnwneeenwnwne
+seswswswswseneneseseswswswswswswswwnesww
+wswseswnwsweswseseswesesenwswseseseswsw
+sewweseseneseneswsesesenesesesesesese
+nwwnwneewwewwwwnwwwwwswwwswsw
+nwsweswwneeeeeenwseeenwnwswswesw
+wwwwwwsenwwnewwnwwwenwwwew
+swneneneswneneswenenwnwnewnwnwsenenenwnene
+eswnweseweseeseenwsene
+esewewneneneneseneneneneneneneneewwne
+eneeeenesenwnenwseneneenenenweesw
+nwnwnwseenwnweswnwnwnwnenewnwnwnwswenw
+neenenesewsewneeswseseenwweeeesw
+eewneeeneeesweeeeeeenenee
+nenenenenenwwsenenenenenenenwswneneneene
+nwwwwswwwnewwwwwwnwwww
+enwswseswenesenwenwseseeswesesenewse
+swesweneeenwenenweeneneesweeee
+wnwnwnesenwnwwsenewswnwwnwsenwseneswse
+neseswseneenwsweneswwnwsenwnesewsenwsw
+swswswseseneswweenwswswsesenewseswnesenw
+weseseeseseswseseseneeeesesewnese
+seeneswnewsesewnwwwwnw
+sewseeseeeeesewneeese
+seseseenwewsesewneseeeeesweenw
+ewswwwswswwswwwswswswsw
+nwnwwwsenewswnwwwenwsenwnenwnwnwnw
+esenwseseweeneneneswwsewsesewneese
+wnwnwswnenwnewwenenesewnenenwnesenesene
+wnwnenwwnwnwnwnwnwnwswnwnwnwnwwnenwnwse
+eewnesenwsesesweeneeewesweeesee
+swenwesweseenwseeseseseenenwesee
+nwnwneswnwenwwnwnwnenenwnwnweneswsenw
+swwwewwnewseewswwswnewwwww
+swwwswewwwsewwsewnwwswwwwnww
+wsenwewnwwsewwwnwsewnwnwwsenwnwnw
+neswswnenenwneneneenewneneneswnwsw
+wwwswwwwnwewwwsewwwwwwwnw
+seseseswseswswnweswwswswswnwsesesesesee
+nwneneenesenenenwwnwneneswnwnwnenenenwnw
+neeenwneeneesweenweeeesw
+eweeeeeeeeeeeeneswneeeswe
+wseewesesesesesesesesewseenesesesesee
+eeeeeseeeeweeee
+wsewneseeewseswnewnenenwnenewnesenw
+wswenwnwnwnwwnwnwnwwewnwwnwwnww
+wwwwwwnewwwsewwwswwneseww
+wwwwewwwwwwnw
+nwnwnenenwnwnwseenwwsenwenwnwwwnw
+seeswswsewnewnwwsweswwswnwswswnwnw
+eweseseneeseese
+sweeeeeswenenesweseeeeseneee
+wnwswewnenewsewwnewwwswwsww
+nweenwwwneswnwsenwsewewnwwnwnwww
+eswneeneneneneeeneeneeneneeeswne
+eeseseneeeeeeeweeneeeswee
+enweeseneswnenwnwnwswswswnw
+swseseseseseeseeneeese
+swswswswswswswswwseswswswswswseeneswnwsesw
+senwseenwwsweswseseswse
+wnwwnwwnwnwnwwsenwnwnwnewnwnwnwsenwnwse
+seseenwesesenwseseseseseseseseseseswswsw
+nesewnenenwnwneneswneneswsenwnenwnenw
+eswnwweenweseeneeswneeeeeee
+seesweneewenenweswseseweseneswsenwse
+wsesesesenesesesesesesesesesesese
+neneneneenenenenenewneneneneneneswne
+eseseeseeseeenweeeswseesenwse
+neneseeeeweseewwseseeenweseee
+senewnwwwswwewnwwnwwsewenewse
+seseseeweseseseneseeeseweseseseee
+wswseswseenwwswneswswnwswsww
+nwnwnwnwwswnwnwnwnwenenwenwnwnwnwne
+sewnwsenweswswswneenwwsenewnwnewnwnw
+swseeseseswseneswwsesewwwswnenesesese
+eeeneneesweeeeeeneee
+nwnweswnwnwenwnwnwnwnwswnwsenwnwnwsenw
+swswswswnwenwswswswswweswswesw
+nenwnwneswnwneswnenwnenenenwnwnenenenene
+wneneneneneneneneseswneneesenewnenwe
+enwsenenweneeswswsesesweseseseseswsese
+swwseseseeseewnesewnewswseseswseswse
+enwneeneneswneneneenenenene
+eswweeeeseeneeeeeesesenweee
+nenwsenwnwnenwneswnwnwnwnwenwnwnenwnenw
+esenwswwnwnwenwsenwnwseseenwswnwwew
+nwswnewwwnwswnwwnenwnenwswnwwwwnwnw
+eeweseeseseeeeeeesesesewese
+nwseeeeenwseeseeeeseeeseeeew
+senenwswnweswnwwwwwnwnenwwseswwnwe
+ewswnwnewewsenwswseneswswswswseswsw
+nwseswnenwwenwwswsesenwnwneewwnwse
+seeneseseneweseseseeseseswseseseese
+wwsewwswswwswswneswweswswswswwsww
+swswswsweswswswswswnwwswswsesesweswsw
+seeeeweweeweeeseneenewene
+nwseseesewseesewnwneewseesesenenwee
+swewwnwnwswswwwweswswswswswneswe
+eeneeeneneneneeweneneenesenenenew
+swsewwwsewnewwwnwwwwwwnewww
+seneswwweswswswwsweswswswswswwswswwnw
+seneseseseswsesesewsesesesesw
+seswswseswswwewswswswswseswswswswnenw
+eseseseesesenenweseesweseeewseseese
+swesenenwswnesesenwwwnwse
+nenewswnenenenenenesenenenenenenenenesw
+senwneseneeneenenw
+wseseseeseseeseseseeseseseeenesewe
+neeeneweenenee
+nwsenenwnenwneeneeeneneneneeswnesene
+nwswseeneseenwswnweseneswswnweesesese
+nwseseseswsesesesewseeesesesese
+eswenesewnenwnwwwnwnwnwneswesenwswsene
+sewswwswwswswwswwswswwwneneswnwsww
+nenwswenenenenesesesenwwneswnenenewew
+senenwswseswsewwsewseseseneeswneswswsw
+nwwwnwswswseswseswswwnwweswwwew
+eswswswswseseseswswseswswnwswsweswwswse
+nenesenenewnenenwnenenenesenenenenenenesw
+wnwnwnwwwwwewwwswwwnewnwsenwsw
+enwnewnwneswewnewwswwneeseswesew
+nwnwnenenwsenwewnenwnenenenwnenwnwnwnwsw
+nesenewneenwnwnwnwnwneneneswneswnewnee
+ewenewswwsewenwwsenenwwswnwsenwnw
+nesenwsenwseseeswswnwese
+wnwsenwnwsenwnwswwnwwnenwnwseswnwnwne
+newnenwneneenwesenesenenwseseweswswe
+senwsesesenwsweseswswsenwnesesesww
+sweswseswswwseseseswswsesesenwneseseswnw
+nwwenwnwnwsenwnweswnwswnwwswnwnwnenw
+enesenenwsewesewsweeneeeeweeee
+nwnwnwnwwnwnwnwnwnwwwewnwenwnwnwnw
+wseswseseswneeseeseenwseenwseswnwse
+seesenwnwwwewseswswnwnwnwe
+sewwwwwwwweswwswwwwnewww
+neneeswnenwneneswsenweneswneseswseeww
+nwnwswenwnwnwnwnwneseswnwsweneswenwnwsw
+wwwswwneswwwwwnewswww
+senwnwnenwenenenenwnwnewswnwnwnwesw
+wswwwwnwswwswwewswnweswswwswew
+swseseseswseseswswseseswsesesesenesenwse
+nwwnenenenwswsweneenenenenesweneeene
+wwnwswwswwswewwwsewwwswswswe
+ewwnwwnenesweseenwswswseeswwneenww
+eseswsesenwwnwseseseseseseseseswesesesw
+wwwwwsewwwwnenwsewnwnenwwwww
+nenenenwneneeneswnenenenenwwnenwneenw
+seeeeeeeswwseeeeeweneeeenw
+senweeneeneswwneeneesweeeswenenesw
+nwwnenwnwnwenwnenwnwnwswswnwnwnwenwse
+sesenwseseseeseseseseseseese
+swswneswsewseseswseswseswseswseeswsewse
+seseeseseseeeesesesesewee
+seneneeswnenenenenenenenwsenwnenenwnenenew
+eeeneeneneweeewneeneneneeseene
+swneneneneeneneneenenenenwneenewnene
+seswnwseswnwnewneswswnesenewswwwswswsw
+enweseeweewewesweeenw
+wwwswewneswwwsesewwwnwwswswww
+nwwwswwneswwsewswse
+swwneseswswnewwswnewwwwse
+nwwnwwwnwewwnwswwwwnwwnwwewnw
+seseseswneseswseeseswswseswseswwesesenwsw
+nweseseseseseseswewseseswsesesesesesese
+seseswesesenwseenwsenwseseseseseseseswse
+swsenwwnwnwnwnwneswewnenwnweweeswne
+eeeenweeeweeeeeeeeesee
+nwwwwswnewswewwenwnwwwewswwnw
+nwnwnwnwwnwswenwnwnwnwnwnwnwnwnwnwnw
+nwwsewewnesewswewnwswwnwwneewse
+wnwnwwnwwwnwwnwnewwswwswwwne
+enenesweeeeeeneenweeneeneeesw
+neeeenweneeneneneneeeeeswsweee
+sweswwewseswwwseneneswsewnwwsww
+neesesenweweseneseeesesewseeseenwe
+sweeeneeeswnene
+nwwwswwnwseeweswwwnw
+ewswswswwwwneswswnwswswwswswswwww
+neewseenwneeswseeneweneweenwesw
+seneweseeseseseewseseswweeeese
+eneswswswnwswwwswswswswswswswswneswsw
+sewswswswswnwswseswswswswnewswwwsww
+wwsesenenwnewwwsenw
+swnewweswwenenwneseenenenenenenewne
+nwwnwnwnwswnwnenwwwnwnwnw
+sesesesenwseswnwseseseseseeseswswswswse
+swnwswenenwswswneweswwsewsw
+nwnwnwnwnenenewewnenenenesenwnwswnwnw
+seseswsewswswsenwseseesesenenwesenesww
+neneeneeseeeewwwneeenweeeswe
+enenwewwswswsenewswsenwewseeneenee
+nwwenwswwwnwwnwnwwnwwwwewenwww
+sweswnwswesenwsweswseswswnwnwswsweswnwsw
+seseseneseseweseewseseswsesewsesese
+eweneeneeeeeeseeeeeeeeesw
+ewwwnwwwwswwwswswwwwwswwnesw
+swnwnenwnwnwwnwnewnwswnwenwnwnwsenwnw
+swneeswseseneswwnesesenwsesesenwswnww
+seswneseseesesewseseene
+wnwwsewnenwnwwsesesenwnwsesesewwwne
+eswswwwswseswewwswwswnwswswwwnw
+enwnwnenenwnwnwswnwnenwnenwnwswnwnw
+newsesenwnenenwnwenwnewnwwnwnwswnwnwnwnw
+swneneenesenwwsenwnewnesesenenenwnenw
+neneenwnwswswswweeeeeeeenenee
+swswseswnwswswswenwswsesenwswseswnewswse
+newnenwnenewsenewnesenewneesenwnene
+neseseseseswsesewseswneseseswsesesesese
+ewseeeeseeesesesesenwseeeswse
+wseeeseeeseseesewseenwswseneeee
+neseneseswswsesenesewswsesenewsesesenwse
+swneneneneneenwneeswneneneeneneneswne
+eenewnenenesweeenenenenene
+nenenesenenenwneeneeneewseeeene
+nwsenenwnenewnwnwnwnwnwnenwnenwnwsenenenw
+swnwenwnwwnwnwnwswswewnwnwnwnenwnwnwnww
+wwswnwwewwwwsewnwwwww
+wseseswnenewwwwwswwwsw
+swswwswswwnewswwwseeswwwswwswsw
+enesesewewsesweeeseeseseseseesese
+nwwnewenwnenwnwnweneswnwneswnenwneenw
+eweeeeeseeeweweneeeesesese
+wswswswswswswnwseswneswswswswwwswsww
+swsenwnwwnwseseseswweeneenwnesenwnee
+neeswneneneneewneneneneneneneneneene
+nwnewnwnwnwwnwnenwwswnwnwnwwsenwsenwnenw
+nwnwnwnwnwnwnwnwsenwnwnwnw
+nwnewnwswwwswneewsewnewwswwwww
+eeswwesesesenwseeeeeeseeenwe
+nenwneswswenwsweneeswneneneneneeswnenw
+neneseeneneesewneswnenenwnw
+nwnwwwenwenwnwnwwnwnwnwnwwnwswnwnwnw
+seseseswswseswsenwswnenwseswwweseswnese
+wwewwwseswwswsenwwnwweswnwnee
+neenwnwseeneewwneneenenenesewseenese
+nwwswswenesewwwwswwswenwneswnewse
+seswwnenwnwnenwwneeswsewewsewsesw
+eseeseseeeesweneee
+eenesesweeeeenwswnwneenenwswnenene
+seneseseeeseeswswseswsenwsenwnwsesesese
+seseseseseeeeseseeenw
+wnwwwweewwwwwswnewwswwww
+swswnewnwswseswswswswswwwswswswswwsw
+nwnwenwnwnwnwewnwnwnwnwnwnwnwswnwnwnw
+seswswswseseseswseswswnwneseneswswseswne
+swseswseswswswsewseswsesenenwsesenwseseese
+swswsweseswneneswwnewswswswswswswswnew
+nwwnwnwnwswnwnwnwnwsenwnwneeeswnwnwnenw
+wneneneneseneneew
+weeeseweneenewseesesewesesesese
+swnweswswseeseswswswseswswswswnwseswew
+eneseenweeeswneeeenweswneeee
+neneenewneweneneeneseneneswneenenwnene
+nesenewneneneeseswneneeneenenwenewnw
+neneneweeneneewneeneeneneneene
+senenewnesewwwwswswneswwneswsenwse
+eenweneseeswnenweswnwsee
+nwnwnwsenwnwnwnenwneneneswnwew
+sweswneseenwesweeswnwewseneneneeenw
+swnwneswwswseswswswswseswseseswswsesw
+nwnwnwnwnewnwnwnwsewewsenw
+swseseseseswseswswswsenwse
+nenwnwesenwnwsenwwnwsenwneswneeneswnw
+ewwwewnwwsewnw
+nwwnwwnwnwswwnwnwnwnwwnenw
+wneeneneneenwswswwneneeneneenesene
+nenwnenwnenwnwnenwnwneesenwnenenenwwnew
+eenewnenwswwseeenwsenwweneneswne
+nwnwnenenwnwwnwnwnwnwswnwswsenw
+eeseneenenenenwwseswneneewneenenenee
+nenwnenewnwswnenewnwseswneenwnenesene
+wnwswwnwwenwenwnwwnwswnwnwnwnwnwnww
+neeneneenesewneseenenewnwenwswenese
+nwewneeswnwnwseseneswneneswnenwswnwnw
+nwnesesewseswsewsewnenenesesenewsesese
+seneseswswswswswsenwseseseswseswswswsee
+nwwswnwsewwwnewsewnwewesewnwnwnw
+eswwenwnenwnwnenwswnwnwnwnwsenenwwne
+senweesenwwsewseeneeeenesewseee
+nenwnenwnwnwswnwswnenwnenweeswnenwnenene
+wnwnwwewsewnewwswwwnwnwwnwwwww
+nwwnwswnwnwwnwnenwnwswseewnwnwnwnwe
+nenwnenenenwnwnwnenwnenenweenenenwwnesw
+wnwnenweseneswwswnwneeseswnenenwswwe
+eeeweeeeeeweeeseeee
+wwwswwnwwnweswweneswnenwwwnwww
+swswwswswseswswswsweseswswseneswswse
+seswnwewswwwwswwsewnwneswswewww
+seswwwwnewwnwwewwnewwwwww
+seneswnenwsweewnwnwenwswswswnesenew
+eswnweeesweeseneeeeeeeeeee
+wnwswswswswwswswswswwswwwewewsww
+nwnwnenwnwnweeswsenweesewswswnwnwswnw
+seswwnwsewwwwswsenenw
+wwswwwwswswseswwwwewswwswnww
+seswseseswseseswseseseswswseseswswnw
+swnesewwnwwneswne
+wswswsesweswswswseswwswswsweswswnwnwe
+seenwsenweseseseesesewseseseseesese
+esenwnwnwneswnwnenwwsenwnenwwsenenww
+eeeeeneseswseseeseenwseeesw
+swseseeneseneseeswwnwese
+eeeenweswseeeesee
+seseswweenwswnewwwwnew
+wswswswnwswswwswswswseneneswseseseeswse
+nwswwnwsewewswwswwwenenwwnwww
+seneseweseseeneesesesesesenweseseswse
+nwnenwnwnwnwsewwenwnenwsenesenwnwnenwne
+senwenewsesesewnwwseeweseswsesesenwe
+wenwewnwnwnwwnwewnwwwnwwwwnw
+seeeeseseeseseesenwseenweesesese
+swswswwnwswwwwswnewswswwwswswwew
+nenwnenenwnwnwsenenwneneneswnwnwnwsesene
+wnewswsenesewswwwswnwwswswnewwseew
+wsesenwenwseswsenwwseeseenesenenwwnw
+senewewswwswwewwwwnewswwwswsw
+swneenwseweseeenwweseseeesenwnwse
diff --git a/src/main.rs b/src/main.rs
index 460dff8..d6375b5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -2310,8 +2310,155 @@ fn day23() {
println!("23b: {}", play_cups_game2(&input, 10000000));
}
+#[derive(PartialEq,Eq,Copy,Clone,Hash)]
+struct Pointi {
+ x: isize,
+ y: isize,
+}
+
+enum HexDirection {
+ SE,
+ NE,
+ SW,
+ NW,
+ W,
+ E,
+}
+
+fn parse_directions(input: &[String]) -> Vec<Vec<HexDirection>> {
+ let mut directions_list = Vec::new();
+ let dir_re = Regex::new("([ns]?[ew])").unwrap();
+
+ for line in input {
+ let mut directions = Vec::new();
+ for cap in dir_re.captures_iter(line) {
+ let dir = match cap.get(1).unwrap().as_str() {
+ "e" => HexDirection::E,
+ "w" => HexDirection::W,
+ "ne" => HexDirection::NE,
+ "nw" => HexDirection::NW,
+ "se" => HexDirection::SE,
+ "sw" => HexDirection::SW,
+ _ => panic!("invalid direction"),
+ };
+ directions.push(dir);
+ }
+ directions_list.push(directions);
+ }
+ directions_list
+}
+
+fn flip_tiles(directions_list: &[Vec<HexDirection>]) -> HashMap<Pointi,usize> {
+ let mut flipped = HashMap::new();
+
+ for directions in directions_list {
+ let mut pos = Pointi { x:0, y:0 };
+ for dir in directions {
+ match dir {
+ HexDirection::E => pos.x += 1,
+ HexDirection::W => pos.x -= 1,
+ HexDirection::NE => {
+ pos.y += 1;
+ pos.x += 1;
+ },
+ HexDirection::NW => {
+ pos.y += 1;
+ },
+ HexDirection::SE => {
+ pos.y -= 1;
+ },
+ HexDirection::SW => {
+ pos.y -= 1;
+ pos.x -= 1;
+ },
+ }
+ }
+ let count = flipped.entry(pos).or_insert(0);
+ *count += 1;
+ }
+ flipped
+}
+
+fn count_tile_neighbors(tiles: &[Pointi], tile: &Pointi) -> usize {
+ let mut count = 0;
+ if tiles.iter().any(|pos| (pos.x == tile.x + 1) && (pos.y == tile.y)) {
+ /* east */
+ count += 1;
+ }
+ if tiles.iter().any(|pos| (pos.x == tile.x - 1) && (pos.y == tile.y)) {
+ /* west */
+ count += 1;
+ }
+ if tiles.iter().any(|pos| (pos.x == tile.x - 1) && (pos.y == tile.y - 1)) {
+ /* south-west */
+ count += 1;
+ }
+ if tiles.iter().any(|pos| (pos.x == tile.x) && (pos.y == tile.y - 1)) {
+ /* south-east */
+ count += 1;
+ }
+ if tiles.iter().any(|pos| (pos.x == tile.x) && (pos.y == tile.y + 1)) {
+ /* north-west */
+ count += 1;
+ }
+ if tiles.iter().any(|pos| (pos.x == tile.x + 1) && (pos.y == tile.y + 1)) {
+ /* north-east */
+ count += 1;
+ }
+ count
+}
+
+fn flip_tiles_per_day(black_tiles: &[Pointi]) -> Vec<Pointi> {
+ let mut new_tiles = Vec::new();
+
+ let mut x_min = 0;
+ let mut x_max = 0;
+ let mut y_min = 0;
+ let mut y_max = 0;
+
+ for tile in black_tiles {
+ x_min = cmp::min(x_min, tile.x);
+ y_min = cmp::min(y_min, tile.y);
+ x_max = cmp::max(x_max, tile.x);
+ y_max = cmp::max(y_max, tile.y);
+ }
+
+ for x in x_min-1 ..= x_max+1 {
+ for y in y_min-1 ..= y_max+1 {
+ let current = Pointi { x, y };
+ let neighbors = count_tile_neighbors(black_tiles, &current);
+ if black_tiles.iter().any(|x| *x == current) {
+ if neighbors > 0 && neighbors <= 2 {
+ /* it stays black */
+ new_tiles.push(current);
+ }
+ } else if neighbors == 2 {
+ new_tiles.push(current);
+ }
+ }
+ }
+ new_tiles
+}
+
+fn day24() {
+ let input = read_lines("input24");
+
+ let directions_list = parse_directions(&input);
+ let flipped : Vec<Pointi> = flip_tiles(&directions_list).iter()
+ .filter(|(_,val)| *val % 2 == 1)
+ .map(|(pos,_)| *pos)
+ .collect();
+ println!("24a: {}", flipped.len());
+
+ let mut flipped = flipped;
+ for _ in 0..100 {
+ flipped = flip_tiles_per_day(&flipped);
+ }
+ println!("24b: {}", flipped.len());
+}
+
fn main() {
- day23();
+ day24();
}
#[cfg(test)]
@@ -2938,4 +3085,42 @@ mod tests {
}
assert_eq!(play_cups_game2(&input, 10000000), 149245887792);
}
+
+ #[test]
+ fn test_day24() {
+ let input = "sesenwnenenewseeswwswswwnenewsewsw\n\
+ neeenesenwnwwswnenewnwwsewnenwseswesw\n\
+ seswneswswsenwwnwse\n\
+ nwnwneseeswswnenewneswwnewseswneseene\n\
+ swweswneswnenwsewnwneneseenw\n\
+ eesenwseswswnenwswnwnwsewwnwsene\n\
+ sewnenenenesenwsewnenwwwse\n\
+ wenwwweseeeweswwwnwwe\n\
+ wsweesenenewnwwnwsenewsenwwsesesenwne\n\
+ neeswseenwwswnwswswnw\n\
+ nenwswwsewswnenenewsenwsenwnesesenew\n\
+ enewnwewneswsewnwswenweswnenwsenwsw\n\
+ sweneswneswneneenwnewenewwneswswnese\n\
+ swwesenesewenwneswnwwneseswwne\n\
+ enesenwswwswneneswsenwnewswseenwsese\n\
+ wnwnesenesenenwwnenwsewesewsesesew\n\
+ nenewswnwewswnenesenwnesewesw\n\
+ eneswnwswnwsenenwnwnwwseeswneewsenese\n\
+ neswnwewnwnwseenwseesewsenwsweewe\n\
+ wseweeenwnesenwwwswnew\n";
+ let input = read_lines_str(&input);
+
+ let directions_list = parse_directions(&input);
+ let flipped : Vec<Pointi> = flip_tiles(&directions_list).iter()
+ .filter(|(_,val)| *val % 2 == 1)
+ .map(|(pos,_)| *pos)
+ .collect();
+ assert_eq!(flipped.len(), 10);
+
+ let mut flipped = flipped;
+ for _ in 0..100 {
+ flipped = flip_tiles_per_day(&flipped);
+ }
+ assert_eq!(flipped.len(), 2208);
+ }
}