Compare commits
15 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 41019aa10c | |||
| efa49ebf39 | |||
| 819fe8c70f | |||
| 4cc35dc038 | |||
| 2c824a40fe | |||
| 4d98cc0e0f | |||
| a77b4cfe2d | |||
| 397b7950c6 | |||
| bd36d74070 | |||
| 04153d9c77 | |||
| 372373f41b | |||
| 35d79ceb46 | |||
| 89ffe25da6 | |||
| 0788379cfd | |||
| 55cd0e28c6 |
165
README.md
165
README.md
@ -1,62 +1,167 @@
|
|||||||
```
|
```
|
||||||
Advent of code 2020
|
Advent of code 2020
|
||||||
Day 1 - Part 1: 1016964
|
Day 1 - Part 1: 1016964
|
||||||
generator: 122.086µs,
|
generator: 16.414µs,
|
||||||
runner: 4.434µs
|
runner: 474ns
|
||||||
|
|
||||||
Day 1 - Part 2: 182588480
|
Day 1 - Part 2: 182588480
|
||||||
generator: 99.356µs,
|
generator: 12.988µs,
|
||||||
runner: 7.318µs
|
runner: 302ns
|
||||||
|
|
||||||
Day 2 - Part 1: 586
|
Day 2 - Part 1: 586
|
||||||
generator: 233ns,
|
generator: 180ns,
|
||||||
runner: 1.453395ms
|
runner: 89.876µs
|
||||||
|
|
||||||
Day 2 - Part 2: 352
|
Day 2 - Part 2: 352
|
||||||
generator: 423ns,
|
generator: 94ns,
|
||||||
runner: 922.764µs
|
runner: 76.325µs
|
||||||
|
|
||||||
Day 3 - Part 1: 265
|
Day 3 - Part 1: 265
|
||||||
generator: 964.093µs,
|
generator: 48.133µs,
|
||||||
runner: 9.734488ms
|
runner: 54.962µs
|
||||||
|
|
||||||
Day 3 - Part 2: 3154761400
|
Day 3 - Part 2: 3154761400
|
||||||
generator: 938.153µs,
|
generator: 35.653µs,
|
||||||
runner: 52.66926ms
|
runner: 283.346µs
|
||||||
|
|
||||||
Day 4 - Part 2: 186
|
Day 4 - Part 2: 186
|
||||||
generator: 697ns,
|
generator: 109ns,
|
||||||
runner: 2.760526ms
|
runner: 103.216µs
|
||||||
|
|
||||||
Day 5 - Part 1: SeatId(933)
|
Day 5 - Part 1: SeatId(933)
|
||||||
generator: 489ns,
|
generator: 89ns,
|
||||||
runner: 776.127µs
|
runner: 46.149µs
|
||||||
|
|
||||||
Day 5 - Part 2: SeatId(711)
|
Day 5 - Part 2: SeatId(711)
|
||||||
generator: 443ns,
|
generator: 89ns,
|
||||||
runner: 800.487µs
|
runner: 44.886µs
|
||||||
|
|
||||||
Day 6 - Part 1: 6633
|
Day 6 - Part 1: 6633
|
||||||
generator: 336ns,
|
generator: 109ns,
|
||||||
runner: 1.669623ms
|
runner: 121.222µs
|
||||||
|
|
||||||
Day 6 - Part 2: 3202
|
Day 6 - Part 2: 3202
|
||||||
generator: 448ns,
|
generator: 136ns,
|
||||||
runner: 1.538626ms
|
runner: 94.567µs
|
||||||
|
|
||||||
Day 7 - Part 1: 208
|
Day 7 - Part 1: 208
|
||||||
generator: 379ns,
|
generator: 185ns,
|
||||||
runner: 6.340596ms
|
runner: 604.146µs
|
||||||
|
|
||||||
Day 7 - Part 2: 1664
|
Day 7 - Part 2: 1664
|
||||||
generator: 660ns,
|
generator: 111ns,
|
||||||
runner: 5.171311ms
|
runner: 460.961µs
|
||||||
|
|
||||||
Day 8 - Part 1: 1723
|
Day 8 - Part 1: 1723
|
||||||
generator: 541ns,
|
generator: 103ns,
|
||||||
runner: 564.443µs
|
runner: 36.224µs
|
||||||
|
|
||||||
Day 8 - Part 2: 846
|
Day 8 - Part 2: 846
|
||||||
generator: 412ns,
|
generator: 86ns,
|
||||||
runner: 714.064µs
|
runner: 40.938µs
|
||||||
|
|
||||||
|
Day 9 - Part 1: 36845998
|
||||||
|
generator: 96ns,
|
||||||
|
runner: 73.527µs
|
||||||
|
|
||||||
|
Day 9 - Part 2: 4830226
|
||||||
|
generator: 102ns,
|
||||||
|
runner: 29.088µs
|
||||||
|
|
||||||
|
Day 10 - Part 1: 1890
|
||||||
|
generator: 121ns,
|
||||||
|
runner: 7.187µs
|
||||||
|
|
||||||
|
Day 10 - Part 2: 49607173328384
|
||||||
|
generator: 105ns,
|
||||||
|
runner: 6.469µs
|
||||||
|
|
||||||
|
Day 11 - Part 1: 2329
|
||||||
|
generator: 170ns,
|
||||||
|
runner: 9.306401ms
|
||||||
|
|
||||||
|
Day 11 - Part 2: 2138
|
||||||
|
generator: 208ns,
|
||||||
|
runner: 22.394928ms
|
||||||
|
|
||||||
|
Day 12 - Part 1: 1177
|
||||||
|
generator: 132ns,
|
||||||
|
runner: 23.98µs
|
||||||
|
|
||||||
|
Day 12 - Part 2: 46530
|
||||||
|
generator: 88ns,
|
||||||
|
runner: 22.565µs
|
||||||
|
|
||||||
|
Day 13 - Part 1: 1895
|
||||||
|
generator: 90ns,
|
||||||
|
runner: 2.108µs
|
||||||
|
|
||||||
|
Day 14 - Part 1: 13865835758282
|
||||||
|
generator: 104ns,
|
||||||
|
runner: 85.834µs
|
||||||
|
|
||||||
|
Day 14 - Part 2: 4195339838136
|
||||||
|
generator: 94ns,
|
||||||
|
runner: 9.646046ms
|
||||||
|
|
||||||
|
Day 15 - Part 1: 273
|
||||||
|
generator: 146ns,
|
||||||
|
runner: 51.22µs
|
||||||
|
|
||||||
|
Day 15 - Part 2: 47205
|
||||||
|
generator: 109ns,
|
||||||
|
runner: 2.274252927s
|
||||||
|
|
||||||
|
Day 16 - Part 1: 25984
|
||||||
|
generator: 301ns,
|
||||||
|
runner: 175.013µs
|
||||||
|
|
||||||
|
Day 16 - Part 2: 1265347500049
|
||||||
|
generator: 125ns,
|
||||||
|
runner: 353.876µs
|
||||||
|
|
||||||
|
Day 16 - Part 2 - avx2: 1265347500049
|
||||||
|
generator: 152ns,
|
||||||
|
runner: 145.475µs
|
||||||
|
|
||||||
|
Day 17 - Part 1: 1812
|
||||||
|
generator: 128ns,
|
||||||
|
runner: 278.162845ms
|
||||||
|
|
||||||
|
Day 18 - Part 1: 800602729153
|
||||||
|
generator: 199ns,
|
||||||
|
runner: 163.467µs
|
||||||
|
|
||||||
|
Day 18 - Part 2: 92173009047076
|
||||||
|
generator: 153ns,
|
||||||
|
runner: 180.596µs
|
||||||
|
|
||||||
|
Day 19 - Part 1: 109
|
||||||
|
generator: 112ns,
|
||||||
|
runner: 3.277745ms
|
||||||
|
|
||||||
|
Day 19 - Part 2: 150
|
||||||
|
generator: 102ns,
|
||||||
|
runner: 7.222896ms
|
||||||
|
|
||||||
|
Day 20 - Part 1: 22878471088273
|
||||||
|
generator: 121ns,
|
||||||
|
runner: 124.756µs
|
||||||
|
|
||||||
|
Day 21 - Part 1: 2262
|
||||||
|
generator: 111ns,
|
||||||
|
runner: 368.681µs
|
||||||
|
|
||||||
|
Day 21 - Part 2: cxsvdm,glf,rsbxb,xbnmzr,txdmlzd,vlblq,mtnh,mptbpz
|
||||||
|
generator: 104ns,
|
||||||
|
runner: 329.907µs
|
||||||
|
|
||||||
|
Day 22 - Part 1: 33631
|
||||||
|
generator: 105ns,
|
||||||
|
runner: 7.331µs
|
||||||
|
|
||||||
|
Day 22 - Part 2: 33469
|
||||||
|
generator: 94ns,
|
||||||
|
runner: 1.13821236s
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|||||||
@ -1 +0,0 @@
|
|||||||
459672813
|
|
||||||
@ -1,496 +0,0 @@
|
|||||||
enesenwwwsenewswsewenwwnwwnwnwswse
|
|
||||||
swneswseesweswneswwwwseewnewswsw
|
|
||||||
neneenenenenwneseneesenewenenwnenenesw
|
|
||||||
weeswnenenwneneeesweneswenwneene
|
|
||||||
nwnwnenwnwwnwnwnwnwwsewnwswnwwnwnwnw
|
|
||||||
nwwwnwnwnenenwewnwseewnwswnwwnww
|
|
||||||
senwweneewewswweswsenwnesenwwnwswnw
|
|
||||||
nwnwnenenenenwnesenenenwneswnwnweeswwsene
|
|
||||||
wswnwswneneswswswswswnesweseswwswnwswsw
|
|
||||||
neeeeeweseesesweeneweneesw
|
|
||||||
wwenewwwwwwnwnwwwwwwwwse
|
|
||||||
swneswswseseswswswsw
|
|
||||||
seswswsewseesesese
|
|
||||||
nenwneneneewseneneneenenenenenesenenew
|
|
||||||
swswwwnewwsewwwswwwswswwnesew
|
|
||||||
wwswwwwwwwwwwwswewwwwe
|
|
||||||
senewnwwnwswnwswnwewnenwenwewsenwnwse
|
|
||||||
wnwnwenwwnwnwwnewnwswsenwnwnwnwwne
|
|
||||||
nenwneswnwnwswnwnwesewwnwnwnwsenwnene
|
|
||||||
wsewneeseneseseseswnesesenwswenwswnwe
|
|
||||||
nesewnwwwswnweneenwswwesenesw
|
|
||||||
swsesenwswsesesewswswneseseeswnesesesewsw
|
|
||||||
neneswswwswswwswseswswewwswswswsew
|
|
||||||
eeeneeneneneneesweenewneneeee
|
|
||||||
seeenesesweseeeewwneeseeseee
|
|
||||||
nweeweeneeswenewe
|
|
||||||
seswwnwseeswseseswswe
|
|
||||||
wneneeswnesenwseneeneneneenwneneneenwne
|
|
||||||
newnenesenenenenenewneswnenenenenenenenese
|
|
||||||
wswswswswwswwwwweswnwswsewswswsw
|
|
||||||
eeeeeenesenwewseeneeneneweee
|
|
||||||
sewnwwnwnwwwnwnwnwnwswwwewnwww
|
|
||||||
sewesenwswwneswnwnwnwsweseseeswwse
|
|
||||||
nwwewnwweswswwwwewnwnwnwwnwwswe
|
|
||||||
swwwswnwswswenwneswswseswsweswseswsene
|
|
||||||
eneeenwswseseeeeeesenwenwwsweee
|
|
||||||
swseenwseesewnwnewnwneeeswswesenee
|
|
||||||
swwsesenwnwnwwwwnewenwnwewwwwsw
|
|
||||||
seeeeeeeeswnweeenwnwnewswesw
|
|
||||||
seenwswnenenwnewnwnwnwnwe
|
|
||||||
esenenweeswseeeseeweseseeeee
|
|
||||||
swswswswseswswswswnenw
|
|
||||||
neneseswsenenewneenenewwnenenenenenenene
|
|
||||||
wnewwenweswswwwswseswswwwnesene
|
|
||||||
seneneneweenwnwseeeweeseseeeene
|
|
||||||
neenwsweneneeeswwnwwneeenewnene
|
|
||||||
seseneswwneswseswwsesenwseseseswsesese
|
|
||||||
wweeeeeeswsenweeneeee
|
|
||||||
newnenenwneseneneeneeneneseneneeneene
|
|
||||||
wewnwnwwwwwwsenewnwwnwnwwwse
|
|
||||||
weseeseseswnwsewseneneeeesewwe
|
|
||||||
swswswswswswswswswswswwneswswwwswswe
|
|
||||||
swsenwneeseswseswswswswseseneseswswswsw
|
|
||||||
seswnenwwswswswneswsewwnewseswswwwsw
|
|
||||||
swswswneswswseswnwswseswseswswseneseswsw
|
|
||||||
wwwwnewesesewswwwnewwwne
|
|
||||||
enweeneseneeeeswnwesw
|
|
||||||
eesesenwseseeseseesesese
|
|
||||||
nwswseenesewwseesenee
|
|
||||||
wwswswswwswswwneesw
|
|
||||||
newwseswwnewswwwwswnwewnewwsww
|
|
||||||
nesenenenewenesenenenenwnwswnenwnwnenene
|
|
||||||
swnwswswneswswneswswswswseswswseswsweswwsw
|
|
||||||
swswswswswswneseswswseswnwswswswsweswsw
|
|
||||||
nwwwwswwwsewwwwewnwewswwww
|
|
||||||
neneeneeewneeneeeneenene
|
|
||||||
swnwnwnwneswwwseeenewnewswsenwwnww
|
|
||||||
nenenenwnenwneswnenwnenenenenene
|
|
||||||
nwweenwesweeeeeeseeeeewnenese
|
|
||||||
weeeneeseeeseeeseeeewe
|
|
||||||
wwwwwnwesewwwswewwwwenww
|
|
||||||
seneseseseseseneswsesesesewsewsesesese
|
|
||||||
eenwneneseeeeeesweenweeeenee
|
|
||||||
neseneseseseseseeseswseeeeseewee
|
|
||||||
nwswnweeeeseeseneeneneswswneneee
|
|
||||||
sesesewseseswesesesewseeneeseesese
|
|
||||||
seswnewwswewnwswneneswwnwnwnew
|
|
||||||
wneseneeeewsesewneneneenenwswnwne
|
|
||||||
wnwnenwnwnwnwsenenwnesenwnwnwnwnwnwnwnwwnw
|
|
||||||
wwnewnwwswweswewswseeewenwsw
|
|
||||||
eneeneseeneneneewneweeeneeeneew
|
|
||||||
nwwnwnwwnwnwenenwnwnwenwnenwnenwnenw
|
|
||||||
nwsenwnwenwnwswsenwsenwnwnwnwnwnwswenwnw
|
|
||||||
eeseseeeeeseseeeneesenwseeswe
|
|
||||||
ewenewneeneswewneseneswsewswwese
|
|
||||||
nwwwwswwswswwse
|
|
||||||
newnwnwnwwwwnwnwswsewewnwwwwnwnw
|
|
||||||
seswswnwwseseseswseesw
|
|
||||||
sewseweswwwwwswwwwwswwwwnwne
|
|
||||||
senenenenwnwnwnwnwnwnwnwnw
|
|
||||||
swswswwwwswswwnwwwswwesewwww
|
|
||||||
seeneseseneseesesesewsesesesesenwseswsw
|
|
||||||
wnenwnwsewwwnwnwwwwwsewwnwnew
|
|
||||||
swswswswswneswseswswswseseseswswnwsesese
|
|
||||||
neneneneneeneenenesenenwnenewnesenenee
|
|
||||||
wseseswseneeseswneseswseswswwwseswne
|
|
||||||
nenenenenenenwnenenenesenesewswneneenwe
|
|
||||||
seeseseseeseneesesenweeewseewsese
|
|
||||||
neeewneneneneseneenenenenenenesenwne
|
|
||||||
nenewnweneweseenwnwsesewnwswnwnwnw
|
|
||||||
sewnwnesenenwneswwnenwnwnwsenweneswe
|
|
||||||
senwnwnenwswnwnwnwnenwenenwnwnenenesenw
|
|
||||||
wnwwwwwsewnwwwewwwweseww
|
|
||||||
swnwnewnwnwsenwsenwnwnwnenwneswwwnwenenw
|
|
||||||
wnwseswnewwweewneneeseseesenww
|
|
||||||
wseseseseeseseseseseesesesenwswswswnw
|
|
||||||
neneneneneneneseneswnenenwneneneneneenewne
|
|
||||||
neswswswswswswsesesesesewsewneswsenesw
|
|
||||||
nenwneswnwweseeenwnesweneeneeese
|
|
||||||
seesesesesesweeseseseesweenweseenwse
|
|
||||||
seeswseseseswseseseswswswnenwswswseswsw
|
|
||||||
swneswswseswswswwswswnwswseswswswswseneswsw
|
|
||||||
nwseseesesewneeseseeeeeseewenesese
|
|
||||||
nenenenewneneswneswneneswswneneneneene
|
|
||||||
nwswnwnenwnwnwnwswnewnwnwnwenwnwnwnww
|
|
||||||
nwwnwnwnwnenwnwnenwsenenwnenwnwnwnwnw
|
|
||||||
senenenwnwewwwneeneewnenwsew
|
|
||||||
nenenenwneneneneswneneneeswenenenwnenw
|
|
||||||
wwneweewseswseseneneeseeeseese
|
|
||||||
neneneeswnenenewneneneneneneswenenene
|
|
||||||
eeeeewseeeneneneeeeeweenwsw
|
|
||||||
nwenenwnwswwsenwnwswneswnwnwnenwenenwne
|
|
||||||
eswwswneswswswswswnwewswswwswswwswswsw
|
|
||||||
enwwwwnwnwnwwewwnwnwnwnwseeww
|
|
||||||
seseseneeseseseseneseseewwseesesesese
|
|
||||||
nenenweneswnewenw
|
|
||||||
nenenenwneneneseswnwnwsenwenwewnenenwnw
|
|
||||||
nenenenwnwnwenwnwswnwnwwnwnwnwnwnwsenw
|
|
||||||
neeneneneeneneneneneneenesw
|
|
||||||
neeeneeeswnwnenwsewswswnenwsenwnee
|
|
||||||
wenwwwswenewwwsewswswnewswwew
|
|
||||||
seseeneeseseseneseseesesewsesewsesesese
|
|
||||||
swewnwwsenwnwwseewwnwwwnewwnw
|
|
||||||
wesesweeneeenewnwsweenenwneeesw
|
|
||||||
nwnwswnwnwnwnwnwenenwnwswnwnwnwnwnwenenw
|
|
||||||
nwsenwwswnenwneeesenewenwwwnw
|
|
||||||
ewseeeeenweseseseeeewseeseese
|
|
||||||
wnwnwsewwnwneswwnwwnwnwwnwwwnwnenw
|
|
||||||
swswsenwwswwenenenewseswswewswnesw
|
|
||||||
wnwswsesesesweeswseswswswswswseswswsw
|
|
||||||
eneeswnwwnwnwsweenwenwnwnewnwswswnwne
|
|
||||||
seseswswseseswseswsenesesewsenenwsesww
|
|
||||||
eeeneswnwnwnwneneseneseneenewnenwsee
|
|
||||||
enweseesweswneeweseenwneeew
|
|
||||||
newneneneneeneneswsenenewnenenene
|
|
||||||
eneswwneneenwnenesenewwnenenesenene
|
|
||||||
swswswswswsesenwswswswswsw
|
|
||||||
eeeneewewneeeee
|
|
||||||
swswsesenwswsenwswseswsweswseswnwseswswenw
|
|
||||||
sweneseswswesenenenwnwwnwnwneswe
|
|
||||||
wnwnwnwwwwsweneswnwnwnwewwnwww
|
|
||||||
seseswswswsesenwwseeseswswswswweese
|
|
||||||
seseeseseseseesesesenwnenwsenwsesesesew
|
|
||||||
wnwnwswnwwwwwwsewwwnenwwwwe
|
|
||||||
wnwwsenwneewswnwsenwnenwwnwesenwnewsw
|
|
||||||
swnenwnenenwnwwnwnesenenwnwnenwnenenenwnw
|
|
||||||
wwewwwwnwswwwnewwwswwwwnw
|
|
||||||
neneeeweesesenweneneswneeeewne
|
|
||||||
swswswseneneswwseseseneseseseswswswswswsw
|
|
||||||
nwnwnenwswwnwwwwnwwwwsew
|
|
||||||
swswswswseswsesesenwswsewseseswswesesw
|
|
||||||
nenwswnwnenwswnenwnwnenwnwnwsenwnwneenw
|
|
||||||
wseseswswswneseswseseswswsenwswswne
|
|
||||||
swnesesewseneseswswnwswswswswnwswseswswswsw
|
|
||||||
wnwnwnwnenwsenwneenwswnwnwnwenwsenwswnw
|
|
||||||
enenenewnenenwnenenenwnenenenenw
|
|
||||||
enenwnenwsewwwsweenenewnwnenwene
|
|
||||||
swwswsewnewswneswswwwswswwswwswwsw
|
|
||||||
neneswseeneeswewenwwswswweesese
|
|
||||||
swnwseswsenwsenweewenwsweeneeese
|
|
||||||
nwenwnwnwnwswnwnenwnwnwnwnwnwnwnwwsenw
|
|
||||||
seseseseeseseseeeeewesenesesewe
|
|
||||||
eswsenwnwneswwswwswnwwwwseeswsenwe
|
|
||||||
enenewnesenewnwnwnwswnwnwnenesenenwnenw
|
|
||||||
wneneneeneeeeweenewnenesweesene
|
|
||||||
enewnweneneeneeeswneneeeeenene
|
|
||||||
nwswsesenwnenwnwwnwnweswswnwnwneeew
|
|
||||||
eseeewneeneeeeeneeeeeseewene
|
|
||||||
sewnewwwwwwwsewwwwwwwnwwe
|
|
||||||
newnenesenweneneneweneenene
|
|
||||||
swseswswswswswswswswewswswswswswnwneswswsw
|
|
||||||
eseneneseseeseseeeeseeeeeswsewse
|
|
||||||
enwneenenewneeneneneswnenenenenenene
|
|
||||||
nenenwnenenwseneneenwnwnenwnweswnwnww
|
|
||||||
nwnwenwnwsenwnwnwnwnwwwse
|
|
||||||
nweswswwswenenweeeseseseeeeeee
|
|
||||||
nwnenwswnwwnwenwsewwnwneswnwnwnwnwsee
|
|
||||||
seeseeseseneewswweseseswswwwswswsw
|
|
||||||
nwnwnesenwenwnwnwnwnwnwwnwneswnwswwnwnw
|
|
||||||
seseseseswseswesesesesesesenesewswsenw
|
|
||||||
swswwswseseseseswsewseseneseseswneswswsw
|
|
||||||
nwnwnwnenwswnwnwnenesenenwnwnenwnwnwnenw
|
|
||||||
swnewwnwneenwnwenwsenwnwnwsewnwenw
|
|
||||||
eeenwwweeeewseneeswesenese
|
|
||||||
swenewneseneswneenwnesenenenwnenewene
|
|
||||||
nwnenwwwwwnewwwwwwwsesenwwww
|
|
||||||
seseswneseseseeenewwsese
|
|
||||||
enwneeeswenewneeeeneeseneeee
|
|
||||||
seseeseneseeeeeeswwnenwseswsesese
|
|
||||||
nwnesesenenenwnwnenwnwnenenwnewnwnwnenw
|
|
||||||
wwswnwnwewewswneseeswswswseneswsw
|
|
||||||
nwsenwneneneneneneeseewnenenenenesenwse
|
|
||||||
nesewswswneneswneswseswswnewswswsenese
|
|
||||||
swswwsesweswnwseseswseseswseseseseswsw
|
|
||||||
senenwswenwnwnwwnenwsenwnwnwnenwewnwwnw
|
|
||||||
nenenenwnwneswswneswnenenenenenenenenene
|
|
||||||
enweneswneneneeswneneeewneenenee
|
|
||||||
nwnwswnwwnwseesenenwwswwnewwsenwnwnw
|
|
||||||
neswseseswneeswneneswswneswenwwswwwe
|
|
||||||
swwneeneeneswwewnwneseeenwnenwnewne
|
|
||||||
wswwwseenwnewneswwnwwwnwseew
|
|
||||||
seewwnenenwneswwnenwneseneenenenene
|
|
||||||
swwsenwswsweseesenwwwswswwnewnesenew
|
|
||||||
neswswswnenesenenenw
|
|
||||||
nwwsewwwnwwnewnwwnenwwseswnenwswwnw
|
|
||||||
nenwneseeewneeeeseneesweneenwsee
|
|
||||||
seswseswseswnwnwswswseswsweseswswswswse
|
|
||||||
swwswneswswswswswswneswsweswswswswwswsesw
|
|
||||||
senesewseseseeewseweseseseeseesese
|
|
||||||
swnesenenenwneneneswnwnwne
|
|
||||||
wsesewwenenwsesewneneseseseswsesese
|
|
||||||
newseswwwswwwnwswweswwewswwww
|
|
||||||
nweneeneneeswnwwenenesweneseneene
|
|
||||||
esweneenweeeeseweeeneeewew
|
|
||||||
neswnweswswnenweseswswnesewswsenwsese
|
|
||||||
nwnwnwnwnwwenwwwnwnw
|
|
||||||
swswseseswswswswswswswswswsweswneswswnwsw
|
|
||||||
neneswnenwnenenenenenwnenwne
|
|
||||||
seeseseneseseswseseseseswsesesenwsesesese
|
|
||||||
nwnenwnwseenwnewewswsewnwwswswnew
|
|
||||||
wseesesweseseeneeenwseeeeeenee
|
|
||||||
swwwsewesewnewnweenwswswwwwwsw
|
|
||||||
eeneseseeseseseseswseewse
|
|
||||||
eeeneseeeeeeswseeenewseeee
|
|
||||||
swseswswsewenenwnwwnweswne
|
|
||||||
ewwnenwswnwnenwnwnwnenenwnwenenenwnw
|
|
||||||
neswswswswswnwswwswsewsw
|
|
||||||
seseeseswswewsewsenwseseneewsewneee
|
|
||||||
seswseswenwwnwswwswewnweseswnwnw
|
|
||||||
sesesenesesesewswseseswneseswsesesesesese
|
|
||||||
neneneneneseenenewneeneneswwnesenenew
|
|
||||||
nweeewneenwswneneswnewne
|
|
||||||
nwwewwswwwseswwswwne
|
|
||||||
nwnenwnwnwnwsewnwnwwnwewnwnwnwnwwnwnw
|
|
||||||
seneneneneenenwnewneneneswneenenwswnenese
|
|
||||||
swseswnwseswswseseseswnwnewseswswswswswsesw
|
|
||||||
nwnenenwnwnenwnenwnwseswneneenwnesenwne
|
|
||||||
nenenesweeenenenenewne
|
|
||||||
eewneeeweeeeseeeneneewene
|
|
||||||
swsweswswswswswswswswneswnwseswnwwseswsw
|
|
||||||
wwswwwnwnwewseweswnwnesenwwwew
|
|
||||||
seeneenenenesenenesweweenenenenwnene
|
|
||||||
newewseewnwwnwwwsewsenewswswe
|
|
||||||
sweeseweseseeeseeenesesesenwese
|
|
||||||
neswewwwseswwwswsww
|
|
||||||
wewnwnwnwnwnwwwnwwswesenwnwenwsee
|
|
||||||
seswsewsewseswswenenewseenwnwnwswse
|
|
||||||
swswseswseswseswswswnwswswnwsenesesw
|
|
||||||
nwnwsenenenwsewnenenenwsenwnesesenwnwnwnw
|
|
||||||
swnenwwwwwseswwneewswswwwnesene
|
|
||||||
seseseswswsesenesesesesesw
|
|
||||||
eneenwneenenenewswneswnesweee
|
|
||||||
nwnwneswnenenwsenenenenenenenwnenewnene
|
|
||||||
seswnewswswswnwswsenwwsweswswnwswesee
|
|
||||||
swswswswswwswswswewswneswswseswswswneswnw
|
|
||||||
swswswswswseseswsenwseneesesesesewwsese
|
|
||||||
seneeesweeeeeeweeeee
|
|
||||||
senweseeeenweeeenwenwsweeswese
|
|
||||||
swswneswseewswswnwswswwsenweswswswesw
|
|
||||||
ewneeeeeneweeeeeeweseesesese
|
|
||||||
nwseswseneeseeseesweeweseesesee
|
|
||||||
neeneswnenenewnwnenwnenenenwswneenewne
|
|
||||||
eswwswswnwnwseeenwweswnwnenwswswse
|
|
||||||
wwswnewwswnwwwswwneneeswwseswne
|
|
||||||
neneneneseneneswneneeneeewne
|
|
||||||
wwwnwwnewsenweseewwwewwnew
|
|
||||||
neswwsweewneswsenewsesewwsenwsesese
|
|
||||||
seswwsweenwweseneseneseneeenwwe
|
|
||||||
senwsesweseseswnwseeseswsenesesenenewsw
|
|
||||||
swseswswswswnenwswswwswswswswswwswenesw
|
|
||||||
nesenwnwnwnenwnwnwnenwnewnwnwnwnwnesenw
|
|
||||||
seswswswwswswwswswswswneswswenewnwswsw
|
|
||||||
nwnwwnwnwnwnenwenwwwenwswwswnwnwnwnww
|
|
||||||
neseenesenwnwsenwwneesewnewwswenwnenw
|
|
||||||
wnenwnwnenenenwnenesenwnenenwnenwnenwe
|
|
||||||
nwnwnwnwnenwnwnesenwnenwnwnenewnwnenwswe
|
|
||||||
enwswseeseseseewseeswnweeseeeee
|
|
||||||
eeeeeesenwseseeee
|
|
||||||
swsesweweswwswswswswnwnwwswswsw
|
|
||||||
neseneneeeenwweneenenenene
|
|
||||||
swwsenwnenenwnesesewneeswwswseswnwswswse
|
|
||||||
seeenweesesweseeeweeeseeswnw
|
|
||||||
sewsesesesesenesweesenwswsesw
|
|
||||||
nwnenwwnwnwswnwnenwnwwnwnenwnwnwnwsenwe
|
|
||||||
neenenwneeneswnenwneswneeneeneeneene
|
|
||||||
seseeeweseseeeeseese
|
|
||||||
nenwnenwnenenenenwswneneneenwnenenenw
|
|
||||||
wwwwswswwsweswnewwnewsewwwne
|
|
||||||
wwnenwnwsewnwnenwsenwnwnwnwnwwwnwnwsw
|
|
||||||
seseseswswsesenwwsenesesesesesesene
|
|
||||||
nwseswsesenwwswnenesenenwsw
|
|
||||||
swswsweswswswseweswnwswswneseswswswnwsw
|
|
||||||
enweesweneeneeneneeeeeneeewe
|
|
||||||
seswseseseseswsesewseseseswswsenwesese
|
|
||||||
seswsesesesenwnewsesesesesesesesesesenwsese
|
|
||||||
swswswnwswswswseswnweswswswsw
|
|
||||||
newnwwswwneeneneseeneswnenenenwnenwnw
|
|
||||||
swwswnwwswswnwswwewnwsweswswswseesw
|
|
||||||
sweswnwswenwwswswwwwsweswswswswswsw
|
|
||||||
nenenwnwsenesenenwnwnwnenenenenenwnwswnwne
|
|
||||||
wnwseswwewwnewwswnwnwwswewsesww
|
|
||||||
seseneseseswsesewswsesesesene
|
|
||||||
wwnwwwewwwewwwnwwwwwnwsww
|
|
||||||
wneeneesenwseeeeeweeesweswene
|
|
||||||
senesenwsweseeseesewseseenesewwsee
|
|
||||||
nwnwnwsenwnwswesenwenwnwnwnwnwnwnwswnwnwnw
|
|
||||||
eeweeeeeesweneeeseeneeneee
|
|
||||||
wwsenweswsewswneswswnweneswneenww
|
|
||||||
eeneneneeneeeeenewswneneeseenee
|
|
||||||
swwseseneswseseweseseswneesenesesese
|
|
||||||
eeeeneneneneneweeee
|
|
||||||
swsenesewseswsenwnenwsesweswsenwswswswnw
|
|
||||||
nwnwswsweswnenwnwnwnenenwnwnwnwnwsenenw
|
|
||||||
swsesweseseseweseeseswnwsesesenwseswsesw
|
|
||||||
eneeseneswswsweeweewnewne
|
|
||||||
neneeseenenenewenenenewnenenwswesw
|
|
||||||
sweeswwewsweewnwenwnwnesesenwesw
|
|
||||||
swswswswswswneswswswsw
|
|
||||||
eseseeneeeseewenwweeeeswsesese
|
|
||||||
swswwnwswnwwwswewweswwwwswswwe
|
|
||||||
wwewswwnwwwwwswwwwwweww
|
|
||||||
enenwnwwnwwwwsesese
|
|
||||||
wwwwnwswwwswswwwewwwew
|
|
||||||
wnenwneeswneneneseneewsw
|
|
||||||
sweswnenenwewsesenwsenw
|
|
||||||
wsewwenwnwnwwwnwwwnwnwwwnwww
|
|
||||||
eseeeeeeseeeseneeneeewwwee
|
|
||||||
nwwnwewsewnenenwwnwswwnwwwswnwse
|
|
||||||
wwswwwwweswwswwswswewwwneww
|
|
||||||
swnewnwnwnewseswewnesweswswesesw
|
|
||||||
nwnwnwswnwnenwnwnwnwnwnwewnwenwnwnwnw
|
|
||||||
swseweswnesewneesenwnesenwwseesew
|
|
||||||
wenweseesenwseswsesweswnenwneenwse
|
|
||||||
seeneneneeeenweneene
|
|
||||||
nwnwnenwneenwneswnenwnwnwnwswnwnwnwnwnw
|
|
||||||
esesesweswneneneswnwnwnenwneneseww
|
|
||||||
nwnwwenwnwnenwnenweswwenwnwnwnwnenesw
|
|
||||||
senewsewswswseseneswseseseseswsesesese
|
|
||||||
nwnwnwsesenenwneneswnwnwewnesewnenese
|
|
||||||
neesesewseseneseseseeseeseseesewsese
|
|
||||||
swnewneswwswswwwnewsesesenwswswnwsew
|
|
||||||
neseseswswwseseeswsesesesesesewseswse
|
|
||||||
swsweswseswswneseeswswswnwnwswwwswneswnw
|
|
||||||
seeeeseswsesesesesenwsesesee
|
|
||||||
nenenwnwnwnwnwswsenwnwnwne
|
|
||||||
eswsweswswsweswseswswwnewswwswswswsw
|
|
||||||
seneswneswswseswswseswswseswswsenenwswswsw
|
|
||||||
eswswseswnwnwsesewseseswseneeswswnesww
|
|
||||||
seseseesesenwsesesenesewseseseseseesesew
|
|
||||||
swswswswnweswswnewswswswswswwneswwswsw
|
|
||||||
neeswnenenesweeneneeneneeneenenewne
|
|
||||||
neswwswnwnwnwwseseneneewwsesewsew
|
|
||||||
eseseswwwseenesenesesenenwwnwseseswee
|
|
||||||
swswswseseseseswwswneeswswweswnwsesene
|
|
||||||
neneneneenesenwwweneswnwswwnwswnenwne
|
|
||||||
neeeneeeseeneswnenenenenwewnee
|
|
||||||
nwwnwewsenwnwnwenwesenwneewwnwsw
|
|
||||||
seswewnwwnwwswnwsenwnwswseenesweene
|
|
||||||
seswseneseswswseseseweesewwswwnesw
|
|
||||||
neseeneneneswneeneenenenewneneneenw
|
|
||||||
nwnwsewnwsenesenwwnewenw
|
|
||||||
senwneneswewnenenesenenenwewwnene
|
|
||||||
nenwenwwswwwwwwwwwewwwwse
|
|
||||||
sesenwsesesenwseesesenwnwswswsenewese
|
|
||||||
eeenenenwnwsweeeeeeeeeeneneswe
|
|
||||||
swwwseswwseswswwswwneswswwwnwsww
|
|
||||||
nwnwwnwwnwnesewnenwnwwwwnenwwwesese
|
|
||||||
seswswnwswseseseswseswneseseseewswsese
|
|
||||||
seswswneewneneeswswnwswwwswswnweswse
|
|
||||||
nwnwnwnwwnwsenwnewnwnwnwneenenenwnwnesw
|
|
||||||
nenwnwnwnwwnwesenwnwnwnwnwsewwnw
|
|
||||||
neswwnesenwneswwenwnwsenwnweeswsese
|
|
||||||
wwnwnwsewnenwwswwnwwwnwwnwnwwew
|
|
||||||
sewswseseneswseseswswneswseneseseswsesw
|
|
||||||
swwwnwwwswwswwwwwsewwwnwesww
|
|
||||||
seneswswwswwnwenwnwwswseeswwwwwwsw
|
|
||||||
neneswneneswnenesenenenewnenwneneneenw
|
|
||||||
nwswseseneseseswswswnewswseseseweswnesenw
|
|
||||||
nenenenenwneseneeneneneneneeswnenenwnee
|
|
||||||
swseneeeeeeeweneswneweeswwnw
|
|
||||||
nenenwneeneswneseenewnwswwnwenenenw
|
|
||||||
senenwnwwnwsewsewnesenenwwnewsewww
|
|
||||||
swweeenenenenewseeeeewsenwnee
|
|
||||||
nwneeseseseseseseseseseswse
|
|
||||||
eeeeweeeeweeneeesweneee
|
|
||||||
swswseseesesesesesewseseseseneswsewnesesw
|
|
||||||
eeenwseeeswnweeeeeeeeeeeesw
|
|
||||||
swswswswsweewswswswwsweswseswswnwnww
|
|
||||||
sesewsenwseeseeseeeenwnweswnesesesw
|
|
||||||
seseesesesesewseseeswseeseneesesenw
|
|
||||||
neeenwnenwsweneneseeenee
|
|
||||||
seenewesenwseseeseseseseee
|
|
||||||
nwswswsweswswwwwwswswswwswsw
|
|
||||||
wwwwnewwswnewwwnewwseswseww
|
|
||||||
eeseseseseseseseseesesesesenwenw
|
|
||||||
wwewwwwwwwnwwwww
|
|
||||||
swswswwswnewswneswswseswwswswwwswsw
|
|
||||||
wswneswswswwwwneswwseswswwswwswswsesw
|
|
||||||
nwnenwnenwnenenenewneneneseenwsenwswnwne
|
|
||||||
wnweswenwneeswswweseneseneeeenw
|
|
||||||
wnwneneneenenwnenenenene
|
|
||||||
newswwswweeswseseswswwseneswwnew
|
|
||||||
wsweneeseseseseseseseeseeseseeswene
|
|
||||||
sesenwseswseseseswseewnwseseswsese
|
|
||||||
seswnwnwneesenwseneewswnenwee
|
|
||||||
nwnwnwnwsenwnwnesewwnenenenenenwnenwnwnenw
|
|
||||||
senewesweeneswewsenwe
|
|
||||||
sewewswswwwwswnwwwnewwwwwswsww
|
|
||||||
eeneeeeeneeseneeeneneneeswnwnw
|
|
||||||
swseswwsewswseseswswseneswswswseseswneswsw
|
|
||||||
nenenenwneneseneneneneneneeeeneneswnwne
|
|
||||||
wnwsenwnwnwwsewnwnwnwnwnwewswnenenw
|
|
||||||
nweeeeeneesweneeeeneeneeswesw
|
|
||||||
sesewwnewwwwwnwwwnewwseeww
|
|
||||||
nwswswnwswneswwwnwswswsweeswnweeneee
|
|
||||||
wwwwwwwwswwwwwsewwnenewww
|
|
||||||
nenwsenwseeswneswseseswswenwswswseswsww
|
|
||||||
swswwswnwswwswswwswswwswwwewwnwew
|
|
||||||
wnwnwnwnewseswwewnwwwnwnwwnwsew
|
|
||||||
weseeseseseenenewseesewswsesesese
|
|
||||||
nenenenwnwneswnwneneseneneenwnenwnenew
|
|
||||||
nwseeeeswnewsewseeeeesesewesee
|
|
||||||
wwnwwewwwwnwenwnwwwwswnwwww
|
|
||||||
nwnwnwswnwnwnwenwnwnwnwnwnwnenwnwnwnw
|
|
||||||
wseswweseseneswnwneseswsewswswseese
|
|
||||||
neewseeesweeneenee
|
|
||||||
enwseswswswseseswswswswwswswsenwnwe
|
|
||||||
sewwnwwewwsewwwwwenwsewwwne
|
|
||||||
wewswswwnwnenwswneeswnwnesesenwesw
|
|
||||||
swswnenwneswswswswswswswswwswseneswswswse
|
|
||||||
wswwswswwswneweswewnwswswwsewwe
|
|
||||||
wnwwnwwsewswwwwwsenwwwswnenwswnee
|
|
||||||
seseeswenenesesewsewswneneseseesenwse
|
|
||||||
sesesesesesesenweneseseseseneswsewswsese
|
|
||||||
wnwnenenesweneeweneseeeseeene
|
|
||||||
sewnwwnwnwwnwwwwnwnwwsenwneww
|
|
||||||
wwswswwnewneseswnewwsenewswwwsew
|
|
||||||
nenesewneswnwenwwnesw
|
|
||||||
nweeeeeeseeesenwneswneeweene
|
|
||||||
nwnwwnwnwnwwnwnwwnwnwwwwew
|
|
||||||
seseseseseseseseswsenwseswsesesenesesese
|
|
||||||
seeswnwswnwnwseswsenesesweswse
|
|
||||||
seseeseseseseeseseenwsewseseswnenesewse
|
|
||||||
wweswnwwwnwsewwnwnwwnewnwwnwnwenw
|
|
||||||
neneswswswswswswwswneeswwswseseswswswse
|
|
||||||
sewnwseseswnwswseswsesenwseswseneseseswe
|
|
||||||
seseseseseeneseewseswneseeseseseseese
|
|
||||||
ewswseswnewswwwswwwswewwnew
|
|
||||||
swwewwswnesenesenwwnewnw
|
|
||||||
seseneseswsesenwseseswwnesesesewse
|
|
||||||
newswwswwswswswwswwnewswswswwsesw
|
|
||||||
wseneeeeswnwneenweneneweeeeeee
|
|
||||||
wswsewswswneswsewneneneswwwwswwsw
|
|
||||||
swwneeneswswwwswwwsenwswwneswnene
|
|
||||||
seeeeneeeeeswenweeeseseswsese
|
|
||||||
sesweeenwnewnwnwneeenwswsewsenwsw
|
|
||||||
seswnwseeseewnwswneenwnwseswneesee
|
|
||||||
neswnwwnwnwswnwnwnwnwnwnwenwnwnwnwnwnw
|
|
||||||
swseswswswseswswneswsw
|
|
||||||
neeswneneeswsewnwnwneswewnenwenee
|
|
||||||
swswseswswseswseswnwseswswweswswswneswswse
|
|
||||||
seseewseeseeeswseseseneseeewee
|
|
||||||
eeeeeseeweswwseene
|
|
||||||
swswswswswswswswswswseewneswswswswswsw
|
|
||||||
senwwwnewseesesenwnwenwwswnwnenwnwnw
|
|
||||||
eeeseswneesweeeeenweeeenee
|
|
||||||
newswnesweneneweneneneene
|
|
||||||
nesenwnenenwnwswseswenwwwwsww
|
|
||||||
senewswswwseswswnwwsw
|
|
||||||
newwwwsewswwwwswnwsewswsw
|
|
||||||
nwnwwnwnwsenwnwwnwnwnwnwnenwnwwwenw
|
|
||||||
swsenwnesesesewswswswswswswswswseswswsw
|
|
||||||
seneseseswwesewseseneseseeese
|
|
||||||
wwwsewwwwnwnwswwwwwwwewwsw
|
|
||||||
neewneeswenenenenenenenenenenewnenew
|
|
||||||
nwnenwenwnwnwnwwnwnwnwnenewnwneenene
|
|
||||||
enwwwwwwwwwsenwnwwewww
|
|
||||||
senwnwnwnwnwenenwwswneenesweewswswne
|
|
||||||
nesesesesewsewnesenwseswseswsenwsesesw
|
|
||||||
seseswswswseseenwseseneswnwnw
|
|
||||||
seseseseseseeeseeweeseseswnwsenesenw
|
|
||||||
nenewwswseseswseenwenesenwwwesenwswse
|
|
||||||
nwnwnwnwswwnweswenwnwnwnwnwnwnwenwswnw
|
|
||||||
wwwenwsesewnwnwnenwsenewsenwenwwse
|
|
||||||
swsewswnwwwswewnw
|
|
||||||
enwnwsenwnwenwnenwnwnwnwnwwswnwnwwew
|
|
||||||
@ -1,2 +0,0 @@
|
|||||||
17773298
|
|
||||||
15530095
|
|
||||||
86
src/day23.rs
86
src/day23.rs
@ -1,86 +0,0 @@
|
|||||||
use aoc_runner_derive::aoc;
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
|
||||||
struct Cup(u32);
|
|
||||||
impl Cup {
|
|
||||||
fn as_idx(self) -> usize {
|
|
||||||
self.0 as usize - 1
|
|
||||||
}
|
|
||||||
|
|
||||||
fn from_idx(idx: usize) -> Self {
|
|
||||||
Cup(idx as u32 + 1)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct Cups {
|
|
||||||
current: Cup,
|
|
||||||
cups: Box<[Cup]>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Cups {
|
|
||||||
fn parse(input: &[u8], total_len: usize) -> Option<Self> {
|
|
||||||
let mut cups = vec![Cup(0); total_len];
|
|
||||||
let input_iter = input.iter().map(|x| (x - b'0') as u32).chain(input.len() as u32 + 1 ..= total_len as u32);
|
|
||||||
for (curr, next) in input_iter.clone().zip(input_iter.cycle().skip(1)) {
|
|
||||||
cups[curr as usize - 1] = Cup(next as u32);
|
|
||||||
}
|
|
||||||
|
|
||||||
Some(Cups {
|
|
||||||
current: Cup((input[0] - b'0') as u32),
|
|
||||||
cups: cups.into_boxed_slice(),
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn do_move(&mut self) {
|
|
||||||
let taken_1 = self.next_cup(self.current);
|
|
||||||
let taken_2 = self.next_cup(taken_1);
|
|
||||||
let taken_3 = self.next_cup(taken_2);
|
|
||||||
|
|
||||||
let mut dest_cup =
|
|
||||||
Cup::from_idx((self.current.as_idx() + self.cups.len() - 1) % self.cups.len());
|
|
||||||
Cup(((self.current.0 as usize - 1 + self.cups.len() - 1) % self.cups.len()) as u32 + 1);
|
|
||||||
while dest_cup == taken_1 || dest_cup == taken_2 || dest_cup == taken_3 {
|
|
||||||
dest_cup = Cup::from_idx((dest_cup.as_idx() + self.cups.len() - 1) % self.cups.len());
|
|
||||||
}
|
|
||||||
self.cups[self.current.as_idx()] = self.next_cup(taken_3);
|
|
||||||
self.cups[taken_3.as_idx()] = self.next_cup(dest_cup);
|
|
||||||
self.cups[dest_cup.as_idx()] = taken_1;
|
|
||||||
self.current = self.next_cup(self.current);
|
|
||||||
}
|
|
||||||
|
|
||||||
fn next_cup(&self, cup: Cup) -> Cup {
|
|
||||||
self.cups[cup.as_idx()]
|
|
||||||
}
|
|
||||||
|
|
||||||
fn iter(&self, starting_cup: Cup) -> impl Iterator<Item = Cup> + '_ {
|
|
||||||
std::iter::successors(Some(starting_cup), move |&prev_cup| {
|
|
||||||
Some(self.next_cup(prev_cup))
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day23, part1)]
|
|
||||||
fn solve_d23_p1(input: &[u8]) -> usize {
|
|
||||||
let mut cups = Cups::parse(input, input.len()).unwrap();
|
|
||||||
for _ in 0..100 {
|
|
||||||
cups.do_move();
|
|
||||||
}
|
|
||||||
cups.iter(Cup(1))
|
|
||||||
.skip(1)
|
|
||||||
.take_while(|&cup| cup != Cup(1))
|
|
||||||
.fold(0, |accum, cup| accum * 10 + cup.0 as usize)
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day23, part2)]
|
|
||||||
fn solve_d23_p2(input: &[u8]) -> usize {
|
|
||||||
let mut cups = Cups::parse(input, 1_000_000).unwrap();
|
|
||||||
for _ in 0..10_000_000 {
|
|
||||||
cups.do_move();
|
|
||||||
}
|
|
||||||
cups.iter(Cup(1))
|
|
||||||
.skip(1)
|
|
||||||
.take(2)
|
|
||||||
.map(|x| x.0 as usize)
|
|
||||||
.product()
|
|
||||||
}
|
|
||||||
159
src/day24.rs
159
src/day24.rs
@ -1,159 +0,0 @@
|
|||||||
use aoc_runner_derive::aoc;
|
|
||||||
use std::collections::HashMap;
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
|
|
||||||
struct Pos(isize, isize);
|
|
||||||
impl Pos {
|
|
||||||
fn step(self, dir: Direction) -> Self {
|
|
||||||
match dir {
|
|
||||||
Direction::E => Pos(self.0 + 2, self.1),
|
|
||||||
Direction::SE => Pos(self.0 + 1, self.1 -1),
|
|
||||||
Direction::SW => Pos(self.0 -1, self.1 -1),
|
|
||||||
Direction::W => Pos(self.0 -2, self.1),
|
|
||||||
Direction::NE => Pos(self.0 + 1, self.1 + 1),
|
|
||||||
Direction::NW => Pos(self.0 -1, self.1 + 1),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone)]
|
|
||||||
enum Direction {
|
|
||||||
E,
|
|
||||||
SE,
|
|
||||||
SW,
|
|
||||||
W,
|
|
||||||
NW,
|
|
||||||
NE,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Direction {
|
|
||||||
fn parse(input: &[u8]) -> Option<(&[u8], Direction)> {
|
|
||||||
match input {
|
|
||||||
&[b's', b'e', ..] => Some((&input[2..], Direction::SE)),
|
|
||||||
&[b's', b'w', ..] => Some((&input[2..], Direction::SW)),
|
|
||||||
&[b'n', b'e', ..] => Some((&input[2..], Direction::NE)),
|
|
||||||
&[b'n', b'w', ..] => Some((&input[2..], Direction::NW)),
|
|
||||||
&[b'e', ..] => Some((&input[1..], Direction::E)),
|
|
||||||
&[b'w', ..] => Some((&input[1..], Direction::W)),
|
|
||||||
_ => None,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn iter(input: &[u8]) -> impl Iterator<Item = Direction> + '_ {
|
|
||||||
struct Iter<'a>(&'a [u8]);
|
|
||||||
impl<'a> Iterator for Iter<'a> {
|
|
||||||
type Item = Direction;
|
|
||||||
fn next(&mut self) -> Option<Self::Item> {
|
|
||||||
match Direction::parse(self.0) {
|
|
||||||
None => None,
|
|
||||||
Some((rem, dir)) => {
|
|
||||||
self.0 = rem;
|
|
||||||
Some(dir)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Iter(input)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug, Copy, Clone, Eq, PartialEq)]
|
|
||||||
enum Tile {
|
|
||||||
Black,
|
|
||||||
White,
|
|
||||||
}
|
|
||||||
impl Tile {
|
|
||||||
fn flip(&mut self) {
|
|
||||||
*self = match *self {
|
|
||||||
Tile::Black => Tile::White,
|
|
||||||
Tile::White => Tile::Black,
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day24, part1)]
|
|
||||||
fn solve_d24_p1(input: &str) -> usize {
|
|
||||||
let mut tiles: HashMap<_, usize> = HashMap::new();
|
|
||||||
for pos in input.split('\n').map(|line| {
|
|
||||||
Direction::iter(line.as_bytes()).fold(Pos(0, 0), |pos, dir| {
|
|
||||||
pos.step(dir)
|
|
||||||
})
|
|
||||||
}) {
|
|
||||||
*tiles.entry(pos).or_default() += 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
tiles
|
|
||||||
.values()
|
|
||||||
.filter(|×_flipped| times_flipped % 2 == 1)
|
|
||||||
.count()
|
|
||||||
}
|
|
||||||
|
|
||||||
#[aoc(day24, part2)]
|
|
||||||
fn solve_d24_p2(input: &str) -> usize {
|
|
||||||
let mut floor: HashMap<_, Tile> = HashMap::new();
|
|
||||||
for pos in input.split('\n').map(|line| {
|
|
||||||
Direction::iter(line.as_bytes()).fold(Pos(0, 0), |pos, dir| {
|
|
||||||
pos.step(dir)
|
|
||||||
})
|
|
||||||
}) {
|
|
||||||
floor.entry(pos).or_insert(Tile::White).flip()
|
|
||||||
}
|
|
||||||
|
|
||||||
for _ in 0..100 {
|
|
||||||
let mut tiles_visited = HashMap::new();
|
|
||||||
for &pos in floor.keys() {
|
|
||||||
run(&floor, &mut tiles_visited, pos);
|
|
||||||
}
|
|
||||||
for pos in tiles_visited
|
|
||||||
.into_iter()
|
|
||||||
.filter_map(|(k, should_flip)| if should_flip { Some(k) } else { None })
|
|
||||||
{
|
|
||||||
floor.entry(pos).or_insert(Tile::White).flip();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
floor.values().filter(|&&tile| tile == Tile::Black).count()
|
|
||||||
}
|
|
||||||
|
|
||||||
fn run(
|
|
||||||
floor: &HashMap<Pos, Tile>,
|
|
||||||
tiles_visited: &mut HashMap<Pos, bool>,
|
|
||||||
pos: Pos,
|
|
||||||
) {
|
|
||||||
if tiles_visited.contains_key(&pos) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
let n = neighbors(floor, pos);
|
|
||||||
let black_tiles = n
|
|
||||||
.iter()
|
|
||||||
.copied()
|
|
||||||
.filter(|&tile| tile == Tile::Black)
|
|
||||||
.count();
|
|
||||||
let tile = floor.get(&pos).copied().unwrap_or(Tile::White);
|
|
||||||
if (tile == Tile::Black && (black_tiles == 0 || black_tiles > 2))
|
|
||||||
|| (tile == Tile::White && black_tiles == 2)
|
|
||||||
{
|
|
||||||
tiles_visited.insert(pos, true);
|
|
||||||
} else {
|
|
||||||
tiles_visited.insert(pos, false);
|
|
||||||
}
|
|
||||||
if black_tiles > 0 {
|
|
||||||
run(floor, tiles_visited, pos.step(Direction::E));
|
|
||||||
run(floor, tiles_visited, pos.step(Direction::SE));
|
|
||||||
run(floor, tiles_visited, pos.step(Direction::SW));
|
|
||||||
run(floor, tiles_visited, pos.step(Direction::W));
|
|
||||||
run(floor, tiles_visited, pos.step(Direction::NE));
|
|
||||||
run(floor, tiles_visited, pos.step(Direction::NW));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn neighbors(floor: &HashMap<Pos, Tile>, pos: Pos) -> [Tile; 6] {
|
|
||||||
[
|
|
||||||
floor.get(&pos.step(Direction::E)).copied().unwrap_or(Tile::White),
|
|
||||||
floor.get(&pos.step(Direction::SE)).copied().unwrap_or(Tile::White),
|
|
||||||
floor.get(&pos.step(Direction::SW)).copied().unwrap_or(Tile::White),
|
|
||||||
floor.get(&pos.step(Direction::W)).copied().unwrap_or(Tile::White),
|
|
||||||
floor.get(&pos.step(Direction::NE)).copied().unwrap_or(Tile::White),
|
|
||||||
floor.get(&pos.step(Direction::NW)).copied().unwrap_or(Tile::White),
|
|
||||||
]
|
|
||||||
}
|
|
||||||
33
src/day25.rs
33
src/day25.rs
@ -1,33 +0,0 @@
|
|||||||
use crate::split_once;
|
|
||||||
use aoc_runner_derive::aoc;
|
|
||||||
|
|
||||||
const MOD: usize = 20201227;
|
|
||||||
|
|
||||||
#[aoc(day25, part1)]
|
|
||||||
fn solve_d25_p1(input: &str) -> usize {
|
|
||||||
let (pubkey1, pubkey2) = split_once(input, "\n").unwrap();
|
|
||||||
let pubkey1: usize = pubkey1.parse().unwrap();
|
|
||||||
let pubkey2: usize = pubkey2.parse().unwrap();
|
|
||||||
let loop_size = loop_size_from_pubkey(pubkey1);
|
|
||||||
encryption_key_from_pubkey(pubkey2, loop_size)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn encryption_key_from_pubkey(pubkey: usize, loop_size: usize) -> usize {
|
|
||||||
let mut value = 1;
|
|
||||||
for _ in 0..loop_size {
|
|
||||||
value *= pubkey;
|
|
||||||
value %= MOD;
|
|
||||||
}
|
|
||||||
value
|
|
||||||
}
|
|
||||||
|
|
||||||
fn loop_size_from_pubkey(pubkey: usize) -> usize {
|
|
||||||
let mut loop_size = 0;
|
|
||||||
let mut value = 1;
|
|
||||||
while value != pubkey {
|
|
||||||
loop_size += 1;
|
|
||||||
value *= 7;
|
|
||||||
value %= MOD;
|
|
||||||
}
|
|
||||||
loop_size
|
|
||||||
}
|
|
||||||
@ -13,9 +13,6 @@ pub mod day2;
|
|||||||
pub mod day20;
|
pub mod day20;
|
||||||
pub mod day21;
|
pub mod day21;
|
||||||
pub mod day22;
|
pub mod day22;
|
||||||
pub mod day23;
|
|
||||||
pub mod day24;
|
|
||||||
pub mod day25;
|
|
||||||
pub mod day3;
|
pub mod day3;
|
||||||
pub mod day4;
|
pub mod day4;
|
||||||
pub mod day5;
|
pub mod day5;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user