From d6b1df36a5332d41bd59ca467f76995d9012450b Mon Sep 17 00:00:00 2001 From: Xavier Morel Date: Thu, 24 Dec 2020 10:24:12 +0100 Subject: [PATCH] Add 2020 day 24 --- haskellAoC/inputs/2020/24 | 597 ++++++++++++++++++++++++++++++++++ haskellAoC/src/Y2020/Day24.hs | 52 ++- 2 files changed, 646 insertions(+), 3 deletions(-) create mode 100644 haskellAoC/inputs/2020/24 diff --git a/haskellAoC/inputs/2020/24 b/haskellAoC/inputs/2020/24 new file mode 100644 index 0000000..da14bcb --- /dev/null +++ b/haskellAoC/inputs/2020/24 @@ -0,0 +1,597 @@ +nwnwesenenewnwswnwweewswwweswwsew +wswnewwwwwwwswswseswswswwwwesw +eeneeeeseswenweeswneneeneeneene +nwnwnwnwnwnwnwnwnwnwsenwnwnwnwnwnwwenwnw +swneswnwneseswenwnwnwwseneneswnenenene +nwnenwnenwnwneenwnwneneneneswnenene +seneswsesesesesesewnesesesesesewsesese +neseseesewwwnwswseseseswseneswswseee +eneneeeneeeneneeenewneneneee +seseeeneseseeseseseeeeseeewse +swneswewswwswwnwenwsewwnewwwww +wswwwwwwnwwwnwsewnew +neeeneeeeeeeweeeneneseneeenw +eneewenwnenwswnwneswnwnwswesenwnwne +eeeeeenewsweeeeseene +swnwseswseswsenenesenewsesesenwsesesesese +wswnwnwwwwwwwwwnwwseenwwnwnwnw +neeweseseeeenweewweesenwnee +swswnenwsweenwwswswswswswnwswwwswsee +nwseseewsenwswnenwnwsewneswewnwnwnwenw +nwnwnenwswnenwnwnenwnenwnenwnwnwnwswnwnwe +swneenwneneswnenenenenenenenenwnwneneswnene +senwnwneneneenewnwnwnwenwnenwnenwwnwnw +swwnwwwwwwwswneswewwwewwswe +neewneweswnwnweseswnwwneeneswnwnw +nenenweeeeneneswneswnesweenenenewe +seeswswwswswswswsweswswseswwswswswswsw +seseseseneeseseeswsesesesenwsesenwswse +ewenwsewnwwnwnwwnwwnwnwwwwww +sewnwwwnwwnwewnwwswwwwnwnwww +wswnweswswwswwesesweneseswneswwesw +sewswswneswswwswswwswswswswswwwswsw +swseswwseswswswseswseseneseseneseseswswse +seswswesewseswsesenwseseesewneseswswswsw +neeenwneneswneneneeneswenewnwenesw +wsewenewwwwwwwnwwwswenwnwswe +neseswseseswswswsenwnwswwswseswseneesee +swnenenwenesweeneeeeswnwneenenee +wwwwwnwwwswwswwwwwseww +seenwseeseseseeweseseeeeenwsese +seeswnwsesenenweneseenwswswseswsesese +swswweneweeeeswseneenwnwneeene +wnwwswwwwwswwseswswswswwwwsw +nwwnewewnwewswwswewnwwwnwwswe +eeewseeneesweeeenwwnwseeeese +wswswneswswswnwswswwwswwswswswswwesww +neweneeswnwnwenenenwnenwnwnwwnwsesw +seswesesenenwewnwneewnewnwnewneew +swwenewsenenewneneneneneneeswswewe +nwnwnwseenwwnwnwwnwnwwneswwnwwwnw +nwnwswswwwnewswneewwnwwwwwnww +wnwnwwwnwenwnwewwnwswnw +swswswswswwswswneswswswswswseswwswswnw +sesewswseseseseeseswsesenwseseseesesw +eeweneeneeeeesweeneeeenee +wnwnwnesenenwnwswswwnwnwnenenwneeseswnw +seswseswswsesesesesesesewseseseseneese +seseseeseseweseseseeseseeseese +enweneseseeseeseseseseeeeseew +eneneneeneenenenenesenwnene +nenwnenesenenwwnewnwnwenenwe +wwneseneswswsenewwwwwwseeswwnwe +seseeeseseseseswnwwseesweenenesewnee +wwneseswsewseeseseswsesesenwsesesesee +swswswswswswesewwwswswswnewswswsww +eesweeswswwswenwenwnwnwsenwnwswe +nenenewneneneneneneenewneneneneenene +wwswnenwnwnwenwswnenwswswewnewesesw +eeseeeseeseeeseseweneeseeeewse +ewwwnwnwwsenwwwwnwwwwwwwww +seseneswsesenewseseswseseswsesesesesesesese +seneseneseswwseesesesesesenewseswesenw +nwswswnewswswswwwswwwewnewsewse +swnwswseseswneweseseseseswswenenwnwsw +eeneenenewweeeeeneeseewnee +wwnwwwwnwwewnwswwwnwewwne +swwswswswwnwsweswwswwwswnwseswswsw +wwswwwwsewewswnenwwsewswswnwswsw +nwsenwnwswnwnwnwnwnwnwwnwnwnwnwwenwnw +nenwnwnwnwnwnwnwnwnwnwsenwneswwnwnwnene +nwseeswesenwseseswsewnesenww +nenwwnwnwnwsenwnenwwwnwnwnwswnwwnwnw +swwwswswwwswswswnewsw +nenenwneneneneswnwsenenwnenenenwnenwnwnw +wwwnewwswswseswwwwwwsenwwwwwsw +nwnwewwwnwswnwwnwneeenwswewswsw +swswswswseswswswswswnweswswswswswswsweswnw +nenwenewnenweswneneenwnenenenenwseneswne +seswsenwwnenwseseseswsewsenesesesenw +neenweneneeeeneeeneeesweneeesw +nwnwsenwnwnwwnwnwnwnwwnwnwnwsenenwnenwnwnw +swseswseswwswswseseseneswswseswsesesese +sesesesesesenwseseeswswseseeseneeese +wwnenewwwwwsewwnwwswwwwnwse +nweeeswnweswesenwsenweweenwswe +swseswswseswwswswswswswswswswswwneeswse +wwnwnwwnwnewnwnwnwnwsewwewnwnwse +enewwswneeneswe +sweneswswswnwwseswswwswewseswnenenesww +ewwwswwwnesewwsenweneswnwneswesw +swwwneswswswnwswwswwswwsewnenwswewne +seeseswseswseswsenwswseseswseseesewse +senewnesewnwwsewseseneseswneseseenwse +swwnwwewwwnwwwnwwwwnwnwwnwnw +wsenwswswswseseswswneseswseseswswsesese +nenenwnwnenwenwwnwnwneeswnwswnenwwesw +weeseneeeeeneneeeneeeewenenee +nenwneeseenenenenenenenenwneswnwnenewwnw +eeeeeeseeeswneeseenwesenwesew +nwnwnenenwnwnwneeswenenenwnenenwwnene +swwnwnwnwnwnwnwnwnweeneenwnwsenwwnw +nenenenwnwneswnwswsenenwnwneenenenenwnene +eeeeeeeeeeeeewe +swnwseswsesenwsenwseswnenesenwewswswse +neswneneeneneneneseneneneneneenwnewne +nwwnwsewnwwsenwwnwnwnewwnwnwwnwnwnwnw +neswsenwnenwnenewwsesesewnwseneenwnwne +nwnwnwswnewnwnenenwnenwenwnenwnewsenw +eneewneseseneseswseseeenwsww +seesenwsweseseseeseseeesesesesesenw +senwnwnwswwnwwnesewwnwnwnenwenw +eseswneswseswnwnwsweseenewnenwnwsese +senwewseenwswneeeeeeeeeneee +swnwsenwwnwnwneneswnwewwwnwnwnwnwnwwnw +swwsesenwsesenwseeeseneseeweseseee +wwwwswwswwswwnwwswsewseneswswswsw +nenwwsewswnwnwenwnwnwnwenwnwweenwnw +swseeseeseeeeeeeeeeeeeenw +eeswweeeeneenweeee +seseseeeewseenewseeseseseseneesese +wnwnwnwnwnwnwnwnenwnwnwwsenwnwnwnwnwnw +wwswwwwswwwwwwewwwwnewww +seswnwsweweswneswseswswsesewswnwsese +swwwswswseswwswswswwswswwnwwnwwswe +swnwwnwwewnwnwwnwnwnwwnwwwwnww +nenenenwnwswswewsenwnwsenwnwesenwwnwse +seswneseneseswseseseseswseswwsewsesese +neswnenenenwnewneneeneenene +swnwswnenwneenwenwswsenwnwnewnenenene +swneswswswswwwswswswswswswswswnewswswsw +enwnwewnwswwwwnwwnwwneswwesww +senenwnenwnwnwneewnwnwnwnwnwswnenwnwsw +senwnenwwnwnwneeswnwseswnwnwseenwenwnw +wswwwwseswswwwwwwwwwneew +swwswsenwswswswswswswnwswswswswnesweeswsw +nenenenwnenenwneswneseseneneswnenew +nwewnwnwneswnwswswseseeeesweewseee +neswswwwswneswwswswsweswswswswwswsw +nwnenwnenwswneeneneneneneneswnwenenwnenw +eseeneeeseweeneseesesweeeee +neneneenwnenwewsewnenwwnenenwnwew +sweeswnwnwneeswnwwswnwnwe +nenwnenenwnenwneswneenenenenwnenesenwne +eneseswswseswneneswswwwswswsesesewsese +nwnewwnwwnwnwswwwnwwwnwwenwwsww +ewswseeeseeneneneenew +esesesenewnwwseneseseseseswnwse +nenwnwnwnwnwnwsenwsenwnenwnwnwwnewwsese +ewwwwnewswwswnewwwww +ewwwnewwnwewswnwnwwswwwnwwew +nweswswswswnwswsweswswseswwnwswseswee +seenwsesenwsewnweneseswseseseseseesese +senewseswesenwsenw +swneswswseweswseswseswneswwseswsewsesw +wnwwwswnwswnewneswseswsesewweew +nwnwsenwnwnwwnwnwnwnwnwnwnenwnw +ewenwneenwnenwneseseswneswnenenenwnwsw +seseseseseenwsweseeeseseesesenewse +eseseseseseeeeenwneeeseswwesenwee +wnwesweeswenweeeeeeeeeneee +newwnwwewswweeewnenwwswnwwsw +wwwwwwnenwwswswswweewwswswsww +senwseswsweswswswseswswwswsweswwswswsw +neneneeweneneweeeeseeenenenenee +nwswnwnweneneswsesweneneneneswsenewnene +swswnewwswnwsewwwswswwwswwwwswe +nweswsewenweeswweewneeeseesese +eeeswseeeeweeeenenwe +wswwwwnwnenwwwnwnwwnwswnwwwew +swwsweeswswwswswwseswswseswseswswe +sweswnwsweseswnwsenwswseswswwne +swsesesenwswseswnwswswneseeswseseswweswse +newwwnwwswnwnesewnwnwenwnwnwnw +eneswsesesewwenewneswseeseneneseswse +neswswwwwwswwwsenwsweswswneswww +sweneeeeneeeswesweneneneeenee +senweseneseswwswswenw +wweswwsewneswnewswneswwwsw +eeseseseesesenewsesewsesesesesesese +enwenesesesweeseeeeeeseeswesenwnw +nenenwnenenenwwswneneneneneneneneneenene +seswnewnenwswnwnwnwnwwnwnwswnenenwwnwsw +nwnenenwnenenwnwsenenenwneswnwnenenwnenee +seseswsewsesesweseswwsesesweseseswse +nesenwnwnenenenenenewneneeneneneswnenenene +nwswseswswseswswswseeseswswseswswnwswswnwse +eeeseeseneewnweeseeswseesewsee +nwnwnwswnwnwnenwnwnw +eeneeneenweeneneswenenenenweesw +wswseswswswswswseweneswsenenweswww +nwnenenwnwnwnwswenwnwsenwwnwnenenenenenwnw +wnwnenenenenwnwnenwnenwnwsenenw +seesesesweseeeseseseseseesenwse +swseseseswseseswwsesesesesesesenwseeswse +nwwnwwwwwwnwnwwsewnwsenwnwwnee +nwwnwnwwnwwnwsewwnwnwnw +eeneneneseeneswneneneeeneweewee +eneewneneneneneneeseneneswneneswnww +seswnwsesesesesweseseswswseeseswswsesesew +neeseneneenenewne +sesesweewweseseeseeenenesesewew +wsewswneswwwswswswswseesweswwnesww +eswswwswnwewneseneswwswnweenwwsw +swswswwesweswnwnwswswswswsewswsewsw +ewwswwwwnwsewnwswnewswswswwsww +eneeenewneeeneseneeneeeswnenenwne +swwwwwenwwwnwwwewseeswwwne +enwenweewsweswseeeeeseeeee +wnwwwwswwwwwswnewnewwsewenesw +seeseesesesesesewse +sewnewnwsewsewnwewnenwwwwnwswnewnw +swswswswswseswswnwswnwswseseswsesw +nwnwnwwsewnwnwnwnwnewnwnwnwnwnwnwnw +nwswswseswseswseneseseneeswswseswwswsenwse +seewneseseeeweseeeeseseseeeswsenw +eneseeweeneeeeneeeweeneneee +swswswswswswwweswwswnwseswswswswswnee +nenesewnenenwnenenene +ewwnwsesewnenwsewseneweswwnwswnw +sweneneneneesenenenenewenenenenenene +neeneneneneneeewneeeswneeneneew +wnwsenwewnwnwenwnwseswnwneweswnenenw +swswseseenwswewswswsewswswnwswseeenw +nwswwswenewewwwswswwwswwwwse +eeseseeeeeswenweeseeseeenw +neswnesenwnenenenesenwneenene +seseneseseseseeseswsesesewswsesenwsesesese +eseswseeseeseewnwwseesesesesesee +nwnwnenwnwewswnwnenenenw +weeseneeseenweneeeneeneeeee +neneneneeneneneneneneneeenenew +swwswswswswswswsenwswswswswseswneswesw +nenwnwnwnenwsewnenwenwenwsenwnwwsenwne +senwwwwneseewsenewnewwwwswnwwsw +swswswwsesewwswwwneneseenewswswswsw +newseeeeeneeseeseeweseeeseww +neneseeenenenenewnesenenwnenenenenenene +seseseesesesesesesesesesewseseseswse +newswswswswswneseswswneswswseswswwwnesw +eewneseneesenwenwneswsesewesesewse +seseseseseneseseeeeeswee +ewnenenenwnwnwnwnwnenwwnenwnwnenwenene +eweweneeswneeneeneesweenenenene +seseseseseswseewesewnesenwseseesenese +neswwseeseeswsenewnenwneswnwsenwneene +sewnwewwwnwewnwewswnewnwwswww +nenenesweeneenenwnwenenenesweeneese +nwneeseesesesesesewnwseswseweesese +nwnwnwnwnwsenesesenenenenwswnwwnwnenwwnwne +swnweswsesesesenwseseseseseseseneswnwse +eseseeseseeseseseseewsesesesewenesee +eswnwnenenwneenwneswneneneswnwswnwswne +neseseseeswsewswswswneenwwsww +eeweeesenwwsenweeeeseeee +swwswsweswswswswswsewne +senwwwweneseneweesenwnenenwnwwnw +seseseseeesesenwseesweeseseesesee +eeeneseeweeneneeeene +nwswwwenwnwnwnenwnwswswnenwnwnenenwnwsesw +nenenenwnwnwnwnenenenenwsenenwwnenenene +swswsweswswewswswswswswswswnwswnwswsw +ewswswswwwswwswnewseswwneneswwsww +swswswswnwswswswswseswsw +eswswswswwwnwswwe +esesweeseseeenesenwseeseseeseseese +swswnewswswwswswwswswswswswwseswsw +wnwnwwwnwewwwwnwwsenwnwww +seeweesesesesesenwenwswseeeeswe +swesenwnwnwnwwnwnwneenwnwswnwnwnenwnwnw +nwnwnwwwnwnwnwnwnwnwenwwsenwnenwnwnw +nenenenenenesenewneneneneneneneswenene +neswswswswnwseswswsewwwswwswsweneesw +nweseseseeseesweseneeseeseseeswsee +swswwwwwswwswwneswseewwwwwww +seeseseseseseeseesesesewsesesese +enwneswnwnenenenenwsenwswnenenenwnwse +swseswnwwswswswswswswsweswswswswsesesw +wnwwnenewneneseswswnesenwswwesewnesew +neseseseseswseseswswseseseseseswse +wwswewwneswswwwwswnwwseswwswwse +seseseseswwneseneneswswnewewenwwne +sweweseseswsenwneswwseseswsesesese +eeeeneeneeeeseeeeeswseweese +nwenwenwnwswnwswnwnwnenwnwnwnwne +nenenenewneeneesenwewneweeswseesee +nwnewewwwwwseswswwsewweneswnww +sewwnwnwneswwwnwwwnwnwwwsewwww +eeeeneeswneeeeenwnwewseswee +eswnwwwwswnesweswnesewswnwwwswswsw +nenwnwneswnenwnewnenesenwnenesenwenese +seseseseseseswnwsesesesesesenwe +nweswnwswseesenenenwswseesenww +eeeeswneweneeeeeenwnwseeesese +wswnwneswswseenenwswneswwswwnee +seenwnewneewwsenenenewnwnwseneswswse +nwswwswnwswneneswsweseswse +newnenenwnwneswnewnenesesenenwsenwnwnwne +swswwswwnwswswswneswswswewwswswswsw +swwswswneswwswnewwswwswswswsewww +wwwwenewnwsenweseewwseewww +wwwwseewwwwwwwwwwneww +seswseneseseseswnesesesesesenwswswsesese +swswneswswseenwnwseswswnwsesewswnesese +nwnenenenwneneneseneneenewnenenenenenw +eeeewesweneneneeweeswnweswnenw +seeseesesesewsenesese +nwnwseenweenenenenesweeswneneswnenenene +wswwwwswwnwwwswnwwwsewwwwwse +eseswewnwnwesesewswsweneseswnwesw +swswnwswswswseseswswswswswewswswswnwsw +ewsenenwneswseneswneswnenw +swnwnwnwnwnwnwnwnenwnwnwnweewswnwwwnw +eeeenwsenewwswswwnwwwnwwwnew +seseesewseseseseseneswweseseseseese +neswswwewswwswnew +nenenwneneenwseneneneneseeswneenewne +seenweseswseeseeese +wwwnwwwnenwesesenwnwnwnww +nwsweeswnwneseseneenwswseneswwseseneswse +sesewswsenwseseseseseswsenese +enenenenwneenesweneneeeneneeeene +nwnwneeswneneswnwnwnenenenenwenwnwnwne +swneesesesewswwnwseseneseswnwnwnesew +swsesesesenesenesesesesew +seneewnesweneneeneneneeneneenenene +ewwswseswwswsenwswwwwwswnwnwswsesw +eeeswseeneeeeeswseneseesewnewnw +seseswsewswnwseseseeswseesesewsesese +nenwswseeswnwnweenwnwneswneeswswsewnwse +seseesesweneseesese +eswnwewsweseeseeweseeesenenwse +eesenweenwswweswnweeeeseswenwse +nwneneneneneneneneneswnenene +nwnwwnenewwnwnwnwswnwwwswnwwnwwnw +seeneeewseeewsenwseesweeeseee +sewnesewweneeeenwwnewwswswwswnw +neswswwnwnwnenwnwnwwsenwnwnwnesenwnwnenw +swnwswswnenwseswneeswnweesenwnw +neswswnewnenwseeneewenene +nenwneneseswneneneneneneenenenwswnenwsene +seswwswwwneseseswswswnwnewwsesenwnesw +eeeseenwseeneseenwseeeeseweee +nwnenenesenenewnwnenwnwswenwsenenenew +nwneneeseneswsenenewnwnwnewne +wwwswswswwwsewswswwneswwneswnewse +wnwnewsenenwnwenwnw +nwwseswsenwwseswswwswwnweenwwwnwsw +nenwseneswnenwswnwenwnenwnenwnwnwwnwswe +nenweneeseenweenenwsweneseneenene +sweswswwnwswswwwwwswswswswsweww +wwneseswesewsenwwnwnenwnw +wswswswewwswwwwwsewwwswnwwww +swswneeswswswswseswseswnwewnwsenwswsesese +swwnwswsweeswneswsweseswswsenwswnwsw +wneswneseswseseswswseeseseswwseseswsese +seswnwnwswswswswsenweseswswwnwswswese +swneseseeseeseseseseseseesewneseseseese +swswswswseswswswswswswswseseneseswneswse +sewwswwswweneswswswwswswswwwswwwsw +swswswswswswswswswswswnwswswswswswswnese +wwwswwwwwwswwsenwwwwwwnesww +seseseeseswwseeneseswsesesesesenwsesesese +enwnwnenwwnwnenwnwnwnwnenwnwnenwwnee +swswsewneneswsenwseeswseseneeswsenwsenesw +sweswswswswswswsenwswswswswswswswsww +seseseseseswsenesesesewseseswswnwseseswse +seneenwweenwsesewwneeswnenwwenee +enwenewseeneeewnweseswnesenenene +wwseswswswneswswswswswwswwswsw +swseseswwneswwnenwew +eseweswswnesenweneneesee +nwnwnwnesenwnwnwnwnwnwswnwenwnwnenwnwne +swwwwwseswwwswneswswwwwswwww +nenwnwswnesweseeswnenenwneenene +neenwwewneeseneswsenwswswewnese +nwnwwnwwwenwnwnwnwnwnwswenwnwwnwnwnwnw +wwnwwwwwwwwwwwwewwww +newweeneseseenwneseswnwneeesenwnw +esweeenewneswnenenenwenee +swswwswwneswswswswwwwswwswswsw +nenenenenenenenenesenenenenewneneneswne +seseseswsesesewsesesesesenesese +ewnwseswwswswwneswswswwneswwwswnw +newnesenenenenenenenenenwweneswnenene +swneseneseseneswwsenesesesewseswswswnw +nwnwnwwnwnwwwnwnwnwnwsewnw +ewneseeeseeneeeneeewneeeeeswne +nwwnwswenwswwwnwwnenwnwnwnwwnww +sewweswwwswwenwwwwwwnwwswesw +swnwneswwsweenwwwwnwnwwnwwnwnww +neswnenwwneneswwnenwnwenwsenenesenenwnwnw +nwnwsenwswnwwwenwnwnewswswnene +seneseswseswswswswseseswseswseseseswwswne +nenwnenwnenwnwnenenwnenenwsenenenwswnwswnw +enwnweneneneneneeswneneneesweenene +swswswswswnwswswswseseswswswswneswswswsw +eeeneneenweeeeeneneeeswnwesw +eneeswsweeneeesee +seseeeseseseeeswseseseseenwnwesese +eneneneneenenenenewswneneneneeeene +enwswneenenweseswneeewswesese +wseeeswsweswnewnesesesesenwewnwnw +seseswseswseswswnesesenwseseswswswseswsenw +nenwneneneneneneewnenwnene +nwnwwenenwnenwnwseneswnwnwnwenenwnwnenw +sesewnweseswseseseseseseseseseseseseseenw +neeneeswneenwnenenenenenwneneneneswnenene +neneswneswneeswneneneneneswenenenenwnene +senewnwenweewsesesewneseswneeeswnw +nwneeewsewseneneenwnwneswenewnenwnw +sweeenwwneswnewnweeeewnenwnwswswne +esweeneweneeeeeewenwsweesw +neswnenwwwwewsenweswwnwseeewnwe +newwwwwwwwwwwwwwseeswsww +nweeseeeeesenweeeeeesweee +wnwwenwwwnwnwnwwnesww +wewswwseneswwwswnwwnwwwwwnesww +nenenenenwsweeneneeeweseswnwneene +eeeeeewsweeesenweeesenweee +eeeeeneneneneswnenewneneeeneeese +nwswswnenesenenenenesenwnenenenenenw +neeeeseseeeseeswneseeeseseeew +seswseswnwseswseseswsesesesw +swwwswwwwnwwseswwnewewwwwswsww +ewwwewsewnwwwwwwwwwwwnww +swsesesesewsesesenwseseneseseewswsese +nenenenewneneeneneswneeneneneeenenee +nwnwwwswnwwnwwenwwnwnw +senenenweswnweweneneswesenwneneneneene +enenewneneneeeneeneeseenewnenenene +sesenwnwseseeseeseeeee +seewnwswswseswswseeswswswswseswsewesw +swswswswnwwswseswswwwewwwswwwnwww +nwnwnwnwnwnwnwnwnwnwnwwnwnenwnwnenwsenw +eeeeeeeeeneweeesweeeee +eswswwwwswwswswwswswnwwwwswwsw +neneneneneenwneneneenewsewweenese +nenenwnenwneneneneneswnenwswnwnwnwnwenwnwe +nwnwsenwnwwwenwnwenwwnwsewnwnwnenw +nwsenenwnwnwnwnwnwnenwnenene +eeseneseseswnweeenwneswnwsenweseswse +enwnenesenenewnenwwwnwnenenenwnwene +nwenwnweswnwwnwnenenenenwsewnwnwnwnene +seneseseneweeweseseeenesesweee +nenenesenenwwnwnwnwnwnwsenwnwnwnwnwnwnwnwne +swswswewenwneswswnweseswnwweswswnw +nenwsenenenwnwnewnwswnenenwnenenenenenesw +nweswseenewewnwewwnwsewswnwswnww +ewseneeneeneneeneneewseneneewnenw +wwnwnwnwnwwwwnwenenwnwseswwnwwww +senenenenwnenenwnwnesenenwwswnwnwnenwnwe +eseseesweseeeeseeesweeesenenwe +neneswnenwenwsenenwsweeneneneeswsenwe +neswswsweswswswnwswswneswswswwswseswnesw +swseseseeswseswnwseseseswseseswnwsesesw +seswswseseseseswneseseswswseseseswseswnesw +ewwwwnwwwwwwwwwwwwswww +seneswwwseseseseseswsenwseneseseswseswse +wsenwsenwwnweneswseewnwnewneseseswsenw +seswswneswswneseswswseswseswseswseswsesw +weseeeenweneeeneeeneeesweeee +neneneneneswneneneenwenene +eewseesesweeeenwweeneswewene +swswswswswwswswwswsweswswnwswswswswswse +wnenwneswnwnewswnwnwsenwewnwneenenwse +neneeneneneneneewnenenesenene +eeeseenwsesweeeeweeeseeenee +wswswseswneswsweneswswneswswseswswsww +nwnwwwnwsewnwwwwnewwwnwwwww +nwnwwnwnenenenwnenesenwnenenwnenenwnwne +wswswswweswnwswswswwswswswwswswwsw +newneneneneseneneneew +eeswsweseseneenenenewseswseenwese +seenwseeswwnwwseenenenwnewnewnew +neeneeneenesesweneeneweenenweeee +swsewwnwswwswswwsenwnewswwwneswe +nenenewneneeneeeneneneneeneneneneswne +seeesewseeeeeneeesenweeeswse +sesenwseswnwswsweseswnwswnweswseswnwswsw +ewwwwwwsewwwwnwwwwwwnewwnw +nwswseswnwwwsesenwenwnewnwnwwneswnwe +swnwswswswswswswswswswswswswsweswswswsw +sesesewnwseswnwseseswseswswswesweswsw +eeseeeenwswsweeeeeeneeeeeee +nenenenenenenewseneeeeseneneenewnenene +eeeeneneeneswneneeewneneseeene +nenesenenenenenewnwnenenenenenenenenene +nwswwnwweswsweswswneneswswswsw +sewnenenenenweenew +weeswenwswsenwsenwnwnweeeswesee +esenwsenenwsesenwneswwseseswsesesesewse +nwwnwnwnwnwnwswenwneswesesenenwnwenwwsw +wwnwnwnwnwnwwwnwnwswnewwwnwwnw +nwswenweswnwnwenwenwsenwnwwnwwnenwnw +eneneweeeneesenenenwenenewneeswne +seeseeesesenesesesesewsenweswseswne +eeneneeswwneneeeneenenenenewnenene +sesenewwwwewwwwwnewswwwnwnwne +senweeswnwseseneswnwsewswesene +sesesewwsenwseneesweseeeneswsesee +wnwnwnwwwwnwwwewswnw +swwwwwewwwwwwswesw +wwnwsewsewwesenwswsenwnewwnwsenww +nwnwenwnwnenwswnenwnwnwnwnwwnwnwsenwnwse +swsewswswseseswswwwswneneewswwswne +eeeeeenweeeswweeeeenwesee +wwnenwwwnewwswwwnwsewswwwsew +nwnwnesewsenwnwenwnwnwnwnwnww +nweswnesenenenesenenewsenewneneneswne +enwseseneenwwwnwnwnewnwsw +wwwenwwswwnwwnwnwnwnwnwnwwsenwwnw +swneswswswswswwswswswswswseswswnewswsw +seseenwneseweeesweneenwseswseee +senwswnwneswwwnwseewwnewnwnwnwee +swswswswnwwwseswneneswswwwswsweswsw +nwnewsenwsewnwnwsenwwwnwnwwwwnw +nwwnwswwswswwwwwnwseeswwseswswww +seweesesenwseseenesesweneewswwse +seweenewswnwwwwwwsenenewewwsew +nwnenenenewnenwneneneneneneneswneenwnene +eeeeeeneswneseeeeeseseeeeeew +seseesesesewseseeseseseewse +nweseneseeeseseseeseseesesweeswsenwsw +seneneswnesenenenenenenenwwnwnwswnenene +swnwseseseneseswswswsweswswswswsesesewsw +wseseeneseseeneewenewneenwnenenene +enwnenesenenewseswnwnwnenenenwnewnene +eneeeeneeewee +swwswwwewesewwnesewswswnw +swwseswseeswnewsewnwnwnwwneeswesw +weeswseeneeenwsewenenwweeewe +nwswnwnenwwnwnenewwewwwwseswwenww +seeseenwnwwewwneswwnewswwwsewsw +wswswswwswswswswswseswswswwwwnwesw +newseneeneswnenwwweneneswseeeeene +seswswseswseeswwswswnwswswswsweswnw +seseseseseseseseseneseseswseseseseneswsese +nenenwnwswneeneneenenwnwnwsew +nwswwnesewswsenwswweenesesew +wswswwenwswwwsenewswswneweseswsw +seswseswswswswswnwseseneseseswsw +wswswswswswswsenweswswswswswneseswsew +eneeenenweneneneneneneswneeeene +nwwwwwwwnewwwwwwwsewwwwswe +eseseseseseseneseseswwnweseseseseese +eweseeenweeeeseseweeese +nwnenwwnwwnwnwswnwsenwnwsenwenwnewsw +nwnenwnenwnenwswnenwswnenwnwnwnenwnenenwe +eeeeeeeeneweeneeeeeeswe +esenwnewnwnwnwwsenwnwnewnewwswswne +eenwseseeeeweseeeeeeeesesese +seseswswseswswswswseseeneseswswnwswsewswsw +nwnwnwneneneneneswenenenenenenwnenene +nwnwwnwnwnwwnwwsenwenwenwnwnwnwneswsw +sewwnwwnesesesewnewewswewnwwe +sweswswwnewswswweewswnwwseswsewnwsw +wsweeeneewenwneswene +eewseseeeesesenweeseseseseseeene +wwsweeswwwnwwwwswwewswwenw +eneeneneeenweeeeeseneeeee +neseneneswwneneeneeswnewneneseenene +eeeeeseseseseeewseswsenwwseeeese +wwswwswnewswwswwswwneswwswwwsw +wswwwswewswwswswwnwwwwswe +eseeweeeeeneeeeneeneeweeee +swswswswswseswnwsweswswswswswswswswswne +sesesenwwseesenwseseseesesesesesesesese +seenwnwwneeenwswwsesweeeenwse +nwwwwwwneseewwwww +eeeeeseenwsesw +nwnenwnwnenwnwnenwnwsenenwnenewnwnwnenw +seseseseseneseeeenwseseeseseeseseew +swswnwsweseneswwswswswwswswnewswwwsw +neneeesewneneeseneeneweeeeswnew +swswswsesesweswweswswswswsweswswwnwsw +nwswseseseswseswenwseswsesw +nwneneswnwnenenesenwnwneswne +sweseseeseseesewseswsesenwseswnwsesw +swnewsenenweneneneneneesewwnwnenenwnwse +nwnwsenwnwwnwnwnwnwwnenwwnweenwnwsw +nwwnwewnwnwnwwwwnwnwwnwnwnwswwnw +swswswewswseswseseswswswswsesewswsenesesw +eeweeeeeeeeseeeeeee +neenwswsenenewneew +seswneseenwswnwseswswswswswe +nwnenwnwsesenwnwwnwnwnenwnwnenenwsenwnw +sesenwsweseeswnwseswsewwseesesesesesw diff --git a/haskellAoC/src/Y2020/Day24.hs b/haskellAoC/src/Y2020/Day24.hs index 0857c71..352d509 100644 --- a/haskellAoC/src/Y2020/Day24.hs +++ b/haskellAoC/src/Y2020/Day24.hs @@ -1,6 +1,52 @@ module Y2020.Day24 (y20day24) where +import Data.List +import qualified Data.Set as S + +type Coords = (Int, Int, Int) + +-- https://www.redblobgames.com/grids/hexagons/ +-- 0 -1 +1 +1 -1 0 +-- -1 0 +1 +1 0 -1 +-- -1 +1 0 0 +1 -1 + +neighbors :: Coords -> [Coords] +neighbors (x, y, z) = [ (x, y - 1, z + 1) -- NW + , (x + 1, y - 1, z) -- NE + , (x - 1, y, z + 1) -- W + , (x + 1, y, z - 1) -- E + , (x - 1, y + 1, z) -- SW + , (x, y + 1, z - 1) ] -- SE + +parseLine :: String -> [Coords] +parseLine "" = [] +parseLine ('n':'w':t) = (0, -1, 1) : parseLine t +parseLine ('n':'e':t) = (1, -1, 0) : parseLine t +parseLine ('s':'w':t) = (-1, 1, 0) : parseLine t +parseLine ('s':'e':t) = (0, 1, -1) : parseLine t +parseLine ('w':t) = (-1, 0, 1) : parseLine t +parseLine ('e':t) = (1, 0, -1) : parseLine t +parseLine str = error ("invalid prefix of string: " ++ str) + +walkPath :: Coords -> [Coords] -> Coords +walkPath (x, y, z) ((x', y', z'):t) = walkPath (x + x', y + y', z + z') t +walkPath i [] = i + +-- A bit slow solution (~1min) but acceptable for now... + +nextDay :: S.Set Coords -> S.Set Coords +nextDay cs = S.filter shouldBeBlack allTiles + where allTiles = S.fromList $ concatMap neighbors cs + countBlackNeighbors c = length $ filter (`elem` cs) $ neighbors c + isBlack c = c `elem` cs + shouldBeBlack c = case (isBlack c, countBlackNeighbors c) of + (True, 1) -> True + (True, 2) -> True + (False, 2) -> True + _ -> False + y20day24 :: [String] -> (String, String) -y20day24 input = (part1, part2) - where part1 = "WIP" - part2 = "WIP" +y20day24 input = (part1, part2) + where part1 = show $ length $ blackTiles + part2 = show $ length $ head $ drop 100 $ iterate nextDay $ S.fromList blackTiles + blackTiles = map head $ filter (odd . length) $ group $ sort $ map (walkPath (0,0,0) . parseLine) input