From e8aad99eca45ae306ecec6c0aab82662c9299561 Mon Sep 17 00:00:00 2001 From: Rokas Puzonas Date: Sun, 22 May 2022 18:39:45 +0000 Subject: [PATCH] feat: solve day 24 --- 24/input.txt | 471 +++++++++++++++++++++++++++++++++++++++++++++++++++ 24/main.py | 91 ++++++++++ 24/test.txt | 20 +++ 3 files changed, 582 insertions(+) create mode 100644 24/input.txt create mode 100644 24/main.py create mode 100644 24/test.txt diff --git a/24/input.txt b/24/input.txt new file mode 100644 index 0000000..85eb71f --- /dev/null +++ b/24/input.txt @@ -0,0 +1,471 @@ +neswsesewswswswswswneeswswswswwwnwsw +nenesenenwneenwnwweneswnenenenwnw +wewnesesweswsenwnwnwsww +eeneswneewneseneeeseeweeesenwe +nwnenenenenenewnwnesenwnwnenenenenenwnese +nwwenwswwnwwwenwnwwnwnwwwnwnwsew +nwnwnenwnwnwnwnwnwswnwnenwswnwnwnenenwne +swsesenweseswseseswswnwswswswseesesesw +nweneneswnenenenenwnenwnwswswnwnwwswsenwne +wnwnwenwnwnwnwnwsewnwnenwnwwwsw +senwewwsewswswnwseswsenwswswsewnenww +nenwnesenwnenwnwnwnenwenwswnwnewnwswnw +neneswwsesenwsesewnenenenenenewenwne +weneneeneneneneeene +ewnwsenwwwwnwnewwneswnwsenwwnwsesww +neenwnwnenenenwwnwnwnenenenenwswnwnenwnwe +wwnwswwwnwwnwwwwwwnewnw +neneneneeneneneneneneswnenenenenenenene +nwwnenwnenwnenenenenesenenwnenenwnwnwne +nenenwsenwsesesenwwnwneenesewnenwnene +nenenewneneeneneneneeseneswnenenenwnene +seseenwewseswsese +seseeseseseseswsesesesesesesesenesesese +sewswswnwswswswswwew +wseswnwnwnwnenewnwnwwnwwnwnwnewnwsw +neeeenenwneeeeeeswneneneeneee +swnwnwnwnwnwnenenwnwewnwnwnenenwnwneenwne +swswsweswseeswseswneswwswseswnwsesww +swnewwnewwweewwwwnwsewwwww +eneswswwewwwswswesewwswswnwwe +eswnweeeeeneeeeeeesweeee +wswswnweswwswnewswseswswswswswswswe +nwewnwwwwnwwwwneswswwwwwnew +nwnwnwnwnwwnwnwwenwnwnwnwsenwnwnwswnwnw +swswnewswswswswwswswwwwweseswswswnww +swneewswswswwswnwnwswwnwwsenwswese +nenenenwswnenenwnenenwnwnwnenenwnenenwne +nwnwnwnwwneswswenwenwenwnwnwnww +neneseswnenwneneneneneenesw +nweswswnwsewswnwwseeseneswnwneene +wwwwswwwnwswwwswsewewwswwsw +wewswwewswswswnweswwswswsweswwsw +sesesesesesewseswsesesesesesenesenesesw +wsweeneeeeneeeene +eseeeeeeeeeeeenweseseseee +wesesewswnesewneeswseewsewnwesesw +seweeneneeweeeneneeeneneeseew +wswseswswwenwswwwswwwsw +eweweeewseneswseenweswnweswene +wwswwwwwwwsewnewswwwwswwww +swseewseneeneswswnewneesewsenwese +sewwwwwwwnwwwnwwww +seseneeseseeenwsesweseeeseswsesesese +neenewnwneneeeneseneneeneseeneneene +nwenwwwswnwwwwwnw +nwseswseseswneseeswneswswneswswsewswse +swswswwswwswwswnewwswwswwseswswe +wnwwnwwnwnwsenwnwnwwnww +swswnwseseseswsesesesewenesewenwsese +eseseesenweeseswseseenwee +nenwseseneeeeeenweseenweweee +swsweseswnwswswswswswswseswswswneseswsw +wnewenesenesweswwnwwseesesesee +wsesesesewseneseseesesesesesesesesesese +seeseeseeeseeswsweesesenwneenwnw +nwwnwnwnwsenwnwwswnwnwsenweswnwnwnwnwnee +esenenenenenenenenenewnewnenenenenene +eswswswswswwswswswwnwswswswswswwswsw +nwnenwnwenwesenwsewsenwwsewswnwsenw +nwnwnwwnwnwnwwnewwwnenwsenwnwwnwwsw +weeseswwenwnwwewwwwnwseenesw +wwswswswwswwwnwwwswsewswwsw +ewsewweswwwewwwwwwnwenwnw +eenwnwnewneweneswseenewseswwsesw +neenenenenenenewwneneseneneneeneene +seswnwswswseswswnwnwseseseeswseswswseswsesw +seseneswseewsesweseseseseseswnwsesesese +nwnwnwnwnwwnwnwnwnwnwenwnwwnwnwwnwnw +seswswsenwwseneseseseswswneseswnesesesesese +eseeseeeeeenweenwesweneenee +nwneswnwnwnwnwnwswneeseswenwswnwnwnww +swsesweswseswswnwswswswswswswnweswswsw +neseseesweseeeseeesewneeewsene +neneswnewneneswseswneswnenw +seweeweswwwnenesewwwnwnewsew +swwweswswswwswswwswswnwswswwswswsw +wneneenenesenewsenenwneswnewneenenw +senwnewnwnwnwnwnwnwwnwswwenwsesenwnwne +wwwwwwnwswsewwwwwwwsw +neneweneeeeenenweneeeeeenwsese +swswsweswswswswswswswswnwseseswswseseswsw +swswswswseswswnwswswseswswnwswneswsee +nwewnenwseneneswsenenenewnenwnesenwnenw +eseswnwswswseneswseseswswseeswswswwsw +seseeeseseseweneeseeeesesesesesese +eewnweswswsweeenenwwnwse +wwswwwswwsewwswnwenwnwswswwwesw +wwewwwwwwwswwwnewwwwww +nwenwwnwnwnwnwneseswnwnwnwnwnwnwnene +nwwnewnwnwwnwnwnwwnwnwsenwwwnwnwww +sewswneswseeswseneseswswswsewneseswnw +newneswswwwwsweswswenesesewneswsw +nwnewwwwwnwswwseswwwwnwwseese +wwwwnewwwwwwenewswwwwwsww +eseeeeeewseneswswseweeneesesee +nwnwnwswnenwnewnwenwnwnwsenwenenwnwwnwne +swseswseswsenesewswseseswswswseswsesese +swswsesesesweswnesesesewsese +eeweeeeseseeesee +swnwnwnwnenwnwnwnwnwnwnwnwnwnwwnwsenenw +nwwnwwwnwswwwwwwnwwewwewww +swnenenenenenenenenenenenenenenenenene +swswneswswswswswseswswnwswswswswswewsw +nwneswnwnenwnwnwnenwnenenenenwnwnenwnwenw +nwnwnwnenwnwnwnenwnwnwnwnenwsenwnwnwnwwnw +wnwnwwnwswwwsenwnwnwnwnwwnewseeww +nwenwnwnwenwnwwnwnwwsenwnwswwwnwnwnw +eeweeseseeeseseeseseseseseese +neeenesewswsweeneenweesenenwswesw +nwwnwnwnwewwnwnwnwwnwwnwnwnwewnwnw +wnwneswwwswwwewwwwswwsewwswne +nwnwsesenenwnenwswseswnenwwnwnenwnwnwnene +nenenwnwnewnwswnwnwnenwneneneeneenww +wwnwswnwnwnwnwnwswswsenwnwenwneesee +nenwnwnwnwnenenwnenwnesenenenenenwnwsenw +swseswswseswseseseswneseswswswseswswswsw +swswsweneswnwwsweswswswswswswswnesw +wnwwwwwwwwswwwewnewwnwwwwse +nwnenenenenenwnwnwwnwenwnwwsenesesenwnw +nenwneeeeeswswneeeeeneeeneswnee +nenwnwnwnwnwnwsenwwnwnwnwwnwnwnwsenesenw +nwnwwnwwswwwnwwnwwnwsewwnwnewnw +wnwwwwenwseswnwswewnww +ewwnwwwswwnwwnww +nwnenwnenenenenenenenewnesenene +sesesesweenwsenwenwsenweesenwenwnw +neneeeeswenwneeswsenwenenenenenenee +seeesenwswwesenwsesenwseseswesenesee +nenwnwnenwswnenwnwsenwnesenwnwnwnwnenenw +eeeeeeeeeeesweenwswne +esesweswnwsenweeesesesenweeesww +eseseeseseseseseweeseeeseesee +swnenenenwnwnesenenewnwneeneneneenenesw +neneneenenenenewneneneseneneneneeewse +wnwnwnwnwenwnwwewswwwwwnwsewwwe +neneeneneneneneneneneneswne +seswswseseeswswnwseseneswswseseseseswsese +wswnwswweneweenwwswswneswswwseswne +eswwwswswneswwswwnwwwenwwwswsewsw +wswswswswenwnwnwswswswswswswseswneeswe +wwwwwswswwwenenwnwnwwnenwsesww +wseweeenwnewneneneneseeneneenwswse +senwwnenwnwnewseswwwsewswnewneene +nenwnwnweneneenesesweneneneneneneswsw +swseswswswswwswswswneseswseswsewswswnesesw +enewnenwnenenenwsenenwnwnwnenenwseswene +wwnewwwswwwwwwwwwswsewwww +wsenwnwnewnwnwnwnwnwnwnwnwnwnwnwwnwnw +wenwnwwwwnwwsenwneswsewwsewnwnw +neenewneneeeneeee +neseswnwswswnwnwseseswseewseseneseswseswsw +nenenewwnenenewneeenenenweswsene +seeeeesesesweeenweesenwseeseswe +swesenweseewseeseeswswesenwenenewne +seseseseseseeeswnwswne +wwwwwwwwwwnwnwsewnwwwwsewe +nenwnwneeswnwnwenwswswnwnwnwswnwnwnwnwnwnw +swswswesewswswseswswswseswswseswswsw +neneenenenenenenenenenewnenenenenenene +wneseenenwnwwswseswswwnewnwwwww +nwnwnwwnwnwweseneswwnwseenwnwnwwnwsw +nwnwsenwnwnenwnwnwnwsenwnwnwnwsenwnwnewnwnw +wsewneeneneneneneneeeneswe +nenwnwnweweswneswne +eseeeeeseeeeeeeeeweewee +newnwswnenwneneneneeneweswnenwnee +wwnwwwwwwnwwnwnwnwsewnwwwww +wwnwwnwwnwswwnwwwwnwwwnweww +neseseseseseswsesesesesesesesesesesesesw +nenwnwnwnwswwnwwnwnwwnwswnwnwnwwnwnwe +neenweeeeeeeeeeneeswseeeswe +swswswswwswswnwswswsesweswswnwswwsw +wnwsenwwnwwnwnwnwnwnwnenwnwnwnwnwnwnw +seswnwswenesesewneswnwsewsesesenenesw +eneewnweseswweeenee +neeneswneswsweswwnenweee +eeseesenewneeeneneswenewne +swnwsewnwnwneweswnenwneneseesenwwsesw +wseewswwnenwswswseesweseneswnwswese +seseseseseswsesesewswseseswseseseseswnene +seseswsesesewnenewseneswnesew +wswseswnwwwwewwwwwswwwwswww +nwnwwnwnwnwnwnwnwnwnwwnwnwnwnwnwenwe +nenwsesenenenenenwnwnwnenwsenenwnwnenwnewne +nwnenenwnenwnwswnewnwnwenenwnwnwnwnene +neseswswnwnwnwneswsweneseseswswnwnewesw +swwsewwwewswswnwwswswwnwsw +neweeswneeeneeneneenwswneseewnw +sewswwweseenwneesewwsewswneee +wwwnwnwswwwwwwnenwnwnwnwnwnwwnw +wwwswwwwwwwwnewwwwneswwsew +nwseswswswneswenesewseeswswswswswnenw +enwswseeeseseswesesesesesenesenwseese +nenenwneswnwnwneneenwnwnweswnenwnwnwnwnw +nwswweneeeeeeeeeeneeeswnese +sweseseseseeeswenwneeeeese +seswswseeswsesewesweswswsesesesenwnwsesw +eenwnewesesewseneeswseewsweenwe +seseswnwwwnewwswweswnwwnewwesw +eeeeeeseseseeseweeeeeeseenew +weseeneswenwewe +swswsesenwseswseseswseneesewswsesesesese +seswseseswswswseseswswswneswswswsesesw +swwswwsewswwswnwwsesweswnwsenwnwnee +eneweeneneneeeeeeee +sesesesenesewsesese +nwnwnenwnewnenwnwnwsenenwnenwnwnwnwnwne +swneswseseswswnwseseseseseswwseswswsese +swswsewnewswwswswswswnenwwwneswsewsw +nwswswsweneseseswseneswseseswnweswew +swseswswswseswswswswseseswseswnesesw +nenwnenenwenwnwnwnwnenenwwwenwnenwne +swwnwnwwwwnwewwnwnwnwnwnwwnw +esenwneswnenwneeswwswenwseneseeenw +eeeswsenwweneenenenesenenewsenenesew +wwswsenwwwnewwewwswwswwwwne +wswesweenewswswnwswsweswnwnwswswe +swswseneswswswswsewswsw +wnenenenewneenesenwwseeneneswne +seeseseseeseenweewseseneseseeseese +seseesesewseseseseseesweseneseesese +swnwnwneseswswswswwe +senwnwnwnwnwnwswnwwnwnenenwwnwnwnwwnww +wwwsenwewwswswwnwsewwewswsww +swwswswswneseseseswsewseswswneswswsesw +seseeeseseseeseseseseseesewesesese +seseeeseweeneseewseeeeeseee +nesenwnwnenenenenwnwnwnwnwnwnenenwsenw +seseseeesesesenweseseeswseseseenese +swswswswswswswseswswswswswswswnenwswswswsw +senwwswwswswwswswwswswswneswsweswsw +swesenwswseswnwnwseseswseswswsweseesesw +wwswswwwswwweswwswswwswswwswsw +swewsweswswewnwwnewewwsewnwswww +wnewseseswswnwswwnwnwwnwswseswseeew +swsenwseseswswseneswswseseseswseseseswsw +swswwwewswswswwwweswwwwesww +swswswneeswnwswswswswswweswswswswswnwsw +enweneeseeneneswswsewneneneeeene +wswwswnwwwewwnwswesewswseenwe +sesesesweeeseeewsenwseseeeseeee +swswswswnwswswswswswswswsweswswseswswswsw +seseewseseeseesesesesesesesesenwsese +eweeseweeneeeeneeeeeeeeese +eeeeeeeeeeeeeeenweeeesw +nwswswswwwwwwwswswweswwwswswsw +weswswnwswweswnwnwneswsenesewwenesw +enweeseeseeneseseseewseeseeesesee +nwnwnwnwnenwwnwnwnwnwsesenwnwwwnwnwe +seseseeneseeseseeseeseeseeeweese +sesesweeswseswsenweswseswnwsenwswswsw +sesweseeeeeeenwseswnewse +swwnwwnewwwwwwnwwwwwnwnwww +swswswneswswswswswswwswwwswwswwesw +wnewneneweneeneseswsenewnesweneene +eseeeseeeseenesw +sesenwseneseseseseswswswsesesewsesesesesw +nwneneneneswnenwnwnenenwneenenwnwnenwnene +neneenewnenenenenenenesweeeeeesee +nenwwswnwenwnwnwsesenenww +eenweswsweeeeneeneeweneene +nenewwneseenwnenwnwsenwnenwwnw +wwwnenewwsenesenwnwsewewwswswswnew +seswwswneswswswwnwswwswwswswswwswwsw +ewneneeeeenweesweswenweneneene +sweswsenwswswwswnewnenewswenweenw +sweweseesesesesewsenwseeweenesenwse +swnwnwwwwwwwne +nwnwswswseswswswswwswswswswswswse +seswseseswswseseseeseswnwswsenweswseneswse +eeswnweseeneeeeseewseseseseesesee +swswswswswswseswwswsweswswneswswwnenw +wnwenwwwwnwwwwwnwwnwwww +swwswwswswswswswwswwnwswswswswswswse +nwwwwwswnwwnwwnwwwwnwnwneww +eeneswenwnwswnwsweswswnwswnenenwnwse +swswseswswseswswswswneswswseneswseswswse +neeeeeeeeeeneneweweeeene +nwnwneenwnwnwnwswneswnenesenwswewnww +weswwswswnesewsewswswwneneseeese +wswswswseswswnesesesw +enwneswwnenwnewnenwnweenwnenwneswnesene +eswwswswswswswwswswswwswswswnweswswsw +eswsenweswswnwswswswswsewswwwnwswswsw +nenwnenenenenwnenenewneenenenenwnenene +wnesesenewwwsewwwnwnwwnenwwswnewsw +wwswswwswwswswwswswwnwswseswswswsw +neneneneneswnenwnenenenwnwswnenwswnenee +sesesesenesesenesewsesenewseswsesesese +wneewseswwwnewswswswswenwnewwww +swwnwswswswswnwswswswwsesweswswwesw +seseswseswseseswseswnweseseseseswseswse +swswseseswswswswsesweswnwseeseswnwsese +neswswnwnwsewnwenwwnwwweenwsewnw +ewneeneneenesweneeeneeenenenene +nwnwwnenwnwwnwnwnwsewnw +eeneneeseenweseswneesweneenenenw +neneneneeneneeneswnwnwneswnenenenenenenwne +nwneneswsewswnwsewwnenwewnw +nenwsenenwnenenenwnesenenenenenenenenwse +seeeesesenwseeesesewsewseeseese +nenenenenenenesesewnenwnenenenwnwnwnenw +neeneneeewneeneneneneeneenenenee +wswnwswseewnwnweneewwneww +seseenwseweswnwneenenenenwnwseeneswse +seswsenwswseeseseswswswseswswseswsesenwsw +neseeseswseswsesewswswnwswwseswnenwsesw +nwnenwswnenenwnwnwnwnwsenwnw +nwnwwswnwwenwnwwnewnwnwnwwnwnwsenwnw +seseeswseenwnwseneseeeesesewswsesese +neneswnwenwnenenenenenenwnenwnwnwnwnwnesw +swswswseeswneswswswswswsweswwneswswswnw +swseswswswswswswneeswwswwswswswseswsesw +sesesesewnwseseseseseseseeseseseseswsese +neenenwwenwswnwneswsweenwnw +wwnwwwnwwnwwnwnwnwseenwwnwnwnwnwnw +swneswsesweswswswswswswswswwwswwsw +esweeneeneeeneenesweeee +eeeeeenweesweeeeeeweew +seseswswewseswwseeswenwnwswseswswse +nenesesesweswnenwewseewnwseswewne +eseweseseseseeesesesesesesesesesee +sesenwswseeswswsesesesenwseseseeneseese +swnwswswnwnwsenwneenwwnwnenwwneenwe +nwwwwnwnwnwnwnwwnwnwnwswewwwnwwnw +seseswsewesesewseseseseseseeseswsesese +senwswwnwnenweesewswenenwneneswswwne +eseweneswsesewwnwwseseswswnesenesew +swwswswswswseswswswswsweswswsw +eesenweweseseeeeeeeseeseseese +seeeeneenewweeene +nenwswswseeewsewwnwwnwwwswwsenw +swswswswwwnewwswnwwnewwewewsww +sewwswswneeswwnwswwwswnewswwswswsw +swwewwnwswswswnwnwweswneeeeww +swswwswswseeseswneeweswswnwnwswene +newwnwseesewsesenwsewseewesenwene +wswwwnwwsenwwnewwnwsewwnwwne +swswseseswnweswnwneeswneswsesesenwwswnesw +nwnwnwnwwnwnwnwsenwnwwnwsenwnwnwwnenwnw +nwswwenwswsweswwswswwseswswswnwsesw +nwewwwnwwsenwwwnwesw +wnwnwnwnwnwwnwsenwnwneswnwenwwsenwnw +swnenwnwwnwnenwnenenwnenwnwenwnwenwnwsw +swswnwswsweswwseswnwwswswnwsenwswew +eeeeneeswseeeeeeeeeenenwene +neeeneneneeeneeeeneswneneenenee +nwnwnwwnwnwneenwnwnwnwsenenwnwnwnwnwnw +eeeseeeswseenwenenwseeseeeesw +neeneneeesenweeeene +neneenenenesenenenenenenenenenenenenwne +senwwswswwswswsewneseeseswneswswswswene +neeeeneeeseseeeeseeseeseesesww +eeeneneenewneneseneneneeeeneee +swnwwnwsenenwnenwnwsenwnwnenewnwenwne +neneneneneenenenenwnenenwwsenenenenenenw +wwnewwwseswwnewww +nwenesenwnwnwnwnew +swseseswseswseswswswenwswswseswseneswse +senwswsweseneeeeneeneeswnesewswwnw +eenenwswswnwswewwneenwwwwsewsenw +seeeenenwneneeneeeneeswe +newenweeneswneneswne +swswswseswswsenewwnwwwnwnesweswwww +nwneneeeneswneneneneeneeneeneeene +eeeeeeesweeeeewnweseeenw +swseswswswswswsewneswnwswswsesesesesesese +nwnwsenenenwswnwnenenwwsenenwnenewseswse +wsewswwswwwswwnewseenenenewwwse +nwnewnenenenenenwnenenenenenenwnenwsenw +wnwwwsenewwnwwwwwwwwwwww +nenwnenewseeseeswswenwwsesewsw +enwnenesweneneneneswenenwswneneeenenene +seeeeeenwnweeseeseeswseseeeee +wwnwwnwswwwwnwwnenesww +seswswswneseseseseswseseseswsesesesewswse +wnenwseseeseswswwseseswswswswseswswseswsw +wnwnwnwneenesenwnwnwnwnwnwnw +nenenenwneeneneneneneneswnenwnenenenenwne +sewwswswswwswswwswwswnwseswwswneswsw +eeeneeeswsenwwseseeeeeeeseese +swswswswswswneswswswswswwswswswsw +newswwswwnenwsewwwwwwwwwswsew +sesesesenwseseseseseseeseseswsenwsesese +swswsesweswwseswwswnwswswswswswwnwnw +nenenwneneswnenwsenewnesesewnwnewnee +sesesesesewneseseseneseseseseseseswsesee +nenenenenwwnesesenenenesesenewneenwene +wnwwwwsewnwswneenwwenwswwwwww +swseswswnwswswseswswswnwswswseseeswswswswsw +wnwwnwwnwwwnewwwnwwswwwwwsewe +neeeeneneenenenesewneneeneeenene +seneenweeneeeeeneenweeeeseee +enewnenwsenenwnenenenenesenwnenenwnenenw +neeneneswneneweenwneneeneeenenee +wwwswwswsweswneswswwswsewswswww +swwwswswseswwwswswwsenenwswwwwnw +neenwneneneeseswswewnwswnenwnenenwnenwne +seeseewwweeseweseeseeesesenwe +swneneneneneneneneneneneeneneneneenene +wwswseesweswneenenwnwseesewswnwene +seseseswseswswseswseneseseswswseswsesesew +neeneneseenewenenwswnweeneeswneswne +seswwneswsewnwnewsenwswswenwww +wwsewwwwwwwnewswwewwwwwww +nenenenwnenenenenenwnesenenenenenenenene +eseswswswwnwswneswneseeswswswswswswswww +neeesweenewenenweneneewnenenenene +nwswwwnwwewswwswwwswseswwwwswswsw +wwenwnwewswwwnenwwwnewnwswww +nwneenenwswwwsewewwsesewwsewswnw +seswseneswseeenenwseeseswneswsesesesenw +eeseswweseeseseesesesesenw +neseseseewwwneseseenwseseeseseeee +seswnwsweseseeswseseswnwnwsesesenweseswe +neseseswswswswsesesw +nenenenewnenwnwnesenenenenwnenwwneneenene +sweseseeswsesenweseesesewsesenwenesee +senenenenwwnwwnesenenesenenwnwnwnewnwe +swwnwseneswseseseneseseneseswnwnesewwswse +wnwnwnewnwnwwnwnwnwwsenwswwnwnenwwww +wnewwwnwwwwwsewwwwwwwnwwnw +eeesenwenesenweenwesweneeeeee +wsesenewnenenenenw +eeeeeseneeweneeeeeeeeee +eneseneweneneeeeswneeneeneneww +nwnwnwnwnwnwnwenwnwnwwewnwnw +seseseswswseseseswsesesewseseseseseswne +swwwsweswswswswwswswswswswneww +seeenweseweseesesweeeeeenwe +nweneneeneeeeeeeeneseeeneene +wswnewwwwwwwwswswwwswewwww +swswswseswswswwseseswneswseswseseswswsesw +swswswswseswswswsenwnweswswswseswsewesw +nwswnwwnwswnwnwnenwnwenenwsenwne +nwwnwesenwnwnwnenwwwnwnwewnwnwnwnwswnw +wswswswnwwwwwneswwswwsewwswwsw +nenewneneneeneewnenenenenenenwnenenene +nwseseswswseseseeeseeseneseseseseese +eswseeseseeewnwseeseseeeseseesese +nenwnwnwneneeneneneneneneneneneneneswnw +nwnenwneneneneenwnenenenenenenwnewnene +nwneneenenenwseeseneeneeenenenewnene +wneseswsweswswsenwswswswsweeswnwswnw +swneeswsewswswenweneswnwnesewew +nwnwnwnwnwnenwnwnwnwsenwsenwwnwnwnwnwnwne +neswneswnewneswseseswnwnwswnewseswsee +eenenwseweeneeneneeweneweeene +nenwwwnwnwneenenenwswnwnwswseenwswnwenw +sweswnwswsweeswwswnenw +wsewsewsenwneswnwnwwewswnwweenw +nenwnenwswnwnenwnwnenenwnenwnenwnenenene +swwneswwewwswneswwwswswwswwwse +swsewswwsewwswneswswwseneswswswnesw +seenenwsweesenwseswnweseeeeenwe +swwswwswswswweswnwsweswswswswnenwwwsw +wnwnwwswenwweswenwwwwwnwnwswnw +swswwswwwswwwwsewwwwwswswwnesw +neswswswswswswswwswswswswwswswswwwe +wenwenwwseswwwnewnwseseswwneswneww +nwswswswneswswwwsewwswswswswswsesww diff --git a/24/main.py b/24/main.py new file mode 100644 index 0000000..292e9d3 --- /dev/null +++ b/24/main.py @@ -0,0 +1,91 @@ +from typing import Iterable + +STEP_LOOKUP = { + "e": ( 1, 0), + "w": (-1, 0), + "ne": ( 1, 1), + "sw": (-1, -1), + "nw": ( 0, 1), + "se": ( 0, -1), +} + +def read_input(filename: str) -> list[list[str]]: + tiles = [] + with open(filename, "r") as f: + for line in f.readlines(): + line = line.strip() + steps = [] + i = 0 + while i < len(line): + if line[i] == "e" or line[i] == "w": + steps.append(line[i]) + else: + steps.append(line[i:i+2]) + i += 1 + i += 1 + tiles.append(steps) + return tiles + +def get_black_tiles(tiles: list[list[str]]) -> set[tuple[int, int]]: + black_tiles = set() + + for steps in tiles: + x = 0 + y = 0 + for step in steps: + dx, dy = STEP_LOOKUP[step] + x += dx + y += dy + if (x, y) in black_tiles: + black_tiles.remove((x, y)) + else: + black_tiles.add((x, y)) + + return black_tiles + +def part1(tiles: list[list[str]]) -> int: + return len(get_black_tiles(tiles)) + +def get_neighbors(tile: tuple[int, int]) -> Iterable[tuple[int, int]]: + for offset in STEP_LOOKUP.values(): + neighbor = (tile[0]+offset[0], tile[1]+offset[1]) + yield neighbor + +def count_neighbors(tiles: set[tuple[int, int]], tile: tuple[int, int]) -> int: + count = 0 + for neighbor in get_neighbors(tile): + if neighbor in tiles: + count += 1 + return count + +def simulate(black_tiles: set[tuple[int, int]]) -> set[tuple[int, int]]: + white_tiles = set() + for tile in black_tiles: + for neighbor in get_neighbors(tile): + if neighbor not in black_tiles: + white_tiles.add(neighbor) + + new_black_tiles = set() + # Any black tile with zero or more than 2 black tiles immediately adjacent to it is flipped to white. + for black_tile in black_tiles: + black_count = count_neighbors(black_tiles, black_tile) + if black_count == 1 or black_count == 2: + new_black_tiles.add(black_tile) + + # Any white tile with exactly 2 black tiles immediately adjacent to it is flipped to black. + for white_tile in white_tiles: + if count_neighbors(black_tiles, white_tile) == 2: + new_black_tiles.add(white_tile) + + return new_black_tiles + +def part2(tiles: list[list[str]]) -> int: + black_tiles = get_black_tiles(tiles) + for _ in range(100): + black_tiles = simulate(black_tiles) + return len(black_tiles) + +if __name__ == "__main__": + tiles = read_input("input.txt") + print("part1: ", part1(tiles)) + print("part2: ", part2(tiles)) diff --git a/24/test.txt b/24/test.txt new file mode 100644 index 0000000..3dc2f67 --- /dev/null +++ b/24/test.txt @@ -0,0 +1,20 @@ +sesenwnenenewseeswwswswwnenewsewsw +neeenesenwnwwswnenewnwwsewnenwseswesw +seswneswswsenwwnwse +nwnwneseeswswnenewneswwnewseswneseene +swweswneswnenwsewnwneneseenw +eesenwseswswnenwswnwnwsewwnwsene +sewnenenenesenwsewnenwwwse +wenwwweseeeweswwwnwwe +wsweesenenewnwwnwsenewsenwwsesesenwne +neeswseenwwswnwswswnw +nenwswwsewswnenenewsenwsenwnesesenew +enewnwewneswsewnwswenweswnenwsenwsw +sweneswneswneneenwnewenewwneswswnese +swwesenesewenwneswnwwneseswwne +enesenwswwswneneswsenwnewswseenwsese +wnwnesenesenenwwnenwsewesewsesesew +nenewswnwewswnenesenwnesewesw +eneswnwswnwsenenwnwnwwseeswneewsenese +neswnwewnwnwseenwseesewsenwsweewe +wseweeenwnesenwwwswnew