diff --git a/day23/data/data.txt b/day23/data/data.txt new file mode 100644 index 0000000..03624e4 --- /dev/null +++ b/day23/data/data.txt @@ -0,0 +1 @@ +962713854 diff --git a/day23/data/sample.txt b/day23/data/sample.txt new file mode 100644 index 0000000..ab40847 --- /dev/null +++ b/day23/data/sample.txt @@ -0,0 +1 @@ +389125467 diff --git a/day23/index.html b/day23/index.html new file mode 100644 index 0000000..44d986c --- /dev/null +++ b/day23/index.html @@ -0,0 +1 @@ +404 Not Found diff --git a/day23/module.py b/day23/module.py new file mode 100644 index 0000000..900837a --- /dev/null +++ b/day23/module.py @@ -0,0 +1,122 @@ +from aoc.input import get_input +import copy +import itertools +import time +import collections +import re +from aoc.partselector import part_one, part_two +import functools + +def pw(line): + return line.strip() + +def p1(): + inp = get_input(pw) + cups = [] + for sample in inp: + print(sample) + cups.append(int(sample)) + + def domove(cups, current): + current = current % len(cups) + selected = (cups+cups)[current+1:current+4] + selected_index = sorted([(current+1)%len(cups), (current+2)%len(cups), (current+3)%len(cups)], reverse=True) + print(cups) + origcurrent = cups[current] + targetid = cups[current] - 1 + print(current, cups[current], selected, targetid) + for c in selected_index: + cups.pop(c) + target = None + if targetid == 0: + targetid = 9 + while target == None: + try: + target = cups.index(targetid) + except: + targetid = (targetid - 1) + print('-', targetid) + if targetid == 0: + targetid = 9 + if targetid < -1: + break + print('-', targetid) + print('destination', targetid, target, cups) + cups.insert(target + 1, selected[-1]) + cups.insert(target + 1, selected[-2]) + cups.insert(target + 1, selected[-3]) + + while not cups[current] == origcurrent: + cups = cups[1:] + cups[0:1] + print(cups) + return cups + + + current = 0 + for i in range(5): + cups = domove(cups, current) + current += 1 + cups = cups + cupss = ''.join(map(str,cups)) + print(cupss) + a, b = cupss.split('1') + print(b + a) + return inp + + +def p2(): + inp = get_input(pw) + cups = collections.deque() + for sample in inp: + cups.append(int(sample)) + + total = 1_000_000 + + for cc in range(10, 1_000_000+1): + cups.append(cc) + + backup = collections.defaultdict(list) + def fixnext(): + next_ = cups.popleft() + # ok, now is the time to put these values back + if next_ in backup: + cups.extendleft(reversed(backup[next_])) + del backup[next_] + return next_ + + def domove(): + current = fixnext() + selected = [fixnext(), fixnext(), fixnext()] + unavailable = set([0, current] + selected) + + # find dest + target = current - 1 + while target in set(unavailable): + target -= 1 + if target < 1: + target = total + backup[target] += selected + cups.append(current) + + for _ in range(10_000_000): + domove() + + while (next_ := fixnext()) != 1: + cups.append(next_) + a, b = fixnext(), fixnext() + print(a*b) + return inp + +result1 = None +if part_one(): + start = time.time() + result1 = p1() + print(round(1000*(time.time() - start), 2), 'ms') + + +if part_two(): + start = time.time() + p2() + print(round(1000*(time.time() - start), 2), 'ms') + + diff --git a/day24/data/data.txt b/day24/data/data.txt new file mode 100644 index 0000000..795de59 --- /dev/null +++ b/day24/data/data.txt @@ -0,0 +1,599 @@ +neesewweeseeseesewseeenwneswe +neneswnenenwnenenwnwenesenenwnwnenenwne +neswnweswseswnesewsesweswwswswneswsew +neneeneneeneewnenweneneeeeswswe +seeeeseseseeeeweeeseneenweeee +swseswwswswswswwswswswswswswneswwswsw +seseswsenwseseseseseseseesenwswswsenwse +seswnesenwsesweseswesenwsesesesewsenwsese +enwwwsewwnwwwwnenw +eeewseeeeseseseeeeseseseeneese +eseneswwseseseseseswsesenwseseseswswwse +nesweeeneneneenenwnenenenwseseeneenew +eseeeeseeneewnwseseenwnweeeene +nwswnwsenwwnewnenwnwnwnwnwnwenwnenwnwnwse +swneseneseseswseswwseneswnwseseesesesesw +wswnwwwwewnwwwwnwwwwwwnwnww +ewwwswwwwnww +wwnwwwwwwwseswwewwwnewsww +swwwnewswwseswswswswswswswswsw +wswwwwnewwwsewwwswwwwwww +nenweseswsesesesenwsewsesewsesenenesesw +swswswnwsenwseseseswseseswsesw +seseewseeseseseesesesesesesesesesese +swesweeeseneeneeeeeeeswenwese +wnwnwnwwwnwnwnwwnwwwnenwnwse +neseeseseseswsenesewesenesewswnwnwse +sweeneswwswswswnwswswsw +eeeeeeweeeeeeeeswenwneeew +swwesewwnwswenenenwnwnewseswwswew +seswswswnwesenwwswswsweeswwenwnwenw +nwnewenwwswnwewsewswnesenwenwwsew +nwnwnwnwswenwnwswsenenwwnwnenwnwseese +wwnewwwwwwnwwwswnwnwnwnw +nwenwwnwnwnwnwnwnwwnwnwnw +sewnenewwnenenwswnwenwnwseneeswnenwne +enewneenwneneeenewswseseneewewne +neneneswnwswneewnenenenwneeneneeneene +nweeeneeneseneneneneneneneeneneee +swwnenwnwnwwnwsenwwnwsewnwnwnwnwnwnenw +wwseswwwwnwneesewwseswnwsenwwwnew +seseswseswneswseswswseswwswseswneswsw +nenenwswnenwswnwneneswswenewewneene +sweswnwwneswseseseneseswseseswneseswsesesw +nwnwnenwnwwsenwnwnwnenwwnwnwswsenwnww +wnewwsenwwsenwwswwwnwwnenwnenww +nwwwwswseswwswnesw +eseeeeeeeeeeeeeswenewee +neeneneeswneneeneneneeenewnwnenenene +wneeswnwwsewenwneneswnwneesewneesw +nwwnwneseswnwwenwwsenwenenwnwseeseww +swnewwswswswswwswswwnwswswswseswwsw +sesenwseswneswswswswswnwswnwseswseeeswsese +nwnwnwswnweseswnwnwnwnenwnwnwne +swsweeeeeneeseeneswneswnwnewsesw +seswseswseseswswseseswseneseweseswsesese +eeneenenenenenesweneneenene +seeseeeeeseeeeeeeeeenwese +nenwnewwswwwnwwswwnwnwneswwsewnw +seseseswsesesesenweeesenwseseseesesese +wwwnesenesweswswnwwwwnwnwnwsewne +swswweseseswswsweseswswswswswseswsww +eneeseseneenwwnwwneneeseeseswnwne +seswswswenesesweseswnwswsesenwwsesw +wwwwswwwwnwwswnwneesewswswsew +wnwseeneswseeeseseeseewwseenwnee +wseeseseseeseseseseseesesesese +seswswseeseseswseswswseswseswnw +wwwwwwwwwewswwswnwnwseswwwwsw +eeeenwsweeeesweeneeeswenene +nwneewnwnewnenwenweneneswsewsenwsw +neeeneneeeeeeeneeeneeeneew +nwnwnenwwnwnwnwnwnwwnwnwnwnwnwnwsenwnw +sweenwnwswnwnwnwnwnwnenewnwsenwneeswnenw +seswseneneswnwswnweseseswsesewsesewswwe +wswwnwsewnewnwwswwewwswwsesewnww +wseswseseswswsesewnenwnwseneseneswsew +swseswwsesenesenwnwswseeswneswswseseswnesw +swnenwneneneenenewnwnenwnwseeswnwwne +senewnwnewseseneeseswswnenwsewwsesese +nwsweswswswseswswsweswswswnwseswswwnwsw +nwnenwnenwswnwnenenenwnwnenwnenwswneneenw +nwnwnwnwnwnwnenesenwnwnenwnenwnwnwnenwnw +wwnewwnwwwwsewwwwnwwwwww +swseneseseswseswseswseseesesesesew +eswswwswswswswwwswswswnenesweswswsw +swneneweneneneneneseneenenweeenene +eseeeseseesesenweseneseesenwnwsewse +eeeeeeeeeeeweeeeeeee +swneesewneenwnenesenenesenenenwwnewne +seseswsewseneneseswseswsewsewseswesese +enweneeneneeneeswneeseeneeee +nenenenwsenwnenwenenwwneneneswnenenesw +seseseeseneneeseseeseesesesewewse +neswseswseseseswswseswwseenwseswswnwswsw +eneneeweeeeneseeeneeeeeewnene +nwenwswesweswenwe +seswswswseswswseswswswswwneswswswswneswsw +enenenenenwnenenenenenenenenesenenene +wseswnewneswwwswswwswewnenewwse +wwseneseweneswneeneeswnwne +wnwwwwwwwewnwwnenwwsewwsww +seneswneneenewswnenenwenweenenenesee +seseeseeswewseeeeenwenwsweene +eneeeneeeeeneneeeneeneswwesenene +newswnwsenwwswenwnewne +nwnwnwnwwnwsenwnwwnwwnwnwnwnwnwnwnwnw +neneeeeneeneneeeeneeeesweee +wnenenwswsewenenwnenwneneswnweenenwwe +nwwsenenwseswwsenwwnewnenwswwnwsenw +wnwwnwwwwewnewwwwwsewwwwswnw +nwnwsenwnweseswwswsenenenwnw +neenenenwnwnenwneneswnenesenenwnenwnenwne +nwwsenewnenwnesene +eeeeeeesewsweeeswenweenwe +swwnewwseseswwswwnwnenewwnwsenese +wwswswseeneswswnwwswswswwswswswswswsw +sewnwnwnenenwenenwnwnwnwsenwswnwnwnwnenwnw +nwnwnenenwneswnwnenwnwswnwneenwnwnenwnwnw +nesenenwnwnwnwenenwnewnwnwnwnenwnwnww +wnesesesweseeeswneseenew +nenwewesenwnewwwnwenewswnwnwseenw +weeseeseeseneseseseeseeseesesee +swwswwwswswswwswwwwswswwwew +nwnenenenenwneswnwnwsenenenenenenenwnwnwnwe +seseseseeseseseseseseeesenwseeswseee +swseseseswseseswseswswsenesesesesesw +nwnenwnesenwnwnenwnwnenenwnwwnwnenwnwnwne +swswswswswseseswsesweseseswnwswswsw +ewwnwwwnwwwswweww +seewsenenwswseswswnwseswseseswneseswsesw +wnewwnwwwwwwwwwwwsewwwww +sesesesesenwseseseseseswseseseesenwnwse +swswswswswswswswswswswswswswsweswswnwsww +swswewseswswwwsewswwnweswswswswnenw +nwsewwnwnwnwnwwnwnwwwwnwnwnwnwnww +wneneseneneneneneesewnenenenenene +eenwseeswswswnweseeseswneeenwnwne +neneneneneneneneneneswswnenenenenenenenene +swswswsesewswswnenwswswswseswswswswseesw +nesenenwseswswswnwswseseswseswsweswseswe +seeswenwsewneswneneswswnwswnwseswsene +nenwnenwnwnwnwnesenenenenenenwwnwnwnwnwnw +wneeneneneeneneneenenenesweneneenene +nwenenwnenenwnwnwnenwnwswseenwswwnesw +neseseneneseswswswwswsenesesw +swswswwnweswsewewswswswswswswswsww +nwswswseseswswseseeswsesesewseseswnesesw +wnenwneswnenenwseenwnwenewnwnenenw +eeeneneneswnenenenenene +swswwswswswswwswweswwswswwnwwwww +nwswnwwnwwnwswnweseswenenwesenwnwnew +seeseseseseeeseseeseseenweeweee +swseseseseseseseswseseneseseseseseswsenw +nenwnenenenenenesenenenwnenenewnene +nenenenweenewneneswnesenenwnesenewne +swswswswwswswswneswswswswswswswsw +nwsesenwnwseseseseweeseseswsesesesese +eeneneneneneseneenenenenwnenenenenene +sweswneswneneseswneenenenwneneswne +eswseeseseeseseseseneseeeseewnee +neneeeweeeneneneeneneneeneeese +sweswswneswwwwswswswnwswnwseswswswwsw +wnwseseseeswnwenwsesweseweseseswnwse +seseeeswsewseseseesesenee +nenenenwneneneneneneneneneseenenenenene +nwnwnwenwnwnwnwnenwwnwsenwnwnwnwnwnwnw +wsewwwwswnwnenwwneenwwwnwsenwwnwse +eseeeswenweneweseseeeeeeeee +nwnwwwnwswnwwwwewnwnwwwwwnwwnw +esesesenesesewseseswsesenee +seswenwnesenweswsenwnewsese +nwnwswnwnwenwenwnwnwnwwnwnwnwnwswnwnwnwnw +seswnwwsesewneseseseeeswseswswsenesenw +wseswnewsewwwseswnenenwneswswne +esweeeeewneeneneneeeeeeee +eeweseswwswswwwnwswnwesenwwnenww +wswswwneswwnwwwswswwsewe +enwswwnwnwnenwnwnwnwnwnwnwnw +nwnwneneneneneneenenenenwnwneseswnwnwnww +wnwnwwwnwnwnwnwsenwnwwwnwenwswnenw +neseseneseewnesesenwseeeseswwseese +swswswwswswswswnewswswswswswswswsww +wwwsewwwnwswwnwnwnwnewnwwwnwnw +enwwwneesesweseeseneswewsesenesesese +esesesesesesenwsenwseseesesesesesesesesww +eweeeeesweeeeeeeenweee +newswseswseseseswsweswswnwneswwswsesw +nenwswnwsenwseswnwnwwswweesesewnenwse +seseseseseswseeswseswseswsenwswseswseswse +seseenewesesesesesesesesesenesesesesw +sweneesewsenwswswseseeeseenwenee +seeweseswnweseseeseeweeeeese +esweseeeeseeeeeewneeeeese +wwwswnwswswswweewswswswswwswwsw +swseswsenesesesesesesesenee +swenwnwnwswnwneswnwnwnwnenwnwnwseeswe +swnwnenwnwnenwnenwnwnwnenenenwnweenwwnw +nwswswenwneseswseenwnesenenewwnwwse +esweewneneeseneswnenee +eeeseneweneneeneeseneneneneneenenew +swneswswwwwswswswswwwwswswswwsww +eeseeweneeeesesese +senenwsenwwnenenwnwwnwnwnwnenwsenwsenenene +eneeenewwsweeeneneseeswneewenw +senwnenewenwnwneswweneneneseeneenesw +eesenweeseesweewewneeeseee +wsenwewnwwwwnwse +nwnwnwsenwnwnwnwnwnwnwnwnwnwnwsenwnwnwnwnw +eeweseneeeeweeneneeeneeenw +eseeeeseeseeseseeseseseenweese +sweeswneseesenenenwswwneneswnweenwnw +nwneenwswnenenenenwnwnwnwnenwnenwnenwnene +wnwnwnwwnwwwnwnwnwwsewnwnwenwswnwww +wwwwnwwwwwwwwwwwwwwenw +wwwswwswsewwswnewnwwwewswwneww +senwswseseesenesewseseseneeswsesesesesese +nwnwswsewsewswnenenwew +newnenwnenwnwneneenenenenenenwnwnenene +wnwnwnwnwnwwnwsewnwwwwwnwwnwwe +swswswswneswswswswswseswswswswswswseswsw +eneneneeneneseswnenenenenenenenewnenene +nwnwnwnwnwnwenwnenenwnwnwnww +nenwwswnwnesewenwnesewwnwsenesewswsw +nwwnenenwneeneneseenewnenwnwnenwnenwne +swswswswswswswswswswwwwsweswneswswe +eneneneneneneneswneswnenenenenewnenenene +eeeneeeeeneewseneeeeeeene +eseseeseneseswwsesesesesewsesesenwsw +nwnenenesenewnenenwnenenenenwnenesenenenene +wnweewswnwswewneswnesenwwewswew +wswswswsenweeeweneeeneewneeesene +eeeeseeeseeeseseeenweeesesw +swswswnwnwenwnwswnenwnenwnene +swwswswswswwwwswwweswwwswswneswsw +wwswwswseneswwwswswswenwsweswsenew +swwswswseswseswswseswswneseswswswseseswnesw +eeneeeeesweeeee +swwswswwswwswwneswwneswswswswswwsw +seesesenwseseseswse +nenwnwnwesweneswnenenenenenenwswne +nwnwwnwnwwnwsenwnwnwwsenenwnw +swseswwnwswswswswswseswswswenew +enweeenwesweeeeeeeeeesenwsw +eswseenwswnwsesesesenwseewwseenesenw +wswseeswneeeneewneneneeenwneeswnw +newnwsenwnenweneeeneesweseeswnw +nwnwwswwnwwwnenwnwnw +wnesenenenwnenenenewnenwnenenesenenene +swswwswsenwswswswswswswsw +sewseswswneseseswseneswswseesesenesese +swwseswwswswswwnwswwwwnewwwwww +wwwnewsewwwwwwwwwwwwwww +newnenwwnwesewnwnwwenwwnwsenwwnwsw +nwwsewwwnweseneneswswwsenewwsenw +swswswwswswnwsweswswseswswswweswswswswne +wswseseswsenwnweseeseswswse +nwnwnwnwnwswnwwnwnwnenenwnwswwnwnwewnw +neswswswseswswsenwesweseneseswwwnwswnwsw +ewwswswwswswswwswswswswswnweswwwsww +eeseeseeseeeeseeeeewseeese +neeeenwneweeeeswseeeneeneee +neenenwswnenesenenenwneneneneneneewwne +neneeeneneneswnenenenenenewnenenenenee +neswnenenenwnwswnwnenenenenee +wwwwenwwnewwwwnwwwwwwwnwsw +nenewsenesweseneeneenwwnenwneswwsw +sewwwnewwnewswwwww +senwnwenwwnwsenenwnwswenenwnwswnwnwsenew +nwnwnwnwnenwnwnwswnwnwnenenwnwne +wswseeenwewnweeeewswseesesese +wwswwwwwwwseneeenewwwwwse +eeeseeeeeneesweeeeeeeese +neesewneneneneeneeeseeeenweneee +seseseseseswseseseseseseswsesenesesesese +senenwnenenenwnenenenenweneswnewnwnenene +sewswwesweewswwnwswswwwwswsww +eeneneeneneesweneeneneneswnenenwe +swneswswsesesesenwswesewwneseswsweswnw +nenesweneeeneeneneneneneneneee +nwwsewnwnwnwwnewnwnwnwwnwwwnwsenw +wnenenwseswneneneswenenwsenwneswnwne +eeeeesweeeeeeeeneeneeee +nwnwnwnwwwnenwswnwnwewnwwwwwnwnww +newnwnwnwnwsenwnwnwsenwsenenwnwwnwnwnwnww +eseseswseseseseseneseseseeswenwesew +wswwwwswwwwwwwwwnwwwsewsw +nwnwnwnwwnwnwnwnwnwwwwnwnwnwwnwnwe +nweneseneneseewnwnenwwseseneneeenee +nwnwnenwnwnwnwnwnwnwnwnwnenwsenwnwnwnwse +seseseseesesesewsenwsesese +sweenweesenwwewsenwswsesweenene +nwswnwnenwenwnwnwnwneeswenwnwnwwnwnwne +nenenwwnenesenesenenenenenenesenenewswnw +senweswnweseesweeesenwseenweenw +seswsweseswewswnwnwswswseswnwseswswne +enwnenwnwnwnwsewnwnwswwnwnewnwsew +eneeneweneeeeeeneeeeenweesw +seseseseenweseswwewneeew +neenwsesweeenesweeee +nweenenenwneneseswesweeneneneneene +eseeeeesenweeesweeseeseeseee +nwnwnenwnwnwsenwnwnwnwnwnwnwnenwnwnwnwwnw +seseseswswswswseswnwswsw +eeswenwneneeeeneneeneeeeeenene +wnwnwnwwwnwwnwnwwswe +esenenenenenenwneeswnwnwnenenenwnwwnw +seseseswsesenesesesesewse +nwnwswnwswwnwnwnwnwnwnwnwwnwenwnwwew +seseseeeeeesweeseeseene +seeswwwneeswswnesweswswwenwswnwsww +nenenwnwnwswenenenwnwnenwnenenwnwnwnwne +swseswswwswswswnwnwnwseswwwwewwsw +neenwseeneesesenewneenwnwneeenwsesw +wswswswseesenwneswnwswseseneseswwswswsw +swenesenesesenwswsesweswwnwswnwwsenwsw +nwnwnenenwnwnwnwnenenenwnwnese +swswseswseeswsweswswseseseswswswwnwswswse +swswsweswwwswswswsweswswseswswswswsw +nwnwsenwwnwnwnwsenwnwnwnenwnwnenwnwwnene +nwwnwnwnwwnwwwwwwwnwewwewww +swwswswseswswswswswswsweswswswswswswsw +nesesesesenwewswnwsesesesesenw +seseeeseseeseeseeeesenwseseeswwe +swseswswswswseseswsenwnwswsw +swswwwwwewswswewnwnwnwswewwsw +swswnewswswsenewswnenwneeesenwswwsw +swswswswswswswswswswswswnewswswswwswsw +eweseeenwseseeseeseseeseseseee +sewseseswesewseseneseswswseesenwnwsw +wswwswwwwwnwswswswsenewwswwswww +nwnwnenwwnwwwwwnwwnwwwnewswnwsw +neseswwsenwnwswwsenwneesenene +sewewwswwwswswwsewnwneswswwwnw +nenenewnewsweeeeeseswswseenwnee +wwwnwnwneseswewswwswseswwswenewsw +neswsewswswswwswwswswswwwswswsw +nwnwnwenwwnwenwsewenwnwswwwnwnwnwnw +nwnwnenenwnenwnwnenewnwseneswnwnwseenwnw +neweeseenwseeeeeeseseenwneeew +seswnwnweseweeswnwnewnesweswnenenw +eneewneneeneeneenenwnesweeseene +eenwsweeneneneneeeneeneeeneenene +neneswnesweneenewneseneswnenwnenwwse +swneswswsesewwseswseswswswseneswswwswne +nwnwnwnwnwnwnenwnwnwnwnenwnwswenwnwnw +wswwswwwnewswsenwwwswswsewwswsw +wsewwwwwwwwewwnwwwwwww +seswsweseswswnwswsesenwseseseswwseswse +wwwswwswwwswswswswswswwswswswew +swswseseswswsesesenwneswswswseseeseswwsese +enwswnwnwnwnwneneneeswnwneeswnewnwnenw +swswsewswswnwswnwneswswwwwnwwewse +newneeneneneneneenenenenenewnewenese +nwnwnewnwewenenw +swwnesenwseneneswnenenenwnw +eeeeeeeneeeeeseweeneeene +swswswwwsesewswswswwwnwwwswwswwne +ewsenwwewwewnwwwwwwnewwww +nenewneeneenenenenewneneeneneneseneene +swswsewseswswseswweswswswswneswswseswsw +swseswseswsesenwsweswwseswseswseswenese +swewwnewseswnwwwwswswwwsewnene +seenesesweseenwnwseseesesewsesesweese +nwswsenwenwnwnwswnwewnwnwnwnwnwne +wsewwnewwwwwnwswwwewwwnw +eeeeenwswnwswee +wswwwwwwwwwwsenewwwwwwww +nenenenwseseneeseneneneeswnwesenwnwnwse +eneswswsweweseswswsenwswswswwwnesese +nenwnwnwsenwnewnwnwnwewenwnenwnwnwnwnw +newnwswwwwwnewswsewwwwwwswswne +sewseneseseseseseseseseseeseewsesese +enenenweeneeeeneneneeeneeneeesw +esweeeneeseeeesweeeseswnwnwenw +seseswsweeswswwseseswswseswseswsesenw +nenwneneenwnenwnwnenwneneneeswneneneneswnw +nwnenenwnwswnwnwnwnenwnenwnwnwnwnwneswne +ewnewnwswswweeswwewnwenenewwswse +eeesweseenwenwesweweeeeseswne +nenwswnenewwnweneneswewneneeneneswnee +swseseseseeswseseswseseswsenwseswsesenw +eneseeeswseseesesweeenwse +enenenenwwnwneenewnenwnenenwswnwsesenw +wswwswswswswnwswsweswwswswswswswswswsw +nenwneswnenenenenenenenenesenenenenenenene +swnenwnenewsewneneneneneneseeneenenenenw +wwswwnewswswwwwwenwsw +seeeseeenwneseseseeeeeewsesese +seneseseseswseseseswnwswseseswsenenewsw +swseseeswseswswswseswswwswswswswswswsw +nwnenenewnenenwneenenwseseneneneswnewne +newneneneneneneneenenesenenenenwnenew +eeneeeeweeneneeeeeeeeswenwsw +nwesesweseseswsesewsesesesesesesesesese +wesweeweewswwnenweeneenesenene +swswnewswswwnweneseseseneseswwwseesw +wwswnewnenwswswswwewwwswswnewwse +neswseseseseseswseseseswswsesesw +neneneneneneswnenenenenenenenenwnene +wnwenwwnwnwnwnwwnwnwwnwnwwwnw +senwneswnenenwnwseneneswnenwnenewnwnenee +newwwnewwwwwwsewwswwsewneww +nwsenenenenwswnenenwsenenenenwnenenenene +eseeseeseseseeseweseseeseesesee +wswswwneewnwnwsewwwnenewseneswww +eeseeeeeeeeeeeneeeeeew +senwwneneswnesenwsewnenwnwnwnenwnwnew +sewneseseseneswswswswswsweseseswseswwsw +eseseeneseeewneenweeenwnwswenee +swnwneswweneeneewneswsenwesenwesee +neneswnenenwnwnenenenenenwswneneeswnene +eeseseeesewsesee +seseesenwswseseseswsese +neenwseeenwsewwwseesenesesesesesw +enweseneeeneneenewenewenwswese +wwwsewwwswewwswwwnwswwwswsw +swnwnwwseewnwnwwswnwwnwnwwnwwwnewse +seseseseeseseseseseseeswenwseesesesese +neneneneneneeneneenenenenewneeneee +weenwnenwwsweseseswnwsee +sesewwwnwwwnewwww +neewewneeneweeeeeeneenesenene +nwwnwwsewnwnwnwnwnwwnwnwwnwsenwnwnwnw +senwnwnwseseseseswwsenwsesenwseneesenw +wewswwswswswwswswwwwsww +nwseneseswwnwswnwseseenwewseeeenwsee +neneswnenenenenwnenesesenenesenenenwnenw +nwneneeeswnewsenweenenenweswne +eeenwneswseenewswnwneenwseneneeeee +neneneeeneseesenewneenwwneneneneswne +swswswswswswswswswswswswswswswswneswswsw +enweeeseeseeeenwswweeeeeee +wenwnewseenwnwneweenwnwnewnwnwnwnw +swswswsweswwwswswwnewswwswwwseww +nwwnwnweseswnwwswnenenwnwnwwswewnw +wnewwwwsewwwewwwwwwswww +swseswswswwswswswswseesweswswsesenwsw +sweswnwseeswswseswwswnwswswswswneswsw +wwswswseswwneneswseswswwswnwwswseww +sweswswswswseswswswswswswesweswwswnwwsw +sewnenwnenwswnwswenenewnwnenwseewnw +wnwwneenesewneeneenwnesewnewnwnenene +seswswswneneswswswseswswwswesenww +swswswwseneswswwswseswswswswesw +nwwnwnwwwnewwwsewnwnwnwnwnwsenenwnww +seseseswseswswseseseswseneeseseswswsewsw +eeneweseseneesesweseeeeseeseese +swseswswseseswswnenweseswswseswseswsenw +wwwwwwwwweswewwwwwwwnew +swseswswswswswswswseseseswswswswwneswswsw +wwwswwwwswwwwwwwwnewsesww +nenenewneneneneneneneeneswnenenene +nenenwneneneneneneewneneneneneswnwnene +nwneeneneneneeeneeeswneswenwswneswse +nesenwseeseswneseesenwsesesweneeesesw +swwswwswwwseswwwwnwwswsewneww +wwwwwwwsewwwnew +eenwesweeeeweneneeseneeewee +swsenwswnwwwswneenwwnwnwenwenenwnw +swnesweswnwswneenwsesweneneswnwnwnwnw +ewswwnwseswsenewnewwsweeneneneese +sweseneseswnewenenwnwwswseseseseswsene +nwnwnwnwwsenwnwwwnwnwnwnwwneewnwnw +nwnesenenwnwnenenwnwnenwwnenenenenwnene +nwnwswnwnwnwsenwnwnenwnenwnwnenwnenwnwnwnw +wsenwwenwnwwswwnenwwewnwnwnwwwse +wwswswnewwswwwwwwwswwweww +wswswwswswwswnwswswswswseswswswswsww +wwnwwewnwnwnwnwnwseeswwww +eeeeeeeeeesweeeeenwseeeew +eewneseenesenweneswseseeeweee +swwwswswwswswswswseswswwswnwswswwsw +nweeeeneneeeeseweweesweeeene +weewneweswnwwsenenenenenwesene +sesenwseseseseeweseeseswenwsenwsee +esweeeeeeswnenenwenweeeeee +wswswwnwswswwswewnwswswswswswswswewsw +sweswswswswswnwswseseswswseseswswswswsw +nwewseeseeeneswswseeweseeeneenw +eseswnwneneeneneeenwneneenee +swwswswwneswsewswnwnwwseeswwwsew +neesewweneseseswnwnewnweneswnwneswnee +nwseswseswswswswnwswsweswwswseseswswe +wnwwwsewnwenwwwswnwwnwnwwwwww +eseseseeneesesesenesewsesewsesesewse +swnwnwswnewwenwnwnwnwwwnwnenwnwwsww +nwnwnwnwnwnwnwenwnwnwnwwnenwnwsewsenew +neseswseswwseseswenwnwswseswseseesew +nwwnwnwnwnwswesweeenwnwswseeswnwnw +eeeeeeseeeeeesenweeeesese +nwenwwnenwnenenwnwnwnenwnwneneswnw +nwswswseswnwsesenwseseswswse +swseswneswsweseswseswwwswswswnwswswswsee +enwsesesesewseeseeeseseee +wenenesesesewnwneneswnwsweweneeswenw +sewwswswnewsewewswswwwswswnenesesww +seewseseeseseseseseneseseeeeeeee +nwnwnwnwnwenwswnwnwnwnwnwenwnwnwnwnww +swswswswswwsweneswswswnwswswswswswswswse +neneeneeneneneswnenenewnenenenenenene +nenenwewnenenwnene +sesesewseseseseseswseseseswnesesenesew +nwnwnwwnewseenwnenwswnwswnwneneneene +eseeeeseseenwesweeeenweeswee +neswwnewswsewswwseswswswswwwnwseswswsw +nwnwnwnwnenenwnenwnwneswneenwnwnwnwseswsw +wswwwwwswewswwwwnewsewswwnw +nwwneenenenwnwneenenwnenenesenenwnesw +wwewwnwwswewswwwneewwneeww +wswnweseseseseswseseswsesesenesesenese +wnwewnenwnwwnesenwnwnwnwsenwnwnwnwnwnwse +seenewswswswswsewswswswseseswswswswsese +eweseswseeeenweeeeeeeeeee +eswsenwneswswswswwnwswneswneseseenwnenw +nenwnwnenenwnenesenwnw +neneneneneneeswnenwneneseneneenwsw +nwwnwwwwnwwnwnwwnwwe +neeneswsesesesenesenesewseseswesenwsewse +seenwswsweeswswswswwwnwseswseswsee +sweswnewwwswnwnwewswwswwswswwww +eewneenwneeeeswneeseseeee +wewwwwwwwwwwewwwwwwww +nwsweneneneewnwnenwnenenwnwnwne +nenwneneeneswenenewneneseneswwnenenene +swnwseswseswswseswswseswswswseswswswsese +wnwwnwnwnwneenwnwnwnwnwnwnwenwnwnwnw +wwswnwnewenwwswswwnewwwwwwwne +neewnwnwwnenenesweneneeenwseneneswnwne +eneswnenwswnwnenwnwnwne +wswnenewneswwswwwseswneswswnewswnenw +eseeseeeseseenweeeenweeeeeswse +eswsenweneeeeeneeeweneeneneeene +nenewnesesenenenenewsenenwnwne +newwwnwwnwnwnwwwseswwwwnwnwnenwww +nwnwnwnwnwenwnenwnwnwwnwnwnwnw +swswswswswswswswnwseswswseswswswswswsw +nwnwwsenwnesenwnenwnwnwnwnwwswwnwww +senenwswswswwswswswswswswswswsewswswswsw +nwwwwwwwsewwwwwwnewwwe +wnenwswnenweswnewnwnwenwnwswnwnweesenw +nweseeeswenewseeeneeeweswneenwe +eswnwseswnwswswswewswswwswswswswsww +swsesesenwsenwswswsewneseseseenwsw +seseseswseseneseseseseswswseswseswneswse +nenenenenwsenwsenwswsewwwwwswnwenwse +neeneneneseneneneeeswnweneeee +eeneneeneneswneneenweneswnenenenewne +esenwwswwnwswewwwswswswswnwwwsw +wwwseseswnwnwneeenwwnewswnwswwwe +wswseswseswswswswnwswswsweneswswswsesw +nwswnwwwnwnwenwnw +swsesenwneseseseseseseseseseeseseesese +swsenewwsewnwwwwswewwneewwse +wwsweswnwnwnwsenesewswneneneseewne +nwnwnwnwnwnwnwswnwnwnwnwnwnenwnwsewnwnwne +swseswswsesewswsesweswswswswswswseswsw +nwnesewnenenenenesenenenenenenenene +nwnwnenwwnwnenwnwnwnwnwnwnwnenenwnwnwnwse +neeesweneneenee +eeseseseneswweeesesenweeesenweenw +wswwswswwwwwwwwewwwswweww +seseseesesewsesesewsesesesesesenesese +nwnenewseseneswneneweeswnenesenwewne +neseeneneneseenenenenenenenenwewnenee +seseseswseseseseseswesesenwswseseswsesw +swswsenenwewneseeeneeeneenesenwwe +sewwwnesesenwwnewwwwwwnww +nwseesweseswseswnwwsesweswsenwnesenenw +wwneseseeeseseeseseseseseneewseseee +nenenenwnenwnwnwneenwnewwneenenenwnw +sweeneeeeeeneeeeeeswneeee +wseeswwswwwwwsweswwnwswswswswww +eneneneeneswneneeneswneeneneneeee +enenenenenwnwwswnenenese +swnewnweseseewneneeswswswwnweww +seswsesesesesesesesesesesesenesesesesese +wswswswswseswnewswneswwwswswneswewsw +wnenenenenwnenwwenwnwsenwnwnwnenwnw +seseeeeeweeeeeeeenwseesesese +eeeesweeeeneeseeenweesewesene +swnewswneswwseneswwswneswswswenwswse +nweneeneneneneneneesenwswswenenesenww +seneneneeenenenenenenwneneneeeenene +swwswswswswswwwwswswswweswwswsww +nenwneswnenenwnenenenenesenenwneneenwnwne +swswswsweswswnwswswswswswswswswswswswsw +sesewnenwnenenwnenenwneenenenwnwnwswnenwnw +sesenwseseseseseseseseseeseswsesesesese +seseseesenwsenwseseswseseseseseswsewnese +wwswnwwswwwwwwwwwneewnwww +eeeseswsesesesenwnweseweese +neeeseeeweneeeeeneenwswnwnesw +wnwnwwwnwnwnwewswnenwwwwwswwnw +swnwseseswwswneseswneseswswswseseeswsw +eswnwnwswswwswswswswsweneswseswswneswswsw +nwseseeseseseseesesesesesee +seswseswswewwswnewnwswwwswnwswww +wwwwwnwnwnwnwnwewswnwwnwwnwnww +neseswnwswswseswseseseswseswseswseswswsesw diff --git a/day24/data/sample.txt b/day24/data/sample.txt new file mode 100644 index 0000000..3dc2f67 --- /dev/null +++ b/day24/data/sample.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 diff --git a/day24/index.html b/day24/index.html new file mode 100644 index 0000000..44d986c --- /dev/null +++ b/day24/index.html @@ -0,0 +1 @@ +404 Not Found diff --git a/day24/module.py b/day24/module.py new file mode 100644 index 0000000..71c8c2a --- /dev/null +++ b/day24/module.py @@ -0,0 +1,153 @@ +from aoc.input import get_input +import copy +import itertools +import time +import collections +import re +from aoc.partselector import part_one, part_two +import functools + +def pw(line): + return line.strip() + +def p1(): + inp = get_input(pw) + directions = { + # e,w 101 + # ne, sw 101 + # 101 + "e": [1,0,-1], + "w": [-1,0,1], + "nw": [0,-1,1], + "se": [0,1,-1], + "ne": [1,-1,0], + "sw": [-1,1,0], + } + i2 = [] + for sample in inp: + cnt = 0 + steps = [] + + while cnt < len(sample): + if sample[cnt] in directions: + steps.append(directions[sample[cnt]]) + cnt += 1 + elif sample[cnt:cnt+2] in directions: + steps.append(directions[sample[cnt:cnt+2]]) + cnt += 2 + i2.append(steps) + + b = collections.defaultdict(lambda: 0) + for n in i2: + c = [0,0,0] + for s in n: + c[0] += s[0] + c[1] += s[1] + c[2] += s[2] + print(c) + b[tuple(c)] += 1 + count = 0 + for x in b.values(): + if x%2 == 1: + count += 1 + print(count) + + return inp + + +def p2(): + inp = get_input(pw) + directions = { + # e,w 101 + # ne, sw 101 + # 101 + "e": tuple([1,0,-1]), + "w": tuple([-1,0,1]), + "nw": tuple([0,-1,1]), + "se": tuple([0,1,-1]), + "ne": tuple([1,-1,0]), + "sw": tuple([-1,1,0]), + } + i2 = [] + for sample in inp: + cnt = 0 + steps = [] + + while cnt < len(sample): + if sample[cnt] in directions: + steps.append(directions[sample[cnt]]) + cnt += 1 + elif sample[cnt:cnt+2] in directions: + steps.append(directions[sample[cnt:cnt+2]]) + cnt += 2 + i2.append(steps) + + b = collections.defaultdict(lambda: 0) + for n in i2: + c = [0,0,0] + for s in n: + c[0] += s[0] + c[1] += s[1] + c[2] += s[2] + b[tuple(c)] = (b[tuple(c)]+1)%2 + + count = 0 + for x in b.values(): + if x%2 == 1: + count += 1 + print(count) + + minx = min(map(lambda x: x[0], b.keys())) + maxx = max(map(lambda x: x[0], b.keys())) + miny = min(map(lambda x: x[1], b.keys())) + maxy = max(map(lambda x: x[1], b.keys())) + minz = min(map(lambda x: x[2], b.keys())) + maxz = max(map(lambda x: x[2], b.keys())) + + def iterate2(): + b2 = collections.defaultdict(lambda: 0) + for oc,v in b.items(): + x,y,z = oc + if v == 1: + for s in directions.values(): + c = tuple([x+s[0], y+s[1], z+s[2]]) + b2[c] += 1 + for c, x in b2.items(): + if x == 2 and b[c] == 0: + b[c] = 1 + elif (x == 0 or x > 2) and b[c] == 1: + b[c] = 0 + + + for i in range(100): + iterate2() + count = 0 + for x in b.values(): + if x%2 == 1: + count += 1 + print(i+1, count) + break + + + count = 0 + for x in b.values(): + if x%2 == 1: + count += 1 + print(count) + + + return 0 + +result1 = None +if part_one(): + start = time.time() + result1 = p1() + print(round(1000*(time.time() - start), 2), 'ms') + + +if part_two(): + start = time.time() + p2() + print(round(1000*(time.time() - start), 2), 'ms') + +