Day 24!
This commit is contained in:
406
inputs/day24.txt
Normal file
406
inputs/day24.txt
Normal file
@@ -0,0 +1,406 @@
|
|||||||
|
neneeenenesweneswneesewenenwneew
|
||||||
|
eswswenweeseneseswwsenewsenw
|
||||||
|
seeweswwneswnwwwenwwwwwnenwwsesw
|
||||||
|
swsweseseseswswsenwswseswswsese
|
||||||
|
eseseseswsenweseseneseswnwneeewww
|
||||||
|
sweeeeeenweseenesweee
|
||||||
|
nwnwsewenwwnwnwsenwwnwseswnwnw
|
||||||
|
swswswwwswweswswswswswenenesesewwwe
|
||||||
|
swnwenenesenwsewswswseeeswnwwnewwsese
|
||||||
|
senwweewnwweswnenwwsw
|
||||||
|
ewneswswsweenwwnwsenwswnewsenwnwsw
|
||||||
|
nenenwwneenwnwnwwnesewsenenwnwnenwnw
|
||||||
|
nwnwwsenwwnwnwnwnwwnwnwewwnw
|
||||||
|
wnwnwnwnwseswwnwnwesewsenwnwnwnwnenew
|
||||||
|
seswewwneweswnwnwswwsw
|
||||||
|
neswesenenenewwswnenwnenenenwnenenenese
|
||||||
|
nwwswsenwnenwnesenwnwsenwnwnwwnwsenenwse
|
||||||
|
senwswwswwnweswswneswswwswnweswseswew
|
||||||
|
neeeeswnweswseeeeeneeeeenwwnene
|
||||||
|
nwnewnwnwnwswnewwsewnwwseenenwnww
|
||||||
|
eeseeeeeswneenwewee
|
||||||
|
neseseseeenwwseseeseneswnenwsewswse
|
||||||
|
wswswnwnwwswswneswwweeswswswwww
|
||||||
|
swnwnwneswswseswseswswswswswnwseswsesenesw
|
||||||
|
swneesenwnwnwwnwnwnenwnwnwnwnewnwsese
|
||||||
|
wswswswewnewnewsenewnwswseswswwse
|
||||||
|
swenwnwnwnenwnenwnwswnenenwswwnenwsenw
|
||||||
|
ewnenwnwweenwneesewnwwwwnwswse
|
||||||
|
eeewnweneneeesweesweeeneeee
|
||||||
|
nenwnwnwnwswwnwsewnwswswenwweswenw
|
||||||
|
senenenenenenwneneewnenenene
|
||||||
|
neneeneswnesewneneneeneneeenenenwe
|
||||||
|
nwswenwseswnwswenwnwnewnwneww
|
||||||
|
wnewwwweswwsww
|
||||||
|
seseswsewesesenesesewseewseseenenwe
|
||||||
|
neneseswnesenewwenenwneneneneneenew
|
||||||
|
swswswswwsweswseswsewwneswswswswneswswsw
|
||||||
|
sesenesesesenwsesesesenwsewnw
|
||||||
|
nenenenenenewnwswnwnenwsenesenwneswwne
|
||||||
|
swwnewweewwwwnwswnewwweswew
|
||||||
|
swnwwswesenewwwswwswwweseswswnesw
|
||||||
|
weeseseseneseseewwseseseseseseesese
|
||||||
|
nwenenenwwnenenenenwneneneseswnenwenesw
|
||||||
|
nwsewswswwswsweswnwwwnwswswsew
|
||||||
|
nwewnwwwewnwwnwnwwnwswwnwwsewnw
|
||||||
|
eesesesesesesewseseewneseesesesesenw
|
||||||
|
nwwenwweswnwswenwnw
|
||||||
|
sewseswswneneswnwenwneeswwnwwesenw
|
||||||
|
eseswwnwnwwenewneswnwsweenwseswne
|
||||||
|
wsewwswnwnwewnewswwwwswseswnew
|
||||||
|
eswnenwnwnenwswnenwnwnwnenwnwnwnenwsewne
|
||||||
|
neneewswnenenenenene
|
||||||
|
nwseeseseesesesesesesese
|
||||||
|
eenweneeeswswseeseeneesese
|
||||||
|
sewneeneneswseeewnwswsenewswenwwenw
|
||||||
|
nwwwweswnenwsenwwswnwwnwwwnwwnew
|
||||||
|
nwewwneswnwwwnwswswsesweswswwseww
|
||||||
|
neseswseweseeswsenwsesesesesw
|
||||||
|
nwswswseswswseeswswseswnewneseswswwsw
|
||||||
|
eweseeswseeeeseneenwenweeee
|
||||||
|
nesewwwwneeseweswwseneeseseswseswsw
|
||||||
|
nwswnwnewnewneeenwneeswwnwse
|
||||||
|
swwnwsesewneneeneenwseswseswnww
|
||||||
|
nwnwnwnwsenwnwnwnwnwnwnwnw
|
||||||
|
wwnewnwsesewwwwwwnwseewsenenew
|
||||||
|
swswswswenwswseswsweeswnwswswswswswswswnw
|
||||||
|
nwnwseeswnwnwswnenwwnwnewnwnwwnwnw
|
||||||
|
wnenenesesenwnwwnwsenenesewnewnenee
|
||||||
|
senwswnwnwwenenwnenwnenesewswenewnene
|
||||||
|
neseseeseneswswswswswwwswswnwswwsenesw
|
||||||
|
neswwsesenwnwnwneswseseseseswnesenwsese
|
||||||
|
eeweesenesweenweeneenwneeswse
|
||||||
|
wwnewswsenwnwsesenwswseneeswswseswnese
|
||||||
|
wnwsewnwnwnenwnwnwnwwnwnwwww
|
||||||
|
wwswswewwwwwwswwwwnewnwnenw
|
||||||
|
eeneseswswnewneneneenenenenenenenew
|
||||||
|
wswwnwswwswneneneswnwnwnwswseneneswsenene
|
||||||
|
nwswswewswsewswsewswsenweswswneswnwsw
|
||||||
|
wwwwesewnwnewwwnewwwwsese
|
||||||
|
nwnesenwnwnwnwswswnwwswwnwnwwwwneeenw
|
||||||
|
swseseswenwswswnwswwnenesenesesesesesese
|
||||||
|
nesewswswswsewswswnwswwswwswsw
|
||||||
|
wnwwwnwnwnwnwsewsenwsewwwwwww
|
||||||
|
wwwwwwwwswwswwwewwnw
|
||||||
|
swseseseseeswsesesenwseseswseswwsenwse
|
||||||
|
sweeeseeswnwenwneeenwneswenwneee
|
||||||
|
nwswseswswswswwsweswnesesweswswswseswse
|
||||||
|
nwnwenwnwnwnwnwswnwwnwnwwnenw
|
||||||
|
wseewnwnwnwenewnenenesenewnenwnenwne
|
||||||
|
nwsweswswswswswswswswsw
|
||||||
|
swswwswwswswswswnenewenwewweswnw
|
||||||
|
nwseeswnwnwseseseswneseswseseseenewsw
|
||||||
|
wseswseseesenweeeseeeewnwenene
|
||||||
|
newnenenwswnwnenenwneneseneneneenenesenw
|
||||||
|
wnwnwswseenwnwnwnwenwwwnwnenwnwswne
|
||||||
|
esesesesewneseswswsewswseswswneswsesesw
|
||||||
|
wsewwwnewswwnenenwnwwnwwnwnwwwsew
|
||||||
|
wsenwenwnwnwewwsesenwwwwnwnwnwnew
|
||||||
|
nwnwnenesenenenwnenewnenenwneneswswnene
|
||||||
|
eseneneewneneneeneeneneee
|
||||||
|
nenenenwnwseswswnwwnwnwwesenwsenewswne
|
||||||
|
neenwnwnenenwnwnwwnwnenwnwnwwnwswsenw
|
||||||
|
swwwswwswswwnwwwnenwseswswwseswsenw
|
||||||
|
nwsewneswnwesweeswnwwwnweswnwne
|
||||||
|
neswsewswseswseswswswneswseswneseseswsww
|
||||||
|
wsewwwnwnenwnwewwseenwwwwswnw
|
||||||
|
neseseswseswwswswswnenwsesewswswswswsw
|
||||||
|
swwsweswneseswswwswswswswweswwsw
|
||||||
|
nenwneneswneeneenene
|
||||||
|
eneweneseneeneeswswswenenesenenew
|
||||||
|
swseeseswswesenwsesenwswnwnwseeesenwswsw
|
||||||
|
nenenwnenwwwnenenweneneneseneswnenenene
|
||||||
|
neneenenwswswseswwwnweswnenesesewnewse
|
||||||
|
neneseneneseneenenenewswneeenenewnene
|
||||||
|
swsweesenesenenenwnwnwswsweneseenww
|
||||||
|
swnewwnwsewseswewsewsesenwneewnww
|
||||||
|
enenewnenenenwnenenenw
|
||||||
|
seseesesewwseseseseseswswseesesenese
|
||||||
|
eeenwneeeewneneeeeewswneneee
|
||||||
|
eswnwenweesenwseeswsweenwsenwnwesw
|
||||||
|
eesweeeneneeneeeeewnweeewe
|
||||||
|
seswswseseswswswsene
|
||||||
|
newswnewswwwneswwwse
|
||||||
|
neeswnenwewnwnesewsweneeswnwenesww
|
||||||
|
eswwwwwwswnesewwwnewwnwwww
|
||||||
|
ewsesenwseswsesenwsesesewesenwsenenese
|
||||||
|
nenwnewswneneneneeeneneseneneneenee
|
||||||
|
wwseseeeenwnwweseneewnweeeewsw
|
||||||
|
nwneswnwnwnwwwnwseenwnwnwenenwnw
|
||||||
|
swswswswswneswenwwweswswsw
|
||||||
|
swenwwwnwnewswnenwneswnwesweswwe
|
||||||
|
neswseenwseseeenwsesesew
|
||||||
|
seseeesesenwnwseeseseseswnesese
|
||||||
|
sweeeseseenwseeweesee
|
||||||
|
swneswsweswnewwswseswswsw
|
||||||
|
nwwwewsewwwwwwwwewswswnewsw
|
||||||
|
nenenewneswsenenenenesenenenenenenenwneenw
|
||||||
|
sewwwnesewswwnwwwwswewswwswew
|
||||||
|
swswseswnwnwswswswswswswnwseswenwseswswsw
|
||||||
|
nwnwnwnwnwnwnwnwnenwnwsenw
|
||||||
|
nenwwewnwwsewnewwnwsewwwewseswe
|
||||||
|
seseseswweewnwneneseseseesewsesesw
|
||||||
|
swswesenewswswswwewswsesweswsw
|
||||||
|
seseneneswwsewneeenwenenwseenwsee
|
||||||
|
nenwenwwneewnwneswnwnenwseswnwenwnwnw
|
||||||
|
sweswswswseswswswseseswseswwnesesesenw
|
||||||
|
nweeesweeeeneseeseeenwenwwe
|
||||||
|
sweewneneeeseeewswneeenwneenene
|
||||||
|
swsewseseenwsenesewseseseswswseswnese
|
||||||
|
wwwswseseswwnwwnwnenenwwswnwsenesene
|
||||||
|
seswswswseeseswseseseswnwsenwseswswsesene
|
||||||
|
nenwesenwswneneseeewsesesweeseeswse
|
||||||
|
nwseswswnwseeswnwswsenwnwnenwnenwnwnenwnw
|
||||||
|
neswnenwweesenwneswwneneswnwenenesw
|
||||||
|
nwneswnesesenwswenwsesewewsweewsw
|
||||||
|
neseeenenenewnenenweswew
|
||||||
|
eenweesweewneneseneeswee
|
||||||
|
weesenwsweenenenwswenenwneswenee
|
||||||
|
nwswswsweseswwsweswswswswnwswswswswsw
|
||||||
|
esweweseeeeseneeenweeeeee
|
||||||
|
swneswswswwswnenwewswenwswswwnew
|
||||||
|
eesweswnwseeeeeeeeneseeenwsee
|
||||||
|
senwwswnwnwnwnwnwnenwnwnwnwnwwnenenwnese
|
||||||
|
swwseeswswnwnenesewnenwsenweeeene
|
||||||
|
enenwnesenenenenwnenewneneneewswswwne
|
||||||
|
nwwneseseeseeseeseseeseseeseswnwsese
|
||||||
|
sewwswsewnwwswnwnwnewenweneswesw
|
||||||
|
eneeneeneeneewneeeeeeenwsesw
|
||||||
|
wwenwwnesenwnwnwwww
|
||||||
|
nwneneswnesenenenenwnwnenenenwnene
|
||||||
|
sweneseseswewnwswwneneneneseneesenwnw
|
||||||
|
nwewenwnwwwnwnenwsesenwnenesenwnwwwnw
|
||||||
|
nwenwnwswsenwnwnwnenwnwnwnwnwwesenenw
|
||||||
|
swswwnewweweswswnwswsenesewwwnww
|
||||||
|
nenewneswnenenweenenenwswsenene
|
||||||
|
swswswwswswswswswswswswswne
|
||||||
|
eeswswenwswneenwenweseenwnweeese
|
||||||
|
swnwnwnwwwsewnwnenwwwnww
|
||||||
|
wswwwenenwwwweswseswnwswweswsw
|
||||||
|
enewneneweseeswswenewnenwwnesene
|
||||||
|
swsenesweswswswswwswswswseseseswwsw
|
||||||
|
nwwseswnwsenwsenenwwnwnwneewwwwww
|
||||||
|
wwsesesenwnwnenesenwenenwswneneenesw
|
||||||
|
seseneweseeswseseneeseseesenwesese
|
||||||
|
nwnwwswwwweenwwnwwswsewwneww
|
||||||
|
eneneneeneswnenweneswenewneeseenenew
|
||||||
|
eseewneesenewesenwsewewwwsee
|
||||||
|
nwnwnwenenenwenwnwnwsenwnwnwswnewnenwne
|
||||||
|
neseeeesewneseseweeseseswseseesese
|
||||||
|
newwnwswwewneswseewsesweswneswwse
|
||||||
|
seseseseseeseenwseeenwsesesesese
|
||||||
|
eseswnesewseswswswsenwwswseswneswsee
|
||||||
|
eeseseseneeeeeseeeseeew
|
||||||
|
nwesweeneenwnwseneeeneeeneneneswse
|
||||||
|
swswswswseseswnwneswswseswsewse
|
||||||
|
senwnweswwnwwnwweseenwswsenwnwwse
|
||||||
|
wneneneenenesenewnwswswenwnene
|
||||||
|
eswseswneseseneseseeeeeewsenenwnew
|
||||||
|
sewseeeeenwseese
|
||||||
|
sesenwnwseseseswseseswswswseesenesesesenwse
|
||||||
|
nwwneewseswneeeneneneseenenwewneese
|
||||||
|
wwwswwnewwneswwwwwsewwwsw
|
||||||
|
seswwwwneswneswwneswswswswswseww
|
||||||
|
eewneenwsweseseweeeeneneneneesw
|
||||||
|
swswsewswswwswswnewwswsww
|
||||||
|
nwnwwswnenwwnwnenwswnwnwwsenwseeswwnw
|
||||||
|
swswsenwnewseeswseseneneswsewnwsesesenwsw
|
||||||
|
senwnwnwnwswneswnwenwnwwnesweswswnwnenw
|
||||||
|
neenenewswnwswnwsewwewswsenwnwwsw
|
||||||
|
senwnewnewnwwnwwnwseseswwnw
|
||||||
|
seeseseeneswneeswnenwwswswwswnwswwe
|
||||||
|
seswenweeneeneneneeneneneee
|
||||||
|
nwwnwwenwwwwwwwnw
|
||||||
|
swswswswwswwswwswsenenwsewnewneswswne
|
||||||
|
newswnwnwswnwenwwnenwnwnwwwwsewnwnw
|
||||||
|
eneewenweeeweeseenwseneeeswse
|
||||||
|
seseseswenwseseweseseenwnee
|
||||||
|
wnwwnenwswnwnwweeeswsw
|
||||||
|
senesesenwswseseseenwseswseswswseswsesw
|
||||||
|
seseseseseseseseseseseseenwsese
|
||||||
|
seenwnwnwswsewweeweseeneesewswene
|
||||||
|
wwwseswsesenwnwnenenwse
|
||||||
|
nwwewnwnwwneswnwwnwnwnwwnwewswne
|
||||||
|
neewneneseneneswnene
|
||||||
|
wswwswnwwwswwwewswswsww
|
||||||
|
wswwneswwswnwwnwnewseswsewswenwsw
|
||||||
|
ewnwwwwswwnwesweswswwsw
|
||||||
|
wswnwnwwnenwnewwsesewwseenewswenew
|
||||||
|
wswwnenwwswnenenwnenenenenweswseseswe
|
||||||
|
nesesenwswsweeswewwswneeneeeee
|
||||||
|
nwswwwnewwwwwwneewnwsewsewsew
|
||||||
|
nwwweswwswwwnwneswnwswenwnwneew
|
||||||
|
nwnwswnwswenenenwnwwnwnenwnenenweew
|
||||||
|
neswnwneseeneneenewswwnwnweseneene
|
||||||
|
nwswswwwwseeswnwswwsweswwnwseswww
|
||||||
|
neneseneswsesewenwseswneneswnenwwenew
|
||||||
|
neneneeneneneseneeneseneww
|
||||||
|
sweenenwenweeenesweeeenwesee
|
||||||
|
seseseseseseneesesesesesesesew
|
||||||
|
senesweewneeswenwseswseseeeesee
|
||||||
|
nesesenwwswnwnwwnewsenenwswnwnenwsee
|
||||||
|
neseewnwenenwwnewnenwnwsenwnwswswnwnw
|
||||||
|
eswnenenwswnewsweseswseewsesenwsee
|
||||||
|
enweeswenwewsweeeneenweeseesee
|
||||||
|
senwswswwswwswswwswswswswseswswswneswne
|
||||||
|
sweswwnwewseneeeenenewenweee
|
||||||
|
newnenwnwswwseseseesenwsese
|
||||||
|
enweeswseenwneeenenesweeneswenewsw
|
||||||
|
nwnwnwnwnwswenwnwnwnwnwnweswnwnwnwnwnw
|
||||||
|
nenenenweneswnesenwneswneneneneeneese
|
||||||
|
seseeenwswnweeeewswseeeswwnwsenw
|
||||||
|
esenwsewseseesewneseeseseseeeenese
|
||||||
|
seewnwsesesenwesesesesewneeeseee
|
||||||
|
eneseneewneneseweeneneeeneeee
|
||||||
|
nwwnwenwswsenwnwnwnwnwwnwswwnwnwnwnew
|
||||||
|
wnewwwwwwnwwwswnwww
|
||||||
|
wnwenwsenwswnwnwnwwnenwnwnw
|
||||||
|
eeneneswnwwneneswnwneeeneneneneewne
|
||||||
|
wsewnwwwwewwwwwwwsenwwnwwe
|
||||||
|
wwwseeseswsewsewewneswnwsewnenenw
|
||||||
|
seseneswsewneswswseswseswswswseneswsesesw
|
||||||
|
nwnwnwsenenweeneneeneswswneswneseeesw
|
||||||
|
eswseswwnwswseswswswswneenwswseswsese
|
||||||
|
eenewseneeeseneneeswwneeeenenee
|
||||||
|
nweeeeseeeseeseeswenwnenweswee
|
||||||
|
swswwneneneswenenwsenenenenenwnenwnwe
|
||||||
|
nwenwnwnwseswnwnwnwnwnwnwsenwnwnwnwnwnwnw
|
||||||
|
eswnwnweswsweseseswwswswnwseneswnenwswe
|
||||||
|
wnesewneswwneswwwwnwwwwsese
|
||||||
|
nwnenwnenenenenenenwneswnenwnenw
|
||||||
|
neswenenwswneneswnwee
|
||||||
|
wwnwwwwewwnwswnesewww
|
||||||
|
esenwnwswenenwnewswneswwenwswwnwswnww
|
||||||
|
swswwswnenwwswswnwseswswswwswswewsesw
|
||||||
|
nenwsenewnwswswneeswnwnenwnwnweenwnwne
|
||||||
|
neswwnwwwnwwwnenenwnwswwnwsenwnww
|
||||||
|
neneeneswenenenenenenee
|
||||||
|
swseweseneeeswwnenwswnwnwe
|
||||||
|
eewswweneweeneneeenenenenenenene
|
||||||
|
nwnwneneneneseneseswnenwnenwnwnenwnenene
|
||||||
|
enwnwenenwswswswnwsenwswswseswseenwe
|
||||||
|
eneneneneeeswneneenenenene
|
||||||
|
enwnenwwwsenwwwswneswnwwenwewww
|
||||||
|
neneneswnenewneneneeenwnenwnesewnene
|
||||||
|
seswsenwsesesenwewseswseseseseswsesenenwse
|
||||||
|
neneenewsesewneweeewseseenwneeene
|
||||||
|
nwwswwwsesenwwwsenewwnwnew
|
||||||
|
seseenesesesesesesesewesesee
|
||||||
|
nwwnwswswswseswwswseneswswswswswswswswe
|
||||||
|
wswwnwnwnwnwnwnwwnwnenwnwenwnwenwnw
|
||||||
|
seseswseneeswneswnewwswwwnwneesenene
|
||||||
|
nenwnwnwnenwnwnwnenwsenwnwnwnw
|
||||||
|
eswwwwwsewwnewswswwwswswneswww
|
||||||
|
esenwnwnweeewswneneswnwswnwswnenwnwnene
|
||||||
|
nenweseenwneenenwseeeneseene
|
||||||
|
newnwwsenwnwenwwwnwsewswnwnwenwww
|
||||||
|
newenenenenenenwenwswswswsene
|
||||||
|
nwsweswnwwnwewewwwenwwwwwnwwnw
|
||||||
|
sewnwsewwnwsenenwwww
|
||||||
|
swswnenwnwnewneswnewnweswsweswenwsenwse
|
||||||
|
wsweseeswnwseenewseneenee
|
||||||
|
eeeeeseeswnweeeenwseseewsese
|
||||||
|
sesesesenewsesesewesesesenwseseseene
|
||||||
|
sesewswseswsewseseseswweseeseseenese
|
||||||
|
esenwswwseseseseesesesenweseseseswe
|
||||||
|
nwnenenwnenwnwnenenesw
|
||||||
|
nwnenweneenwnenwnwnwswnenwneneswnenwnw
|
||||||
|
sewswswswswswnwswneeseswswswsw
|
||||||
|
swwswswswwwwneswneswwswswswnweswsw
|
||||||
|
neseswswesesewswwswswseswswnwseswnenese
|
||||||
|
nwswnwneewneweeseeseewewneneew
|
||||||
|
swseenenwwsenwnwnewneenwwewnwswe
|
||||||
|
swsweseswswswwwwswswswnewswsw
|
||||||
|
swnwwneneswswnwewwnwsenwenwnenwee
|
||||||
|
ewswseseneesewseneswsenwswseseswsese
|
||||||
|
eneeneeseswenwsewneeweenwnwese
|
||||||
|
swnwswswseswswswseseeswnwswswsweswnwsww
|
||||||
|
wwnwnwswnwsewwnwwnwwnwwnwsenwnee
|
||||||
|
eeseeeswneseneseeweneweseee
|
||||||
|
senesenwsesenwwsesesesesesesesesesesese
|
||||||
|
nwnewesewneswneeeeneeneeswnesenene
|
||||||
|
wesenwseswsweweenwnenwwnesese
|
||||||
|
nenwnwneeswneneeneneneswneneswneneenwnee
|
||||||
|
nwnwwsenwwnwnwwnwsenwnwenwnwnwwnwne
|
||||||
|
nwnwsenwnwsenwnwnwnenwnwwnesenwnwenwne
|
||||||
|
sewswweneesenenwneseswseswnweeeene
|
||||||
|
nwswnwnwnwnwwsenwnwwnwnwenwnwesenwnw
|
||||||
|
wwwwwwnenwwwwnesewwwse
|
||||||
|
swnenenenenenenwneneswnwneesenwnenewne
|
||||||
|
neneneswneneeneneneene
|
||||||
|
wswneseswswnewwnewswwwwwwwswsww
|
||||||
|
neeneseewnenwnwneseewneenenwwnenesww
|
||||||
|
enwseswseesesewnesweeeeneswsesenese
|
||||||
|
nwnwswnenenenwnwnwnenene
|
||||||
|
wswswswneswneswwswswsweseswswseswseswsw
|
||||||
|
sewseseesesweseneseseseseseswnwwsw
|
||||||
|
swseswswwnesenewnwwnweenweswwsenw
|
||||||
|
seseseswswseseseeseesesesesenwnwsesese
|
||||||
|
nenewnenwneswnwnese
|
||||||
|
seseneswseswswseseswswseswnwwswse
|
||||||
|
nwneeeeseseneseseeseeeeeeeeww
|
||||||
|
nwnwneenwswswnenwnenwnenwwneneenenwnwnw
|
||||||
|
nwnwenwnwnwsenwnwenwnwwnwnwnwswnwnwnw
|
||||||
|
wwnwwenesesewwwnewsesewnewwwe
|
||||||
|
wnwnwwwewnwseswwwwwnewnwswnwe
|
||||||
|
nwwwwswnesewwsewsenewnwnwsewnwnww
|
||||||
|
nweeeenwseeeseee
|
||||||
|
eneenewnwenewnwsesenewewswenenese
|
||||||
|
eswwsweswseswnwsenewnenwswseswwww
|
||||||
|
neswnesenenenwnenwenenwnwneneswneswnwne
|
||||||
|
enwseswnwnweesewnwseeseseeseseseseesw
|
||||||
|
wenwwwswnewswsesewwnwwnwnenewnw
|
||||||
|
nwwseseswswewwswwsewneswnenwnwesww
|
||||||
|
swnwnwnwswenenwnwnwnwsewenenenwnenesw
|
||||||
|
weneswwswswnwsweeesenenwsenwwwsw
|
||||||
|
eeseesenesesewnweseeenesweeeeew
|
||||||
|
eseweseseseesenwwsesenese
|
||||||
|
eneneneneneneneneeenenenenenwsw
|
||||||
|
esenwnweswenenwnwswnwwnewneenewnww
|
||||||
|
eeneneneeeeswneneenwsew
|
||||||
|
seweeseesenewswsenwewwneeeeee
|
||||||
|
newnwnwenwwnenesenewsenewswnweese
|
||||||
|
neswwwswswswneww
|
||||||
|
seswseswseneswseswswnewneswswswswsenenw
|
||||||
|
eneeneeeenwswneneeswnweenwseneswnene
|
||||||
|
neswseeswseseswswsewsese
|
||||||
|
wnewwswwneswswwenewswswwwswwnene
|
||||||
|
newswseswnwnwnwnenwnwnwnwnwnesenwne
|
||||||
|
neewswseswswnwswswseneswswswswswseswsesw
|
||||||
|
nwwneenwwwwsenwwseswenwnwswwnenw
|
||||||
|
wwwenwwnwnwwnwnwnwe
|
||||||
|
esesewsesesesesesenwsenwesenwswswswee
|
||||||
|
nwsesesenweseswseseseseswsesewseseenwse
|
||||||
|
newnwnwnenwswswwwnwwwnwwnwwnenwsw
|
||||||
|
swsewsenwseseseswwseseneesweswswsese
|
||||||
|
neeenweseeeeneswneeeeweee
|
||||||
|
nwenwnwnwnenwwnwnenenwnw
|
||||||
|
wwsewwenewwwwwwwsewwwnww
|
||||||
|
neneenesweneeneenwnenwneneseseeee
|
||||||
|
eswseneseseseeeeeeeseenwsewsese
|
||||||
|
nenenwswneeswnesenenewwnenenenwenwsese
|
||||||
|
nwwwwwewwswwswwnewwwwseeww
|
||||||
|
swswswswswswswseseswneeswswseneswwswwsww
|
||||||
|
nwneneswneeswenwseenweeneneewwwnee
|
||||||
|
swswswswneswwneseswwseswswswsw
|
||||||
|
swswseswneswwwswswwswsw
|
||||||
|
nwenweseesweeeeneeseeswseeesw
|
||||||
|
swswswsweswswnewwswwwswswwwnwswse
|
||||||
|
sewneseseswsesesesesewseseswnwseneswse
|
||||||
|
enenweeswsweswenwnwe
|
||||||
|
nenenwnwnenwnenwwnwswnwnenwsenenwne
|
||||||
|
neswseneswswnwwweneswnwseswswneewnese
|
||||||
|
nenweswsweeneeneswnweeneswneswee
|
||||||
|
wsenwseseseseeseseseseseseeseneswnese
|
||||||
|
swnenwwnwnwenwnwswnwnesenesesewnwnenenw
|
||||||
|
sweneeenenwenenenweeenenwsweeeswe
|
||||||
|
sewewnesesewnenwsesesesweseswswsesesw
|
||||||
|
neswswnenwneseseneneneneneneneswnenwnene
|
||||||
|
newnewweewwwnwseswwseswwewswww
|
||||||
|
senwseseseswswnesenweseswsewswsesesewsw
|
||||||
|
senenenenenenwnwnwsewnwnwenwnwnwwnene
|
||||||
|
nwnwenenwnwwneneswneneneneenwnwnwnese
|
||||||
|
seseseseseseswwneswseswesewswseswnwse
|
||||||
|
nenwnwnenwenenweswneneswweenwneneswnwnw
|
||||||
|
swnwseswewnewnesesesesesesesee
|
||||||
|
seswnenwwwewseneswswsenweneswnenenwe
|
||||||
20
inputs/day24_test.txt
Normal file
20
inputs/day24_test.txt
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
sesenwnenenewseeswwswswwnenewsewsw
|
||||||
|
neeenesenwnwwswnenewnwwsewnenwseswesw
|
||||||
|
seswneswswsenwwnwse
|
||||||
|
nwnwneseeswswnenewneswwnewseswneseene
|
||||||
|
swweswneswnenwsewnwneneseenw
|
||||||
|
eesenwseswswnenwswnwnwsewwnwsene
|
||||||
|
sewnenenenesenwsewnenwwwse
|
||||||
|
wenwwweseeeweswwwnwwe
|
||||||
|
wsweesenenewnwwnwsenewsenwwsesesenwne
|
||||||
|
neeswseenwwswnwswswnw
|
||||||
|
nenwswwsewswnenenewsenwsenwnesesenew
|
||||||
|
enewnwewneswsewnwswenweswnenwsenwsw
|
||||||
|
sweneswneswneneenwnewenewwneswswnese
|
||||||
|
swwesenesewenwneswnwwneseswwne
|
||||||
|
enesenwswwswneneswsenwnewswseenwsese
|
||||||
|
wnwnesenesenenwwnenwsewesewsesesew
|
||||||
|
nenewswnwewswnenesenwnesewesw
|
||||||
|
eneswnwswnwsenenwnwnwwseeswneewsenese
|
||||||
|
neswnwewnwnwseenwseesewsenwsweewe
|
||||||
|
wseweeenwnesenwwwswnew
|
||||||
286
src/bin/lobby_layout.rs
Normal file
286
src/bin/lobby_layout.rs
Normal file
@@ -0,0 +1,286 @@
|
|||||||
|
use advent2020::errors::{DirectionParseError, MapOperationError, TopLevelError};
|
||||||
|
use std::env;
|
||||||
|
use std::fs;
|
||||||
|
|
||||||
|
#[derive(Debug)]
|
||||||
|
enum Direction {
|
||||||
|
East,
|
||||||
|
SouthEast,
|
||||||
|
SouthWest,
|
||||||
|
West,
|
||||||
|
NorthWest,
|
||||||
|
NorthEast,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Direction {
|
||||||
|
fn read<I: Iterator<Item = char>>(
|
||||||
|
iter: &mut I,
|
||||||
|
) -> Result<Option<Direction>, DirectionParseError> {
|
||||||
|
match iter.next() {
|
||||||
|
None => Ok(None),
|
||||||
|
Some('e') => Ok(Some(Direction::East)),
|
||||||
|
Some('w') => Ok(Some(Direction::West)),
|
||||||
|
Some('n') => match iter.next() {
|
||||||
|
None => Err(DirectionParseError::IncompleteNorthSouthDirection),
|
||||||
|
Some('e') => Ok(Some(Direction::NorthEast)),
|
||||||
|
Some('w') => Ok(Some(Direction::NorthWest)),
|
||||||
|
Some(c) => Err(DirectionParseError::InvalidNorthSouthSuffix(c)),
|
||||||
|
},
|
||||||
|
Some('s') => match iter.next() {
|
||||||
|
None => Err(DirectionParseError::IncompleteNorthSouthDirection),
|
||||||
|
Some('e') => Ok(Some(Direction::SouthEast)),
|
||||||
|
Some('w') => Ok(Some(Direction::SouthWest)),
|
||||||
|
Some(c) => Err(DirectionParseError::InvalidNorthSouthSuffix(c)),
|
||||||
|
},
|
||||||
|
Some(c) => Err(DirectionParseError::InvalidBaseDirection(c)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn adjust_coord(
|
||||||
|
&self,
|
||||||
|
x: &mut usize,
|
||||||
|
y: &mut usize,
|
||||||
|
extent: usize,
|
||||||
|
) -> Result<(), MapOperationError> {
|
||||||
|
let unshifted = (*y & 1) == 0; // whether this row has been "shifted left"
|
||||||
|
|
||||||
|
match self {
|
||||||
|
Direction::East if *x + 1 == extent => return Err(MapOperationError::FellOffEdge),
|
||||||
|
Direction::East => *x += 1,
|
||||||
|
|
||||||
|
Direction::West if *x == 0 => return Err(MapOperationError::FellOffEdge),
|
||||||
|
Direction::West => *x -= 1,
|
||||||
|
|
||||||
|
Direction::NorthEast if unshifted && (*x + 1 == extent || *y == 0) => {
|
||||||
|
return Err(MapOperationError::FellOffEdge)
|
||||||
|
}
|
||||||
|
Direction::NorthEast if unshifted => {
|
||||||
|
*x += 1;
|
||||||
|
*y -= 1
|
||||||
|
}
|
||||||
|
Direction::NorthWest if unshifted && *y == 0 => {
|
||||||
|
return Err(MapOperationError::FellOffEdge)
|
||||||
|
}
|
||||||
|
Direction::NorthWest if unshifted => *y -= 1,
|
||||||
|
|
||||||
|
Direction::SouthEast if unshifted && (*x + 1 == extent || *y + 1 == extent) => {
|
||||||
|
return Err(MapOperationError::FellOffEdge)
|
||||||
|
}
|
||||||
|
Direction::SouthEast if unshifted => {
|
||||||
|
*x += 1;
|
||||||
|
*y += 1;
|
||||||
|
}
|
||||||
|
Direction::SouthWest if unshifted && *y + 1 == extent => {
|
||||||
|
return Err(MapOperationError::FellOffEdge)
|
||||||
|
}
|
||||||
|
Direction::SouthWest if unshifted => *y += 1,
|
||||||
|
|
||||||
|
Direction::NorthEast if *y == 0 => return Err(MapOperationError::FellOffEdge),
|
||||||
|
Direction::NorthEast => *y -= 1,
|
||||||
|
Direction::NorthWest if *x == 0 || *y == 0 => {
|
||||||
|
return Err(MapOperationError::FellOffEdge)
|
||||||
|
}
|
||||||
|
Direction::NorthWest => {
|
||||||
|
*x -= 1;
|
||||||
|
*y -= 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
Direction::SouthEast if *y + 1 == extent => return Err(MapOperationError::FellOffEdge),
|
||||||
|
Direction::SouthEast => *y += 1,
|
||||||
|
Direction::SouthWest if *x == 0 || *y + 1 == extent => {
|
||||||
|
return Err(MapOperationError::FellOffEdge)
|
||||||
|
}
|
||||||
|
Direction::SouthWest => {
|
||||||
|
*x -= 1;
|
||||||
|
*y += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn read_directions<I: Iterator<Item = char>>(
|
||||||
|
iter: &mut I,
|
||||||
|
) -> Result<Vec<Direction>, DirectionParseError> {
|
||||||
|
let mut directions = Vec::new();
|
||||||
|
|
||||||
|
while let Some(x) = Direction::read(iter)? {
|
||||||
|
directions.push(x);
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(directions)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug, PartialEq)]
|
||||||
|
enum Color {
|
||||||
|
White,
|
||||||
|
Black,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Color {
|
||||||
|
fn flip(&mut self) {
|
||||||
|
match self {
|
||||||
|
Color::White => *self = Color::Black,
|
||||||
|
Color::Black => *self = Color::White,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Clone)]
|
||||||
|
struct Board {
|
||||||
|
edge_length: usize,
|
||||||
|
origin: (usize, usize),
|
||||||
|
raw_data: Vec<Color>,
|
||||||
|
}
|
||||||
|
|
||||||
|
macro_rules! check_adjacent {
|
||||||
|
($self: expr, $x: expr, $y: expr, $dir: expr, $val: ident) => {
|
||||||
|
let mut work_x = $x;
|
||||||
|
let mut work_y = $y;
|
||||||
|
|
||||||
|
if $dir
|
||||||
|
.adjust_coord(&mut work_x, &mut work_y, $self.edge_length)
|
||||||
|
.is_ok()
|
||||||
|
&& $self.get(work_x, work_y) == Color::Black
|
||||||
|
{
|
||||||
|
$val += 1;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Board {
|
||||||
|
fn new(edge_length: usize) -> Board {
|
||||||
|
let edge_length_squared = edge_length * edge_length;
|
||||||
|
let half_edge_length = edge_length / 2;
|
||||||
|
let origin = (half_edge_length, half_edge_length);
|
||||||
|
let raw_data = vec![Color::White; edge_length_squared];
|
||||||
|
|
||||||
|
Board {
|
||||||
|
edge_length,
|
||||||
|
origin,
|
||||||
|
raw_data,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn tile_counts(&self) -> (usize, usize) {
|
||||||
|
let mut black_count = 0;
|
||||||
|
let mut white_count = 0;
|
||||||
|
|
||||||
|
for color in self.raw_data.iter() {
|
||||||
|
match color {
|
||||||
|
Color::White => white_count += 1,
|
||||||
|
Color::Black => black_count += 1,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
(black_count, white_count)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn flip(&mut self, directions: Vec<Direction>) -> Result<(), TopLevelError> {
|
||||||
|
let (mut x, mut y) = self.origin;
|
||||||
|
|
||||||
|
for direction in directions.iter() {
|
||||||
|
direction.adjust_coord(&mut x, &mut y, self.edge_length)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
self.raw_data[(y * self.edge_length) + x].flip();
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
|
fn get(&self, x: usize, y: usize) -> Color {
|
||||||
|
self.raw_data[(y * self.edge_length) + x]
|
||||||
|
}
|
||||||
|
|
||||||
|
fn set(&mut self, x: usize, y: usize, v: Color) {
|
||||||
|
self.raw_data[(y * self.edge_length) + x] = v;
|
||||||
|
}
|
||||||
|
|
||||||
|
fn adjacent_black_tiles(&self, x: usize, y: usize) -> usize {
|
||||||
|
let mut result = 0;
|
||||||
|
|
||||||
|
check_adjacent!(self, x, y, Direction::East, result);
|
||||||
|
check_adjacent!(self, x, y, Direction::West, result);
|
||||||
|
check_adjacent!(self, x, y, Direction::NorthEast, result);
|
||||||
|
check_adjacent!(self, x, y, Direction::NorthWest, result);
|
||||||
|
check_adjacent!(self, x, y, Direction::SouthEast, result);
|
||||||
|
check_adjacent!(self, x, y, Direction::SouthWest, result);
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
|
fn next_day(self) -> Board {
|
||||||
|
let mut result = self.clone();
|
||||||
|
|
||||||
|
for x in 0..self.edge_length {
|
||||||
|
for y in 0..self.edge_length {
|
||||||
|
let black_count = self.adjacent_black_tiles(x, y);
|
||||||
|
|
||||||
|
match self.get(x, y) {
|
||||||
|
Color::Black if black_count == 0 || black_count > 2 => {
|
||||||
|
result.set(x, y, Color::White)
|
||||||
|
}
|
||||||
|
Color::White if black_count == 2 => result.set(x, y, Color::Black),
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn maneuvers_work() {
|
||||||
|
let mut board = Board::new(10);
|
||||||
|
|
||||||
|
board.flip(vec![Direction::West]).unwrap();
|
||||||
|
assert_eq!(1, board.tile_counts().0);
|
||||||
|
board.flip(vec![Direction::West]).unwrap();
|
||||||
|
assert_eq!(0, board.tile_counts().0);
|
||||||
|
board
|
||||||
|
.flip(vec![Direction::West, Direction::West, Direction::East])
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(1, board.tile_counts().0);
|
||||||
|
board.flip(vec![Direction::West]).unwrap();
|
||||||
|
assert_eq!(0, board.tile_counts().0);
|
||||||
|
board
|
||||||
|
.flip(read_directions(&mut "esew".chars()).unwrap())
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(1, board.tile_counts().0);
|
||||||
|
board.flip(vec![Direction::SouthEast]).unwrap();
|
||||||
|
assert_eq!(0, board.tile_counts().0);
|
||||||
|
board
|
||||||
|
.flip(read_directions(&mut "nwwswee".chars()).unwrap())
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(1, board.tile_counts().0);
|
||||||
|
board.flip(vec![]).unwrap();
|
||||||
|
assert_eq!(0, board.tile_counts().0);
|
||||||
|
board
|
||||||
|
.flip(read_directions(&mut "nwnwwswee".chars()).unwrap())
|
||||||
|
.unwrap();
|
||||||
|
assert_eq!(1, board.tile_counts().0);
|
||||||
|
board.flip(vec![Direction::NorthWest]).unwrap();
|
||||||
|
assert_eq!(0, board.tile_counts().0);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<(), TopLevelError> {
|
||||||
|
let filename = env::args().nth(1).expect("No file argument given.");
|
||||||
|
let contents = fs::read_to_string(filename)?;
|
||||||
|
let mut board = Board::new(250);
|
||||||
|
|
||||||
|
for line in contents.lines() {
|
||||||
|
board.flip(read_directions(&mut line.chars())?)?;
|
||||||
|
}
|
||||||
|
|
||||||
|
let (black_count, white_count) = board.tile_counts();
|
||||||
|
println!("{} black tiles.", black_count);
|
||||||
|
println!("{} white tiles.", white_count);
|
||||||
|
|
||||||
|
for i in 0..=100 {
|
||||||
|
println!("Day {}: {} black tiles", i, board.tile_counts().0);
|
||||||
|
board = board.next_day();
|
||||||
|
}
|
||||||
|
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
@@ -58,6 +58,8 @@ pub enum TopLevelError {
|
|||||||
GrammarParseError(#[from] GrammarParseError),
|
GrammarParseError(#[from] GrammarParseError),
|
||||||
#[error("Bad tile parse: {0}")]
|
#[error("Bad tile parse: {0}")]
|
||||||
TileParseError(#[from] TileParseError),
|
TileParseError(#[from] TileParseError),
|
||||||
|
#[error("Error parsing directions: {0}")]
|
||||||
|
DirectionParseError(#[from] DirectionParseError),
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
@@ -151,6 +153,8 @@ pub enum ExecutionError {
|
|||||||
pub enum MapOperationError {
|
pub enum MapOperationError {
|
||||||
#[error("Out of bounds indexing map with ({0},{1})")]
|
#[error("Out of bounds indexing map with ({0},{1})")]
|
||||||
OutOfBounds(usize, usize),
|
OutOfBounds(usize, usize),
|
||||||
|
#[error("Fell off the edge of the map")]
|
||||||
|
FellOffEdge,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Error, Debug)]
|
#[derive(Error, Debug)]
|
||||||
@@ -224,3 +228,13 @@ pub enum TileParseError {
|
|||||||
#[error("Weird start to tile: {0}")]
|
#[error("Weird start to tile: {0}")]
|
||||||
BadTileStart(String),
|
BadTileStart(String),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Error, Debug, PartialEq)]
|
||||||
|
pub enum DirectionParseError {
|
||||||
|
#[error("Invalid base for direction: {0}")]
|
||||||
|
InvalidBaseDirection(char),
|
||||||
|
#[error("Invalid suffix for north/south direction: {0}")]
|
||||||
|
InvalidNorthSouthSuffix(char),
|
||||||
|
#[error("Incomplete north/south direction")]
|
||||||
|
IncompleteNorthSouthDirection,
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user