From c0b03656c112b0739eef325a48b835de11d2f0bb Mon Sep 17 00:00:00 2001 From: Glenn Griffin Date: Wed, 23 Dec 2020 21:59:25 -0800 Subject: [PATCH] day24 part1 --- input/2020/day24.txt | 496 +++++++++++++++++++++++++++++++++++++++++++ src/day24.rs | 72 +++++++ src/lib.rs | 1 + 3 files changed, 569 insertions(+) create mode 100644 input/2020/day24.txt create mode 100644 src/day24.rs diff --git a/input/2020/day24.txt b/input/2020/day24.txt new file mode 100644 index 0000000..5bd302e --- /dev/null +++ b/input/2020/day24.txt @@ -0,0 +1,496 @@ +enesenwwwsenewswsewenwwnwwnwnwswse +swneswseesweswneswwwwseewnewswsw +neneenenenenwneseneesenewenenwnenenesw +weeswnenenwneneeesweneswenwneene +nwnwnenwnwwnwnwnwnwwsewnwswnwwnwnwnw +nwwwnwnwnenenwewnwseewnwswnwwnww +senwweneewewswweswsenwnesenwwnwswnw +nwnwnenenenenwnesenenenwneswnwnweeswwsene +wswnwswneneswswswswswnesweseswwswnwswsw +neeeeeweseesesweeneweneesw +wwenewwwwwwnwnwwwwwwwwse +swneswswseseswswswsw +seswswsewseesesese +nenwneneneewseneneneenenenenenesenenew +swswwwnewwsewwwswwwswswwnesew +wwswwwwwwwwwwwswewwwwe +senewnwwnwswnwswnwewnenwenwewsenwnwse +wnwnwenwwnwnwwnewnwswsenwnwnwnwwne +nenwneswnwnwswnwnwesewwnwnwnwsenwnene +wsewneeseneseseseswnesesenwswenwswnwe +nesewnwwwswnweneenwswwesenesw +swsesenwswsesesewswswneseseeswnesesesewsw +neneswswwswswwswseswswewwswswswsew +eeeneeneneneneesweenewneneeee +seeenesesweseeeewwneeseeseee +nweeweeneeswenewe +seswwnwseeswseseswswe +wneneeswnesenwseneeneneneenwneneneenwne +newnenesenenenenenewneswnenenenenenenenese +wswswswswwswwwwweswnwswsewswswsw +eeeeeenesenwewseeneeneneweee +sewnwwnwnwwwnwnwnwnwswwwewnwww +sewesenwswwneswnwnwnwsweseseeswwse +nwwewnwweswswwwwewnwnwnwwnwwswe +swwwswnwswswenwneswswseswsweswseswsene +eneeenwswseseeeeeesenwenwwsweee +swseenwseesewnwnewnwneeeswswesenee +swwsesenwnwnwwwwnewenwnwewwwwsw +seeeeeeeeswnweeenwnwnewswesw +seenwswnenenwnewnwnwnwnwe +esenenweeswseeeseeweseseeeee +swswswswseswswswswnenw +neneseswsenenewneenenewwnenenenenenenene +wnewwenweswswwwswseswswwwnesene +seneneneweenwnwseeeweeseseeeene +neenwsweneneeeswwnwwneeenewnene +seseneswwneswseswwsesenwseseseswsesese +wweeeeeeswsenweeneeee +newnenenwneseneneeneeneneseneneeneene +wewnwnwwwwwwsenewnwwnwnwwwse +weseeseseswnwsewseneneeeesewwe +swswswswswswswswswswswwneswswwwswswe +swsenwneeseswseswswswswseseneseswswswsw +seswnenwwswswswneswsewwnewseswswwwsw +swswswneswswseswnwswseswseswswseneseswsw +wwwwnewesesewswwwnewwwne +enweeneseneeeeswnwesw +eesesenwseseeseseesesese +nwswseenesewwseesenee +wwswswswwswswwneesw +newwseswwnewswwwwswnwewnewwsww +nesenenenewenesenenenenwnwswnenwnwnenene +swnwswswneswswneswswswswseswswseswsweswwsw +swswswswswswneseswswseswnwswswswsweswsw +nwwwwswwwsewwwwewnwewswwww +neneeneeewneeneeeneenene +swnwnwnwneswwwseeenewnewswsenwwnww +nenenenwnenwneswnenwnenenenenene +nwweenwesweeeeeeseeeeewnenese +weeeneeseeeseeeseeeewe +wwwwwnwesewwwswewwwwenww +seneseseseseseneswsesesesewsewsesesese +eenwneneseeeeeesweenweeeenee +neseneseseseseseeseswseeeeseewee +nwswnweeeeseeseneeneneswswneneee +sesesewseseswesesesewseeneeseesese +seswnewwswewnwswneneswwnwnwnew +wneseneeeewsesewneneneenenwswnwne +wnwnenwnwnwnwsenenwnesenwnwnwnwnwnwnwnwwnw +wwnewnwwswweswewswseeewenwsw +eneeneseeneneneewneweeeneeeneew +nwwnwnwwnwnwenenwnwnwenwnenwnenwnenw +nwsenwnwenwnwswsenwsenwnwnwnwnwnwswenwnw +eeseseeeeeseseeeneesenwseeswe +ewenewneeneswewneseneswsewswwese +nwwwwswwswswwse +newnwnwnwwwwnwnwswsewewnwwwwnwnw +seswswnwwseseseswseesw +sewseweswwwwwswwwwwswwwwnwne +senenenenwnwnwnwnwnwnwnwnw +swswswwwwswswwnwwwswwesewwww +seeneseseneseesesesewsesesesesenwseswsw +wnenwnwsewwwnwnwwwwwsewwnwnew +swswswswswneswseswswswseseseswswnwsesese +neneneneneeneenenesenenwnenewnesenenee +wseseswseneeseswneseswseswswwwseswne +nenenenenenenwnenenenesenesewswneneenwe +seeseseseeseneesesenweeewseewsese +neeewneneneneseneenenenenenenesenwne +nenewnweneweseenwnwsesewnwswnwnwnw +sewnwnesenenwneswwnenwnwnwsenweneswe +senwnwnenwswnwnwnwnenwenenwnwnenenesenw +wnwwwwwsewnwwwewwwweseww +swnwnewnwnwsenwsenwnwnwnenwneswwwnwenenw +wnwseswnewwweewneneeseseesenww +wseseseseeseseseseseesesesenwswswswnw +neneneneneneneseneswnenenwneneneneneenewne +neswswswswswswsesesesesewsewneswsenesw +nenwneswnwweseeenwnesweneeneeese +seesesesesesweeseseseesweenweseenwse +seeswseseseswseseseswswswnenwswswseswsw +swneswswseswswswwswswnwswseswswswswseneswsw +nwseseesesewneeseseeeeeseewenesese +nenenenewneneswneswneneswswneneneneene +nwswnwnenwnwnwnwswnewnwnwnwenwnwnwnww +nwwnwnwnwnenwnwnenwsenenwnenwnwnwnwnw +senenenwnwewwwneeneewnenwsew +nenenenwneneneneswneneneeswenenenwnenw +wwneweewseswseseneneeseeeseese +neneneeswnenenewneneneneneneswenenene +eeeeewseeeneneneeeeeweenwsw +nwenenwnwswwsenwnwswneswnwnwnenwenenwne +eswwswneswswswswswnwewswswwswswwswswsw +enwwwwnwnwnwwewwnwnwnwnwseeww +seseseneeseseseseneseseewwseesesesese +nenenweneswnewenw +nenenenwneneneseswnwnwsenwenwewnenenwnw +nenenenwnwnwenwnwswnwnwwnwnwnwnwnwsenw +neeneneneeneneneneneneenesw +neeeneeeswnwnenwsewswswnenwsenwnee +wenwwwswenewwwsewswswnewswwew +seseeneeseseseneseseesesewsesewsesesese +swewnwwsenwnwwseewwnwwwnewwnw +wesesweeneeenewnwsweenenwneeesw +nwnwswnwnwnwnwnwenenwnwswnwnwnwnwnwenenw +nwsenwwswnenwneeesenewenwwwnw +ewseeeeenweseseseeeewseeseese +wnwnwsewwnwneswwnwwnwnwwnwwwnwnenw +swswsenwwswwenenenewseswswewswnesw +wnwswsesesesweeswseswswswswswseswswsw +eneeswnwwnwnwsweenwenwnwnewnwswswnwne +seseswswseseswseswsenesesewsenenwsesww +eeeneswnwnwnwneneseneseneenewnenwsee +enweseesweswneeweseenwneeew +newneneneneeneneswsenenewnenenene +eneswwneneenwnenesenewwnenenesenene +swswswswswsesenwswswswswsw +eeeneewewneeeee +swswsesenwswsenwswseswsweswseswnwseswswenw +sweneseswswesenenenwnwwnwnwneswe +wnwnwnwwwwsweneswnwnwnwewwnwww +seseswswswsesenwwseeseswswswswweese +seseeseseseseesesesenwnenwsenwsesesesew +wnwnwswnwwwwwwsewwwnenwwwwe +wnwwsenwneewswnwsenwnenwwnwesenwnewsw +swnenwnenenwnwwnwnesenenwnwnenwnenenenwnw +wwewwwwnwswwwnewwwswwwwnw +neneeeweesesenweneneswneeeewne +swswswseneneswwseseseneseseseswswswswswsw +nwnwnenwswwnwwwwnwwwwsew +swswswswseswsesesenwswsewseseswswesesw +nenwswnwnenwswnenwnwnenwnwnwsenwnwneenw +wseseswswswneseswseseswswsenwswswne +swnesesewseneseswswnwswswswswnwswseswswswsw +wnwnwnwnenwsenwneenwswnwnwnwenwsenwswnw +enenenewnenenwnenenenwnenenenenw +enenwnenwsewwwsweenenewnwnenwene +swwswsewnewswneswswwwswswwswwswwsw +neneswseeneeswewenwwswswweesese +swnwseswsenwsenweewenwsweeneeese +nwenwnwnwnwswnwnenwnwnwnwnwnwnwnwwsenw +seseseseeseseseeeeewesenesesewe +eswsenwnwneswwswwswnwwwwseeswsenwe +enenewnesenewnwnwnwswnwnwnenesenenwnenw +wneneneeneeeeweenewnenesweesene +enewnweneneeneeeswneneeeeenene +nwswsesenwnenwnwwnwnweswswnwnwneeew +eseeewneeneeeeeneeeeeseewene +sewnewwwwwwwsewwwwwwwnwwe +newnenesenweneneneweneenene +swseswswswswswswswswewswswswswswnwneswswsw +eseneneseseeseseeeeseeeeeswsewse +enwneenenewneeneneneswnenenenenenene +nenenwnenenwseneneenwnwnenwnweswnwnww +nwnwenwnwsenwnwnwnwnwwwse +nweswswwswenenweeeseseseeeeeee +nwnenwswnwwnwenwsewwnwneswnwnwnwnwsee +seeseeseseneewswweseseswswwwswswsw +nwnwnesenwenwnwnwnwnwnwwnwneswnwswwnwnw +seseseseswseswesesesesesesenesewswsenw +swswwswseseseseswsewseseneseseswneswswsw +nwnwnwnenwswnwnwnenesenenwnwnenwnwnwnenw +swnewwnwneenwnwenwsenwnwnwsewnwenw +eeenwwweeeewseneeswesenese +swenewneseneswneenwnesenenenwnenewene +nwnenwwwwwnewwwwwwwsesenwwww +seseswneseseseeenewwsese +enwneeeswenewneeeeneeseneeee +seseeseneseeeeeeswwnenwseswsesese +nwnesesenenenwnwnenwnwnenenwnewnwnwnenw +wwswnwnwewewswneseeswswswseneswsw +nwsenwneneneneneneeseewnenenenenesenwse +nesewswswneneswneswseswswnewswswsenese +swswwsesweswnwseseswseseswseseseseswsw +senenwswenwnwnwwnenwsenwnwnwnenwewnwwnw +nenenenwnwneswswneswnenenenenenenenenene +enweneswneneneeswneneeewneenenee +nwnwswnwwnwseesenenwwswwnewwsenwnwnw +neswseseswneeswneneswswneswenwwswwwe +swwneeneeneswwewnwneseeenwnenwnewne +wswwwseenwnewneswwnwwwnwseew +seewwnenenwneswwnenwneseneenenenene +swwsenwswsweseesenwwwswswwnewnesenew +neswswswnenesenenenw +nwwsewwwnwwnewnwwnenwwseswnenwswwnw +nenwneseeewneeeeseneesweneenwsee +seswseswseswnwnwswswseswsweseswswswswse +swwswneswswswswswswneswsweswswswswwswsesw +senesewseseseeewseweseseseeseesese +swnesenenenwneneneswnwnwne +wsesewwenenwsesewneneseseseswsesese +newseswwwswwwnwswweswwewswwww +nweneeneneeswnwwenenesweneseneene +esweneenweeeeseweeeneeewew +neswnweswswnenweseswswnesewswsenwsese +nwnwnwnwnwwenwwwnwnw +swswseseswswswswswswswswswsweswneswswnwsw +neneswnenwnenenenenenwnenwne +seeseseneseseswseseseseswsesesenwsesesese +nwnenwnwseenwnewewswsewnwwswswnew +wseesesweseseeneeenwseeeeeenee +swwwsewesewnewnweenwswswwwwwsw +eeneseseeseseseseswseewse +eeeneseeeeeeswseeenewseeee +swseswswsewenenwnwwnweswne +ewwnenwswnwnenwnwnwnenenwnwenenenwnw +neswswswswswnwswwswsewsw +seseeseswswewsewsenwseseneewsewneee +seswseswenwwnwswwswewnweseswnwnw +sesesenesesesewswseseswneseswsesesesesese +neneneneneseenenewneeneneswwnesenenew +nweeewneenwswneneswnewne +nwwewwswwwseswwswwne +nwnenwnwnwnwsewnwnwwnwewnwnwnwnwwnwnw +seneneneneenenwnewneneneswneenenwswnenese +swseswnwseswswseseseswnwnewseswswswswswsesw +nwnenenwnwnenwnenwnwseswneneenwnesenwne +nenenesweeenenenenewne +eewneeeweeeeseeeneneewene +swsweswswswswswswswswneswnwseswnwwseswsw +wwswwwnwnwewseweswnwnesenwwwew +seeneenenenesenenesweweenenenenwnene +newewseewnwwnwwwsewsenewswswe +sweeseweseseeeseeenesesesenwese +neswewwwseswwwswsww +wewnwnwnwnwnwwwnwwswesenwnwenwsee +seswsewsewseswswenenewseenwnwnwswse +swswseswseswseswswswnwswswnwsenesesw +nwnwsenenenwsewnenenenwsenwnesesenwnwnwnw +swnenwwwwwseswwneewswswwwnesene +seseseswswsesenesesesesesw +eneenwneenenenewswneswnesweee +nwnwneswnenenwsenenenenenenenwnenewnene +seswnewswswswnwswsenwwsweswswnwswesee +swswswswswwswswswewswneswswseswswswneswnw +swswswswswseseswsenwseneesesesesewwsese +seneeesweeeeeeweeeee +senweseeeenweeeenwenwsweeswese +swswneswseewswswnwswswwsenweswswswesw +ewneeeeeneweeeeeeweseesesese +nwseswseneeseeseesweeweseesesee +neeneswnenenewnwnenwnenenenwswneenewne +eswwswswnwnwseeenwweswnwnenwswswse +wwswnewwswnwwwswwneneeswwseswne +neneneneseneneswneneeneeewne +wwwnwwnewsenweseewwwewwnew +neswwsweewneswsenewsesewwsenwsesese +seswwsweenwweseneseneseneeenwwe +senwsesweseseswnwseeseswsenesesenenewsw +swseswswswswnenwswswwswswswswswwswenesw +nesenwnwnwnenwnwnwnenwnewnwnwnwnwnesenw +seswswswwswswwswswswswneswswenewnwswsw +nwnwwnwnwnwnenwenwwwenwswwswnwnwnwnww +neseenesenwnwsenwwneesewnewwswenwnenw +wnenwnwnenenenwnenesenwnenenwnenwnenwe +nwnwnwnwnenwnwnesenwnenwnwnenewnwnenwswe +enwswseeseseseewseeswnweeseeeee +eeeeeesenwseseeee +swsesweweswwswswswswnwnwwswswsw +neseneneeeenwweneenenenene +swwsenwnenenwnesesewneeswwswseswnwswswse +seeenweesesweseeeweeeseeswnw +sewsesesesesenesweesenwswsesw +nwnenwwnwnwswnwnenwnwwnwnenwnwnwnwsenwe +neenenwneeneswnenwneswneeneeneeneene +seseeeweseseeeeseese +nenwnenwnenenenenwswneneneenwnenenenw +wwwwswswwsweswnewwnewsewwwne +wwnenwnwsewnwnenwsenwnwnwnwnwwwnwnwsw +seseseswswsesenwwsenesesesesesesene +nwseswsesenwwswnenesenenwsw +swswsweswswswseweswnwswswneseswswswnwsw +enweesweneeneeneneeeeeneeewe +seswseseseseswsesewseseseswswsenwesese +seswsesesesenwnewsesesesesesesesesesenwsese +swswswnwswswswseswnweswswswsw +newnwwswwneeneneseeneswnenenenwnenwnw +swwswnwwswswnwswwewnwsweswswswseesw +sweswnwswenwwswswwwwsweswswswswswsw +nenenwnwsenesenenwnwnwnenenenenenwnwswnwne +wnwseswwewwnewwswnwnwwswewsesww +seseneseseswsesewswsesesesene +wwnwwwewwwewwwnwwwwwnwsww +wneeneesenwseeeeeweeesweswene +senesenwsweseeseesewseseenesewwsee +nwnwnwsenwnwswesenwenwnwnwnwnwnwnwswnwnwnw +eeweeeeeesweneeeseeneeneee +wwsenweswsewswneswswnweneswneenww +eeneneneeneeeeenewswneneeseenee +swwseseneswseseweseseswneesenesesese +eeeeneneneneneweeee +swsenesewseswsenwnenwsesweswsenwswswswnw +nwnwswsweswnenwnwnwnenenwnwnwnwnwsenenw +swsesweseseseweseeseswnwsesesenwseswsesw +eneeseneswswsweeweewnewne +neneeseenenenewenenenewnenenwswesw +sweeswwewsweewnwenwnwnesesenwesw +swswswswswswneswswswsw +eseseeneeeseewenwweeeeswsesese +swswwnwswnwwwswewweswwwwswswwe +wwewswwnwwwwwswwwwwweww +enenwnwwnwwwwsesese +wwwwnwswwwswswwwewwwew +wnenwneeswneneneseneewsw +sweswnenenwewsesenwsenw +wsewwenwnwnwwwnwwwnwnwwwnwww +eseeeeeeseeeseneeneeewwwee +nwwnwewsewnenenwwnwswwnwwwswnwse +wwswwwwweswwswwswswewwwneww +swnewnwnwnewseswewnesweswswesesw +nwnwnwswnwnenwnwnwnwnwnwewnwenwnwnwnw +swseweswnesewneesenwnesenwwseesew +wenweseesenwseswsesweswnenwneenwse +seeneneneeeenweneene +nwnwnenwneenwneswnenwnwnwnwswnwnwnwnwnw +esesesweswneneneswnwnwnenwneneseww +nwnwwenwnwnenwnenweswwenwnwnwnwnenesw +senewsewswswseseneswseseseseswsesesese +nwnwnwsesenenwneneswnwnwewnesewnenese +neesesewseseneseseseeseeseseesewsese +swnewneswwswswwwnewsesesenwswswnwsew +neseseswswwseseeswsesesesesesewseswse +swsweswseswswneseeswswswnwnwswwwswneswnw +seeeeseswsesesesesenwsesesee +nenenwnwnwnwnwswsenwnwnwne +eswsweswswsweswseswswwnewswwswswswsw +seneswneswswseswswseswswseswswsenenwswswsw +eswswseswnwnwsesewseseswseneeswswnesww +seseseesesenwsesesenesewseseseseseesesew +swswswswnweswswnewswswswswswwneswwswsw +neeswnenenesweeneneeneneeneenenewne +neswwswnwnwnwwseseneneewwsesewsew +eseseswwwseenesenesesenenwwnwseseswee +swswswseseseseswwswneeswswweswnwsesene +neneneneenesenwwweneswnwswwnwswnenwne +neeeneeeseeneswnenenenenwewnee +nwwnwewsenwnwnwenwesenwneewwnwsw +seswewnwwnwwswnwsenwnwswseenesweene +seswseneseswswseseseweesewwswwnesw +neseeneneneswneeneenenenewneneneenw +nwnwsewnwsenesenwwnewenw +senwneneswewnenenesenenenwewwnene +nenwenwwswwwwwwwwwewwwwse +sesenwsesesenwseesesenwnwswswsenewese +eeenenenwnwsweeeeeeeeeeneneswe +swwwseswwseswswwswwneswswwwnwsww +nwnwwnwwnwnesewnenwnwwwwnenwwwesese +seswswnwswseseseswseswneseseseewswsese +seswswneewneneeswswnwswwwswswnweswse +nwnwnwnwwnwsenwnewnwnwnwneenenenwnwnesw +nenwnwnwnwwnwesenwnwnwnwnwsewwnw +neswwnesenwneswwenwnwsenwnweeswsese +wwnwnwsewnenwwswwnwwwnwwnwnwwew +sewswseseneswseseswswneswseneseseswsesw +swwwnwwwswwswwwwwsewwwnwesww +seneswswwswwnwenwnwwswseeswwwwwwsw +neneswneneswnenesenenenewnenwneneneenw +nwswseseneseseswswswnewswseseseweswnesenw +nenenenenwneseneeneneneneneeswnenenwnee +swseneeeeeeeweneswneweeswwnw +nenenwneeneswneseenewnwswwnwenenenw +senenwnwwnwsewsewnesenenwwnewsewww +swweeenenenenewseeeeewsenwnee +nwneeseseseseseseseseseswse +eeeeweeeeweeneeesweneee +swswseseesesesesesewseseseseneswsewnesesw +eeenwseeeswnweeeeeeeeeeeesw +swswswswsweewswswswwsweswseswswnwnww +sesewsenwseeseeseeeenwnweswnesesesw +seseesesesesewseseeswseeseneesesenw +neeenwnenwsweneneseeenee +seenewesenwseseeseseseseee +nwswswsweswswwwwwswswswwswsw +wwwwnewwswnewwwnewwseswseww +eeseseseseseseseseesesesesenwenw +wwewwwwwwwnwwwww +swswswwswnewswneswswseswwswswwwswsw +wswneswswswwwwneswwseswswwswwswswsesw +nwnenwnenwnenenenewneneneseenwsenwswnwne +wnweswenwneeswswweseneseneeeenw +wnwneneneenenwnenenenene +newswwswweeswseseswswwseneswwnew +wsweneeseseseseseseseeseeseseeswene +sesenwseswseseseswseewnwseseswsese +seswnwnwneesenwseneewswnenwee +nwnwnwnwsenwnwnesewwnenenenenenwnenwnwnenw +senewesweeneswewsenwe +sewewswswwwwswnwwwnewwwwwswsww +eeneeeeeneeseneeeneneneeswnwnw +swseswwsewswseseswswseneswswswseseswneswsw +nenenenwneneseneneneneneneeeeneneswnwne +wnwsenwnwnwwsewnwnwnwnwnwewswnenenw +nweeeeeneesweneeeeneeneeswesw +sesewwnewwwwwnwwwnewwseeww +nwswswnwswneswwwnwswswsweeswnweeneee +wwwwwwwwswwwwwsewwnenewww +nenwsenwseeswneswseseswswenwswswseswsww +swswwswnwswwswswwswswwswwwewwnwew +wnwnwnwnewseswwewnwwwnwnwwnwsew +weseeseseseenenewseesewswsesesese +nenenenwnwneswnwneneseneneenwnenwnenew +nwseeeeswnewsewseeeeesesewesee +wwnwwewwwwnwenwnwwwwswnwwww +nwnwnwswnwnwnwenwnwnwnwnwnwnenwnwnwnw +wseswweseseneswnwneseswsewswswseese +neewseeesweeneenee +enwseswswswseseswswswswwswswsenwnwe +sewwnwwewwsewwwwwenwsewwwne +wewswswwnwnenwswneeswnwnesesenwesw +swswnenwneswswswswswswswswwswseneswswswse +wswwswswwswneweswewnwswswwsewwe +wnwwnwwsewswwwwwsenwwwswnenwswnee +seseeswenenesesewsewswneneseseesenwse +sesesesesesesenweneseseseseneswsewswsese +wnwnenenesweneeweneseeeseeene +sewnwwnwnwwnwwwwnwnwwsenwneww +wwswswwnewneseswnewwsenewswwwsew +nenesewneswnwenwwnesw +nweeeeeeseeesenwneswneeweene +nwnwwnwnwnwwnwnwwnwnwwwwew +seseseseseseseseswsenwseswsesesenesesese +seeswnwswnwnwseswsenesesweswse +seseeseseseseeseseenwsewseseswnenesewse +wweswnwwwnwsewwnwnwwnewnwwnwnwenw +neneswswswswswswwswneeswwswseseswswswse +sewnwseseswnwswseswsesenwseswseneseseswe +seseseseseeneseewseswneseeseseseseese +ewswseswnewswwwswwwswewwnew +swwewwswnesenesenwwnewnw +seseneseswsesenwseseswwnesesesewse +newswwswwswswswwswwnewswswswwsesw +wseneeeeswnwneenweneneweeeeeee +wswsewswswneswsewneneneswwwwswwsw +swwneeneswswwwswwwsenwswwneswnene +seeeeneeeeeswenweeeseseswsese +sesweeenwnewnwnwneeenwswsewsenwsw +seswnwseeseewnwswneenwnwseswneesee +neswnwwnwnwswnwnwnwnwnwnwenwnwnwnwnwnw +swseswswswseswswneswsw +neeswneneeswsewnwnwneswewnenwenee +swswseswswseswseswnwseswswweswswswneswswse +seseewseeseeeswseseseneseeewee +eeeeeseeweswwseene +swswswswswswswswswswseewneswswswswswsw +senwwwnewseesesenwnwenwwswnwnenwnwnw +eeeseswneesweeeeenweeeenee +newswnesweneneweneneneene +nesenwnenenwnwswseswenwwwwsww +senewswswwseswswnwwsw +newwwwsewswwwwswnwsewswsw +nwnwwnwnwsenwnwwnwnwnwnwnenwnwwwenw +swsenwnesesesewswswswswswswswswseswswsw +seneseseswwesewseseneseseeese +wwwsewwwwnwnwswwwwwwwewwsw +neewneeswenenenenenenenenenenewnenew +nwnenwenwnwnwnwwnwnwnwnenewnwneenene +enwwwwwwwwwsenwnwwewww +senwnwnwnwnwenenwwswneenesweewswswne +nesesesesewsewnesenwseswseswsenwsesesw +seseswswswseseenwseseneswnwnw +seseseseseseeeseeweeseseswnwsenesenw +nenewwswseseswseenwenesenwwwesenwswse +nwnwnwnwswwnweswenwnwnwnwnwnwnwenwswnw +wwwenwsesewnwnwnenwsenewsenwenwwse +swsewswnwwwswewnw +enwnwsenwnwenwnenwnwnwnwnwwswnwnwwew diff --git a/src/day24.rs b/src/day24.rs new file mode 100644 index 0000000..9d6cab6 --- /dev/null +++ b/src/day24.rs @@ -0,0 +1,72 @@ +use aoc_runner_derive::aoc; +use std::collections::HashMap; + +#[derive(Debug, Copy, Clone)] +enum Direction { + E, + SE, + SW, + W, + NW, + NE, +} + +impl Direction { + fn parse(input: &[u8]) -> Option<(&[u8], Direction)> { + match input { + &[b's', b'e', ..] => Some((&input[2..], Direction::SE)), + &[b's', b'w', ..] => Some((&input[2..], Direction::SW)), + &[b'n', b'e', ..] => Some((&input[2..], Direction::NE)), + &[b'n', b'w', ..] => Some((&input[2..], Direction::NW)), + &[b'e', ..] => Some((&input[1..], Direction::E)), + &[b'w', ..] => Some((&input[1..], Direction::W)), + _ => None, + } + } + + fn step(self) -> (isize, isize) { + match self { + Direction::E => (2, 0), + Direction::SE => (1, -1), + Direction::SW => (-1, -1), + Direction::W => (-2, 0), + Direction::NE => (1, 1), + Direction::NW => (-1, 1), + } + } + + fn iter(input: &[u8]) -> impl Iterator + '_ { + struct Iter<'a>(&'a [u8]); + impl<'a> Iterator for Iter<'a> { + type Item = Direction; + fn next(&mut self) -> Option { + match Direction::parse(self.0) { + None => None, + Some((rem, dir)) => { + self.0 = rem; + Some(dir) + } + } + } + } + Iter(input) + } +} + +#[aoc(day24, part1)] +fn solve_d24_p1(input: &str) -> usize { + let mut tiles: HashMap<_, usize> = HashMap::new(); + for pos in input.split('\n').map(|line| { + Direction::iter(line.as_bytes()).fold((0, 0), |pos, dir| { + let (x_step, y_step) = dir.step(); + (pos.0 + x_step, pos.1 + y_step) + }) + }) { + *tiles.entry(pos).or_default() += 1; + } + + tiles + .values() + .filter(|×_flipped| times_flipped % 2 == 1) + .count() +} diff --git a/src/lib.rs b/src/lib.rs index f660e6c..78f4c3b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -14,6 +14,7 @@ pub mod day20; pub mod day21; pub mod day22; pub mod day23; +pub mod day24; pub mod day3; pub mod day4; pub mod day5;