From 8e6b427a8f52c9a542245e92372086604d80b39b Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Wed, 23 Dec 2020 22:44:16 -0800 Subject: [PATCH] Day 24. --- input/24.txt | 471 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/24.rkt | 57 +++++++ 2 files changed, 528 insertions(+) create mode 100644 input/24.txt create mode 100644 src/24.rkt diff --git a/input/24.txt b/input/24.txt new file mode 100644 index 0000000..9b35a80 --- /dev/null +++ b/input/24.txt @@ -0,0 +1,471 @@ +swswswswneswswwwswnewswswweswnwsww +nwwewenenwnenwnwnwnwneswnwswnwnwswswnw +seneswwwswwnenwnenwswswswswsewseeww +esenesenesesesewseseswnesesweesesesese +seseseeseenesewseenwsesewswwsesenwse +eswenewnenenewneneneneenenenenwnene +nwseeseseeseseseseewseesenwseeesese +nwnwswswswweneseswwswwneswswswswswsw +senenenwnenewneneneseswneeeenenenew +eswnwnesenwnwnenwnwnwnwwnwsenwwswswenw +wswneswswseesewswseswswswnenesenenwswswne +seswseswneswswswwnwswwswseneswswswswsee +neseseswnwesesesesewswsesenesenesesesw +wwswwwsweswwwww +seswwnwneenwswneenwewneneneseenee +eswseenweswewseneeeeseeswnwnwse +swsweswswswnweswswneswwswnwswwwswswswsw +nwwnwnwnwnwnwnwnwwswwnweneswwenwnw +sewswwwwwwwweswwwwneswwnwswnw +nwneeneeneneseneseneneneneneneswnenwnene +swnenenweeneeeseswweneenenenenene +nwnwnwsenwewsesenwenwwwswwnwnesenw +swnwswswswswswsewseswnewneseswswswneesw +wwweswwswwsewswswwwwnwwesewwne +swswsweneswswswenwswnewnwswwneswseswswe +nwnesewwnwwnwwwsew +enwwwnenwnewwwwswwseeswewe +neswseswswsenwseswnwseswse +senwseneneneneneeseneswnenenenenwnenwnw +swseneswwseenwsenwneneswnewnenewene +ewwwwwwwewwwnwswwwwwwwne +eswswenwsenwnwsenenw +nwneseewseswwsewswnwnwnwwwwnewww +nwwwwwwwwewnwwswnew +neeeseeesewseeeeeeeewe +wweswnenwwnewnwnwwwewsewnwwsew +swwswwwswwewwswswnwsweswnwwwww +eseswneenwneenweseenweeseeeenw +neneswneneneneneneneneneswnenwnwnw +nwnwwnwewwswwnwwwnwsewnwwenwnw +seswswswnwswwwwswwswneswwseswnw +nwseswenwwneneneseswneenwnenenwnenwnenw +nwnenenenesewwnenwnwnesenwnwnwnwnenwnwnw +wseeeneseeeseseesesenwseseswsesese +sweseswnwseseseswseswseseseswswswse +ewwwswswsenwewnewwwenwwwnwww +nwwsewnwnwnwneswwnwesewnwwnwnwnwnwne +nenwnwnwnenenwnenwnwswswnwneenenwnwnwne +esenwneswsesesweeeeweseseeseseswnw +swswswswwsesweseswswswsw +swsweneswwseswswswwswsenewswwswseswnene +nenenewnwnenenwenwnesenwneseswnwnwnwne +nenenenewneeseneneswneneneswsenenenwne +nenenwnenwswwnweesenwsenwnwnwseswnwnwnw +seseeenwsenwswsesenwseeseeseeseswese +swneeseseneswswnwswnwwwwswswnee +seeseseseneseseswsewseenenwwneseswse +wswseseenwwswnewenwswswwwnewwsw +nenewswnwnenwnwneeneswseeneswnenwnenesene +nwswsenweweseeneseesesesesesesesee +seneswswwesenenwswseswnwseseseseseswne +wwnwwweswnwnwwweneseewnwsesenw +swswneneneneenewnesenewweenweswne +eseneseneseenenewwswseweenweenenene +nwwnwwnwsenwnwnwnwwnwwnww +swweswsewewwwwwwwwwwnewne +swswnewseseseesenewseesesesesesenwese +swswnenwnenwnwnwnwnenenenwnwwnenwseene +wnwwwwnwnwwnwwnwnwwwnwnwsenwe +nwseswwwnenwwwwesewwwwwwwnenwnw +nwswswnwswwswwnenenwnwnwnwnewnenw +seswswswnwswswswswswswswswswswswsw +neneseeneswnwnenwnwsenwnenenewne +wwwwwnenwnwnweswwnwsewwwesese +swwswswwwwseswswenwnewswwswweswnw +swwswseswswseeswswswewswswnwswswese +nwnwewsenenwnesewwwwswnwnenwswsee +seseseenwwswseneneseswswnwnewswnwsenwse +wwswwnwwwwsewwwenewnwswnwwwe +swwwwswwswwswneseswswswwnewswwse +nenenwneeswnenesweneneneeneneswsewesw +seswswswseswswswswsweenwswswwseswwsw +swswswsewneseesenwseseswseswswswnwsesw +nwwnewnwnwswnwnwswnwsenwwnwenwnenww +wswwnwwwswwwwswe +eewneeeeneeswsee +wseneseeseewseseseswsewse +wwswnwnwwnewnwsewenenwswwewswwne +seneesesesesewswswwnwseswswseseswseswsw +ewnweeeseneseeseseeneseswwwee +wwwwswwsewwwwewwwwwswnwwne +swsewswswswseswseseeswsenwseswswswsenw +nenenenenesenenenenenenewenewneswsene +newnewewwnwnwnwsewwswnwwwwesww +neseeeneneeewnee +wsenwwnwenwnwwnwnwnwwnwnwwnw +nweswenwseseswwseeenwseenwswsesewsw +wwwswwwwsewwwwwwwwne +nenwnwnwnenwnwnwnenwwnwnwnwnwnwe +eeeeeweneeseeeesweeeeew +seneseeeeewewnweseeseseseeseese +swenenenenwesweewneeeneneeeeeee +wnenwseswnwwwsenwnwwnwnwwnwwnwnwnwnw +sewwwswnwwnwwwswwnewwewwwsw +swwwwswswwswswwwswnew +esweeneeswenwnweesweneeeeswee +eenweeseneeeeeeeeeseeenenwsw +nwneswweeneseswnwswnweeesesesenwe +neneneeswnwnwnwnenenwnenene +wseewseeseseneswsenwsenewsesweseswswse +eseswneneseneenenewswwnwnenenesenenenw +seswsesesweseswseswseswwsw +nwnenenenenwnenenwsenenwwsenewnenenene +eneneneneswnenenenenenenenwneneneswnwnw +neneeneneenwnenenesweneneewsweneene +swnwnwneswnwnwseenwnwnenwenewnwnwnwwnw +swswwnwwswnwwseswewswneseneswewneswe +neswswnewwswswwwswwsewww +nwneeenwswnwsenwnwnwnwnenwswnwnwsenwnw +neeswnwnwwnwseswesweneswnw +swnenwenwnwnwnwsesenwswnwnwnwnwnwnwnwnw +swseswswnenwwwwseswwwwsw +seswneseswseswswswsewesenwsenesewsesw +eseeneswseenwewseewneeeene +swnenenenenenenewwneneswnenenesenesenw +swnenwnenwnwenenenwnenenwnwnene +eswneenwwnwwwneewneneneswneseswee +neseneseneewneeeweewnwneeseee +nesenenenenwnwnenwswnwnenwnenenwnw +seswsesesenwseeeeseseeesesewseenw +eneswsewneeswnenweswneeswnewwswseene +eeseseseswneswseseeeeeeeeewne +wwwseswnenwwnwnwenenwnw +sesenesweeeeeweeeweeenwwe +wsewnwwsewwewwnew +esesenwnwwwneswwswsenwnwnwseswneswwew +nenwwnwnwnwswwenwwwenwwwnwnwwnw +seeeneeneeseeswnenenwsweweewee +swswswwswswswswwswswwswneswswsw +nweseneweseeswwnwwswswnw +wnwsweswseswswswswseswne +swnenenwneenenenenenenenenenenenene +swswswswswseswswwswswswwnwwenwnwseswesw +wswwswswwswswsweswewswwswnwnesw +neneeewneneeswnewneneeseseswewnw +seseswseeesenwsesweseneseeseeesese +nenenenwnesewneswneneseneenewnene +neneneneneneswwneneneneneesenenenenene +swswswnwswnwswsweeswswseswswswswswswnw +sweeseseneeeseeswnewnwnwwewsee +neswsenwnewwnwwwwwwswweseenenww +nwwwwnwwwsewnwwswnewwwnewww +nwswsweswswneswseswswswswwneseswwnesww +wsewwnwwwwswnewwwwsewswwwsw +nwwwwwsenewneewwseenewwsesw +nwnenwwnwwnwwnenenwnenwenesenwenwne +nwnenwnwsewnenwsenwnenenwnwnenenenwnene +wswswwwenwswenesewwnenwe +wseswneeswneseenwnwsenwswewwweswesw +swnwseseeeeewseswnwseneseswsenwsesene +sweneswnwnwswsweneswnwswneswneswsweswsw +eeeswnwswneeneenewswnewneneeee +senwwnenwenwnwwsenwnwnwnenw +esesenweseeeeseseeesesese +seeeeseneseseeeswseeeeseewsene +wneswwwwswswwwewwnesesenwwwse +wnwnwwwsenwnwswnwnwnenewnwnwwnwwnw +senewsesesesesesesesesesesese +eenweswneeenee +nwnenwwnwnwnwnwwwseenwnwnwwnwnwnwswnw +esweneseeneeneeneneneneneswnenewnee +nwwwwswwewnwnwww +neneeneewneeneneneswnwnesenenenenwnesene +wneswsesenewswwwwwwwnwswwwseww +wesenesewswsenwswneswswseswneesesese +sesesenwswsewnwsenwswseswesenenwseeseew +wwnwswwneswwweswwwwwwwswww +nenenwnesewwswswewsenwswnewwswew +wwwnwwwnenwwwwwnwswnwnw +nenwswneneneenenenenwnenwnwnwnenwnw +swenwswewswswswewnwwswnewswseswne +swsenweeseswenwseseswsenwsesewseswswse +eeeweswnwnenenweeswneeeseneeee +swwswneseswnwseneswnewswweseswnwww +swswswswnenwswswseswseswswswneswwseswsw +enwsewsweeseseseneweeseswesenwese +nesenweneneneneneswnwnwnenwnenwnenwnene +seswseeenwsesenweseseseseseneseeseeswse +senenwsewnwnwnenwewnwswwneswnwnwsweenw +neeewnenweseseseeswnesweneneewwse +eeenwswswseneweseneenweneneneew +swswneneswnenenenwnenwnenenenwnwnwwnwe +swsweswwswswswwnwwwweswswswwswnw +wewwewwwwnwswswwwwswwswsww +swwnwwswnweseswnwswseweenewwww +neswswswseswswseswswswseswwswswswsesenw +eneeneneneewneneneeneneenesew +nwnwnwnwnwnwnwsenwenenenwnwnwnwwnwnwswne +weneswnwsenewseseswseeseene +eseseweneenwnweseeseseneneweswswe +swswswswseswswsenwnwseswseeswswsweswnw +sweswwsweswswwswswsweswswwnwswnwenw +eeeseseeenwsewswesesewsenwsenesw +seneswseseseseneseseseweesesesw +ewnwnwwnenwwnwwnenwwnwsewwnwswww +senweeswseswneweesesesesewnwnwsee +wseseseseseseeneseese +neswneswewnwswwwwwwwswwwseewnwse +sewwsesesewnwswswswseeneeesesewse +sweswwneseneswswswswnwswnesene +eesweeenenweeneeeswenwneeeene +eseseeneweeseeeeneenwneeenwne +neneneneneswneenenwnewneneneneswnenenenee +nwnesewwswswseswnwwneswswwswwsesesw +eeneeswesenwewenwneneeeseenwesw +nenwneneneneswnenenenwnwnenw +wwseewnewwneenwwnwswsewseenwse +wsenwwnwwswwwwwswnweewnenwsee +nweseswseseseeeseeseeseeesenwsese +neneswseesewesenenenwneswwswnewswswsenw +wwneseenwwsenwnwnwneswswewnwswwnwne +eneneeneneeneesw +nwnenenwenwnwseeenwwswnwnenwnenewnw +swsweswswsewewswswnwnwwsewwe +swseneswswswswswswsesewswswseseswswnesw +eseseesenwsenwseseeeweesesweeene +neswnwsewsweseswseseswsesesenwnwneseseswse +eeneeeseeseenwneeneeeeeewne +nenwswewnwsweneswwenwswneseseneenew +weeswwwwnenwswnwsenewnwswwnwnwenw +wwnewswswswwnwseswwwswswwwnwsew +newsenwwneswwnwwnwswseeswseswsenwww +swswwsweneswwwnwnee +nwswswswswswswswswnwnwswenwseswswseeswsw +nwnwnwnewswwswnwnwnenwsenweenwnwnwnese +nwenwseseseswswswswswswenwseswnwewswswse +swneswwewsenwnwnweeenenweeseese +nwwwwwswnwesenwwnee +nwnwwwwnwwnwnwsenw +nwseseseswswneseswswnwseseswsweswsweswsw +enweswnweswnweneeeneneneeeswee +sesenwseswnwswswnenesesesesweseseesesw +swseswsewnwnwwneswswswseswswneseswwsw +nenwnenwnwnwnwnesenwnwnwnwswnene +swwenweesenesweesenweseeeeee +swnewsesenwswesweeneneesewnw +swneweswsenwnenesese +nwnweseeseseseswseewseseenenwsee +neswswneseeeeenenwwneeenenwneseneene +swswswsesesesenwsesesenwseswsesese +nwswnwenwnwnwnwnwnwnwnwnwnwsenwnw +eeneesweeeeeeseswnweeneneewe +eeenweseseeeswnwwnwnenwswnewsenenw +neswswswswseseesweswsenwsesenwnwswswsesew +eseeeseenweseeeeseese +swwwswwswwswwsewwswswnwsww +swswwsenwswwswswswswwwswew +eeeseeeseswewneeswneee +sweseswswenwnwwswswnwnenwwseewwwsee +wwnwwwwnwnwwwwewwenewnwswww +sewneswnwseeneswwwnewnwenewseswwnw +seswswswswwswswswnwsweswswswswseswswe +seswswswswswnwneswnwswswsesesenese +eenweseeeseeeeneneeeweseesw +swnwseswswnweneswenwnewenenwnwswnenese +wweenewnwsewnwwnwnenwswseweesw +wwseneeneneneneseenwwswsewwesee +wwsenewwswswwwswwwwswsw +nwwswwwnwwwnenwnwwnwnenwwswwnesw +eneseeweseesesesweewnwenwwswe +eneneeeweneeseeeenesenenenwne +neeneeeeesweseweeeeeewee +swsewnesenweenwenwnwneseseswnwnenene +sewseswseseswseseseswswesenwneswsesese +nwwwnewsewswswwnwseewwwsenewne +enwneseeeeswswneeenwnweeewwsw +wnwswswswswswsweswsw +nenenenwnesenwnenwnwswwswnene +swseseseseenwesenwsesewseesewnwseenw +eswenwsweeeenwneswseeeenwwnee +sweeswswwswswnwwnwswseseeswsesw +nweenwswsesenwneswnweeeeseseswswsenw +wnewseenwnwswneseeeeswnenwneene +nwsewnwnwnenwnwnwswenwnwnwnwwnwnwnwse +swswswswswswswnwswswswswseeswnwseswswsw +senwseswseeseneseewnwnweeseesesesesese +eeseeeenweeeneeeeneeeew +seswsenwswseesesenwswsesweswneseswsesese +nwwnenwnwwwnwwwsenwwnwnwsewnwnewsew +swneswswswswnwwswswswseswswsweswseenw +swwnenwnwneneenenenwnenwnenenenwnwne +ewneswsenwnwenenenwswseeesewnwsww +wswswenwwnenwnwseeswwnweswswnweeswse +nwnwnwsewnwnwnwenwswwsewnwenwnwwnw +neneswneneneneneneeneenenwnenewnwneenesw +eeeseseeweeeeenee +nwnwnwswsenenwenwnwnwnwswnwnwsenwnwsweene +wwsewwwwswwnewwnewwswwswwsw +nesesewwneseneseweeenwsweenwswwse +eeenweesweeewweeeeneeeee +eseswnwwsenwswneswsesweseneeneneswwwsw +wnwnwnwnwewnwnwseenwwnww +enwsenwseseeneseeseseseeswnwseesesee +neneseseseeswswwseswnesesewswnwnwwee +neenwnwnwnenwsenwnwnwsenwnenenwnwneneswnwnw +senewnwnenweeewnenwnenenwswnwnenwswnwne +seseswseswsesesesesenesewseesesesesew +nenenenwwnwneeneenwswnwnenwnwnenewnee +wwwwwseswneewnewneswnwewswsenw +nwnenwnwnwnwenwnwnenenwnwsenwnwwwnwne +wswwsenewnenenesewneneseseseewnewsw +nwnwsenwnwnwnenwnwnwnwnwnwnwnw +nwswswnwnenenwenenewneeeneswswnenwwnene +sesenwnwenwnwwnwnwnwnwnwnwnwsenwneswsenw +nwneneneswnenwnwnwnenenwnenwsenwnene +seneswneewswnenwwneeeeneeneneewe +seswswswswswneswswswswwweswwswnwswwne +swnenwnwwnenwnwnwsenenwweesenenenew +swsewwnenwnwwwwsenwwwewnwwsenew +eeeeeneeneeweneeeneenwnewswene +nwnwnwnwwnwwwwnwwwwnewnwwswneswe +swwnwsweneseswwswnewswswnwswseswnwseswe +swswswswswswswswswswseswswswswneewnwww +senwnenwsenenewnwnwwsenenwnwnwnwenenw +wswnwenwenewnwwwwwnwnwwswwwsw +swseseswswseswseneswwseneseswwseswsesese +eeeswsenewenweseeeeseeeenesw +enwnenwneswwewnwsewnwnenenwnwse +nwnenwnenwenwnwnenwnwnwswnwnwnwneneswnw +sweswseswswnwswswswswswswseenwswsewsw +wnwnwewnweenwnwewnwwsenwweswnw +senenwnwwnwnwnwwnwwwnwnwnwnwnwnwnwsesw +nwnwnwneswnwnwenwnwnewnwneenwnwnwswne +seesenewnwneswnenenenenenenenesewnene +seswwswnenwnwseseswseswswswseseweneesw +swwswenwwnwnwwewwwnwwnwnwwe +nwnwnenenwnwsenenwnwsenwnwswnwnwnwnwnw +wewsesenwswnewnwnwwnw +nesenenewneesenenweneweneeneeneeswne +senwwsenwswswnwneesewwnwneenwwnwswe +nwnwenwnwnwswnwnwnwnwnwswnwnwwenwnwnwnw +nwnwnwswnwnwneewnesenwnwnwnewnenwnenwnwe +wseseenwswseneseseneeeseeeeesenw +nenewwsewwenenwwsewswwnwwswww +nwwwnwwnesewewwwwswwewwseww +eeswseneswwsenwesesweswwsenwnwnwnese +wnwwswwewwwwwwwsenwnwwnwwsenw +nwnwnwnwnwneseneenwnenwwneenenwnwwnw +nwnwsewswnesenenwenweneseeneswwnenwwne +nwseeneneneneeneneneneneswwwwewswse +nwnenwnenenenwwswneneswnwneneneeenenwne +swswswsweswnwwswswswsweswneswswswswsw +seswseseswseswseswswnwseswswswseneswew +senwwwweswnwneswenwwswnwnwnenwwse +swswswswsewseswsewsesesesweneswsesesw +enenewneneneeeewneneseeneeneseene +nwnwnwnwnwwsenwnwsenwnwsenwnwwnwnenwnwnesw +nenenenwswnwneneneneneneneenwsenenenenw +nwnenwnwnwnwnwenwnwnwswneswnwnwnwnwnwsenw +neenenwseswnwseswswnwwnenwnwnenenenwswsew +sewnenwnenwenesenwwnwsenenwwne +wswnwwswwnwnwnwnenewnwnw +senwswneeswswswswwwswswswwsweswwsw +esewswneeeeneeewneneneneseenenwnene +nenwnwwneswnwswnwnenwswnwnwsenenwnenwnwnw +wswswnwswswwswnwswwsweweswswswsw +swswenewweswwwsweewwseswwnwnw +swwwseswswwsenesweesweenwnewsese +eseeseneseewsweneeeeseeeeee +wwnwwnwnwnwwswsewnwnwnwnwewwwnw +nwneswnwswnenwenwnwnenwnwwsenwnwnwnwne +eeeeeeneneneeweeeese +seseswseswneneseseswsenwseseseswseswsesee +wswwseswswswswswewwswnwnewsww +esenwwwseswwwnewwewnewwwww +seeeeeneeseeesenweseesewnwesese +eswwewwwwnwwwwwsewwwewnwsw +seeseeseesenwnwseeswsweswseseseesesenw +eeseeweeeseeeeeeeee +seeeseewswsenwseenwseeseneneswese +nwnwnwwneneneneewnwenenenenwsenwswnw +wsesweswnewswneswsenesewswnwseswnesene +seswseseseswseseseseswnwswswseswsesenwe +newnenesewneneneeneneseneeneneneesw +swswswswwsweswswwwwswsenweswnwwne +enwwwnwswswswwsew +nwnwnwneswnenwnwnwnenenwe +nenwneneseswnenwnenwneswneswwswneseee +eneneneeneswswneneenwswenwwneseenenw +seseswnwsenwsewswnewnwwneewneswswnew +eneneenenenenenenenenewnenenenesw +neswneswwneneewseneneeewnwnenenwne +swnwnewneeseswnweneswnwsenwnwwsewe +swwenenwswwnwsweseswswsw +senenwnenenenewnwnewnwenwnwneeneswnee +wnewneswswswwneseswww +sewwweswsewseswswswswnewseeneesw +wnwnwwsewwnwneseewwwnwsenwwww +swswswwswwswewwswswswseeswswnwswsw +seswneswsewswswswseseeswsw +nwwwnwsenwwseseneewwnwnwwwwnw +swswswswnwswwswsewne +sewneswswwweseneneeswnwnwswewswswe +nenwenwenwnwwnwnenwnenenenwnwneswnenw +eeneseseseseenwseswnewsesenwwew +nenwnesenenwwnenenenwnenenwneene +swseeseseseswsenewseseeswswnwswwswnwnwne +nwnenwnenwwnewswswseenwnwnwnw +seseswseswwsweswswswsenwswsenenwswswseswsw +nwwwsewwwwwnenwnwwwwwnwsenwsew +nenwnenwnenenenwnenwnenenesewneswnenenw +neenwnenesenwnenwnwneenwseswnwwwnwne +nenwnwnesenwnwenwnwsenwnwnwnwnwnwnwnww +swwwwwswwneswwwwsewwswwswenw +nwswswwswnwseseenww +nenwsesewneeswnwnenesenesenenewnwneee +swnewweneswseswswswswswswswswneswswswnwsw +eneseneeswwnwwnwnwsesewswenwnwsewnw +nweswnenenesenwneneneneswenenenenenenwnw +swnwnweneseenwewnweeswsenwswswnwese +esenwsweenwseeseeeeeesesweeese +wwwwwwwwwwwnesewww +swseswsesesenwseswswse +seseseswseesewseswseseseswswsese +wseeswswneseseswnwnwswswswnewwwwsw +wnwenwnwswnwnwswnwewewwnwnewnwnwse +enenwnwwwnwwwsenenwswnwseneseswnenw +eeeeswseseeeeseeeenwswnweeese +nwneswswswseswswwswswseeswswswwseswswsw +swseswnwswseswneswswswswswswsweswswsww +swswswswnwswswswsenweseseswseneseswswne +eswwnweseesesewnwsesesenwseseneesesese +enwseewnesweeenenwneseeswneeswenwe +wswwswswwseewswwnwwwseswnwswenw +nwnwnwwnwnwnwswnwnwnwe +swsenwnenwnwnwnwwe +nwseeseneeeeseeeeeeeswneseswe +neeeeewnenewnesesw +nwsewesenwnwnenenwnwsewwseneenwswnwnw +nwsewwnenenenesenwnwsenwsewnesenenwse +swsenenenwseseseswswsenwweeswsenwwsesw +wewswswwswwwwnenweswwsw +sewwwwneswnewwswwwwwwwnewwww +nenwnesenwenenwnenesenenwswswenewwnenene +eneeneeseeewneeneee +seswnwwwnenwewewnwenwwnwnwsesew +swseenewnesenwwsenwwseswnese +senwwwwewsenwwnwnwnwnwswnwnenwwswnwne +nwseseseneswsenenesesenewnesesenwswwseswe +sesewnwnwnweeswnwnwwnwnwwnwnenwnwnese +nwneneneenenwneswnwnwneneneneswnenenene +wweseseswswneswsesweseswseseswsewswe +esweseeeseswnwsenwseenwsenweesew +neswseeweeesweseeseesesenwseee +nwwnwnwswesewneenwsesewwwnwnwnww +nesewneseneeneneeeeenenewnenenenenenw +eswswswwswswwwwswnwswswwwswswsene +eeneneeneenenenwnenenewneeeeewsw +swseswneswswseseswswneseneswsesesese +weweseneneesweswswnenwenwnwwseswse +nenewnweesenenwneneneneeseneeneenenese +enenwwnwnwnwnwnewnwnwwswwwnwnwwnwse +seeseswseseeenwsesenesenwseseeeese +neenwwnesenwneneneswsenenenwnwsenwnwwne +swwwswswswnwwewswnewwnewwwswswsw +seswsesesesesewsesesenewneneseesesese +neswswnwswswswseswwnesewswnwse +wseseswnwsenwswswswseseeeswnewseeswsw +seseewenwseseseesesew +seneswseswnweneseswnwwnwsenenwsenwsesww +wwseneswswwswwneseswswswswwseswswwne diff --git a/src/24.rkt b/src/24.rkt new file mode 100644 index 0000000..20338c4 --- /dev/null +++ b/src/24.rkt @@ -0,0 +1,57 @@ +#lang curly-fn racket + +(require "../lib.rkt") + +(define (parse path) + (map string->symbol (regexp-match* #rx"(e|se|sw|w|nw|ne)" path))) + +(define input (map parse (problem-input 24))) + +(define (walk path) + (let loop ([coord (list 0 0)] + [path path]) + (if (empty? path) + coord + (match (list (first path) coord) + [`(e (,x ,y)) (loop (list (add1 x) y) (rest path))] + [`(w (,x ,y)) (loop (list (sub1 x) y) (rest path))] + [`(se (,x ,y)) (loop (list x (add1 y)) (rest path))] + [`(nw (,x ,y)) (loop (list x (sub1 y)) (rest path))] + [`(ne (,x ,y)) (loop (list (add1 x) (sub1 y)) (rest path))] + [`(sw (,x ,y)) (loop (list (sub1 x) (add1 y)) (rest path))])))) + +(define (keep-flipped coords) + (for/fold ([keep (set)]) + ([coord coords]) + (if (set-member? keep coord) + (set-remove keep coord) + (set-add keep coord)))) + +(define (neighbours coord) + (match-let ([(list x y) coord]) + (list (list (add1 x) y) (list (sub1 x) y) + (list x (add1 y)) (list x (sub1 y)) + (list (add1 x) (sub1 y)) (list (sub1 x) (add1 y))))) + +(define (flip coords) + (let* ([xs (set-map coords first)] [min-x (sub1 (apply min xs))] [max-x (add1 (apply max xs))] + [ys (set-map coords second)] [min-y (sub1 (apply min ys))] [max-y (add1 (apply max ys))]) + (for*/fold ([coords* coords]) + ([x (range min-x (add1 max-x))] + [y (range min-y (add1 max-y))]) + (let* ([xy (list x y)] + [bs (count #{set-member? coords %} (neighbours xy))] + [black? (set-member? coords xy)]) + (cond + [(and black? (not (<= 1 bs 2))) (set-remove coords* xy)] + [(and (not black?) (= bs 2)) (set-add coords* xy)] + [else coords*]))))) + +(define-values (part1 part2) + (let* ([init (keep-flipped (map walk input))]) + (let loop ([flipped init] [days 0]) + (if (= days 100) + (values (set-count init) (set-count flipped)) + (loop (flip flipped) (add1 days)))))) + +(show-solution part1 part2)