Taddeus Kroes преди 5 години
родител
ревизия
50e7363bf1
променени са 2 файла, в които са добавени 421 реда и са изтрити 0 реда
  1. 44 0
      2020/24_hexes.py
  2. 377 0
      2020/input/24

+ 44 - 0
2020/24_hexes.py

@@ -0,0 +1,44 @@
+#!/usr/bin/env python3
+import sys
+
+DIFFS = {'e': (1, 0), 'w': (-1, 0), 'se': (0, -1),
+         'sw': (-1, -1), 'ne': (1, 1), 'nw': (0, 1)}
+
+def walk(line):
+    x = y = 0
+    vert = ''
+    for char in line.rstrip():
+        if char in 'sn':
+            vert = char
+        else:
+            dx, dy = DIFFS[vert + char]
+            x += dx
+            y += dy
+            vert = ''
+    return x, y
+
+def flip(coords):
+    tiles = {}
+    for xy in coords:
+        tiles[xy] = not tiles.get(xy, False)
+    return list(xy for xy, black in tiles.items() if black)
+
+def evolve(black, days):
+    black = set(black)
+    for day in range(days):
+        makewhite = set()
+        white = {}
+        for x, y in black:
+            nbs = [(x + dx, y + dy) for dx, dy in DIFFS.values()]
+            black_nbs = sum(nb in black for nb in nbs)
+            if black_nbs == 0 or black_nbs > 2:
+                makewhite.add((x, y))
+            white.update({nb: white.get(nb, 0) + 1
+                          for nb in nbs if nb not in black})
+        black -= makewhite
+        black |= {xy for xy, black_nbs in white.items() if black_nbs == 2}
+    return black
+
+black = flip(map(walk, sys.stdin))
+print(len(black))
+print(len(evolve(black, 100)))

+ 377 - 0
2020/input/24

@@ -0,0 +1,377 @@
+seswenenenenweweenenewneweeeneee
+eswnweswneseseseneeweeweswneeene
+seseseseseswseseswsesesesenesesesenesenw
+enenenweneneenenwneenewneswswnenese
+eswnwswseseseseneeseswweswswwseseswse
+nesesenwswwnwenenwewwswnwwsweenw
+nwnwwwenwnwwsewwnwnewsenwswwnww
+swweseswswsenwneeseseneneseswwsewsesw
+swseesewnwnwnewnwewnesesenwew
+sweneswnenwneneneeeneenenenwenenee
+neeneeseseenwnwnwwenwswnenenewswsesw
+wnwnenenenwesenwswswnenenenenene
+senwsewnwnwnwnwnwwwwewnwnwwnwsenwnw
+eeswneenewseenwneswnenenenwewsesene
+sweeneseneeeseeneewneenenwnwswww
+senenenewwnenenwsesenwswneneneneenenew
+swseswseswwwswneswnwnewwwswswwwnese
+wswwswwnwneseswsewwewwswweswwnww
+newwneswsesweeswnwwwneeneesesenesw
+swenwwseseswswnwnewsewnewseswwnww
+nweeseeenwwweswenenweeneswwee
+newswnwsenwnwsenwwewwesewsweswsene
+esewswsewseeseswsesese
+wseswswseswswswwswsenwwnewswnwwnwsww
+nwnwwwwwwswwenwnwwsewwnwnewnw
+wwnwwnwwwenwnwwenweswewwwww
+nwsenenenwwneneneswnenenenenenwne
+wswwwnwnesewswswnewesenewenwnenwe
+swseseseseneneseswnwsewesesesesesesee
+eneswnwwnewnwwnwnwwnwswswswnewnwnwww
+newwwwwwswwwswsewswswwwnewe
+nwwenwnwnwswnenenwsewseswnwnenwnwnenw
+wwsenwwwswwwewwnwewnewwe
+swnenwsesesenweeseseeseeseswesesese
+nwwnwswnwnwnwenwnwwwnw
+nwwnenenwnwsewenewnwsewsenwnwwsenw
+nwnwseeeseseesenwsweswseseseenwese
+swswwwwwwwwewwwswwsw
+neeewnenewnenenwnenwnewswnwnwnenesene
+nenwwnwsenwsenesenenenweeswneneewsene
+enwnwsesewsesenwneseseeeweseswwse
+swswnwnwswswswwewwwweswswewswswswsw
+nwsenwwnwenwnwnewnwnwnwnweswnwsew
+nwnwnwnweneswsesenwsenenenwnwwesenwnwne
+neneswseseneswwnwswenenwwnwswnwenese
+nenwenwseneneswneswnwswnwnenw
+eeseeneeneneesweeeeesenewwnwe
+swswswswsweswneswswnwswneswnewswswswe
+swseswswswwswswswswswnwswswsweswneswsw
+swswnwnwswseswswswswswseseswswnwseswswne
+wnwnewwwnewwwswwwwswwnw
+wenwewnwnwwwwswnwwwsewnwwwnww
+swswswsewswswsweswswse
+wswwwswwnwwnwsewwsenewnewnewwnw
+swswswswseswswneseswswswwseneswneseswne
+seeseswneswswseswswnwseswsesweswswsew
+senewnwnwswneswenesesenwswnwnenwnwsenwne
+wnenenwwsesewnewnwswsewwswnwnwww
+nenewnenenenwswnenwseenenenwnenenwseene
+nwseswwwwnewnesewwwneswwsewnewnww
+wwwwwnwnwswwsewnwenwnwnwwnwwnwe
+sesewsesesenwnewsweeeneenwsesweew
+nwnwnweswwnewwwwswesweneewsew
+swseswnewwswnwseswseeswswswneseswseswne
+enenwnenwenewwneneneneswnesenenwenww
+wseenweeeseeseneewswswnwnwswnwee
+neswnenenwswneneneenweseneeneeenwene
+senewwnenenwsenwsewswnewswsewwneew
+wnwnenwneswnwnwenenwnenenenwnw
+seswswswswneswswswswnwweseswseswswswsww
+neneenewseenenweeneswnenenenwnenee
+swnwnwenwewnwwswnwenwnwwnwwnwnwnwnw
+nwswnwnwneseswnwnwnwnwnenenewnwnwnenwnwe
+nesesenwseeswwnwenwseweseswnw
+wnwnwenenewswswwwwswnw
+swnewseseseseswseseswsesenesesenenesese
+neneneneneeweswneeneneneenesenwnene
+enwesenweswneeeeweeseneeseee
+eeeeewwseeeseeeweesenwsenee
+eeseseweswesewsesenwnwneeswnewnee
+wwnwseewnwwwwnewnwwwswwswnwww
+newnwsewsenwenenwsewnwsesewnesenwnwnw
+sesweseseseswwswseseswsesesenesenwnwse
+swswseswneswswswwswnesesesw
+nwnenwnwesenwnwnwesenwwseswnwwnwenwsesw
+nwnwneeweewnenwneneewneswwsenenwsenw
+seenwseeeeeeeneesewewesesenee
+nwnwswneesenenenwnwnenwnwwnenenwnwnwew
+esweeeeeeeeeeeeseewwnwee
+swsesesesesenwnwseswnwnwesewseeeseswe
+wwsewsewwwwsewwwwnwwwnwnw
+swwnwswswsweeswnwswswswswswswswswesw
+wnweswwwseswswswswseswnewwswneswnwenw
+eswseeeneeseeeneneneenenenenwnwnw
+nwswswseseseswswseseswsw
+swwneswswswneswswswneswsw
+swseseesenwseeseenwseseseswwsesesesw
+nwnwswsewnwnwnwnwnwnwewnwe
+neneenenesenwsenenenenwnenewnenenese
+neesweneneeneee
+nesenwnenesenwnwswnwnenenewnenenwnenwne
+swswwwwwseswnwnwnwnwswnwswsewesee
+nwsenwsewesweeeseseeeeewsene
+nweswsewswwneswwsenewswneseswsenwne
+sewswweswwnwseeswswwnwnwwneswnwww
+swsenwswwnwseswsewsenweeneseseswnesesw
+eneneneseeseenenweenesenwenewenw
+swseswnesenwseseseseneseseseseswseseseswne
+nwenenwnwnwswneswnwnwnwswnwnwenenwswnwwsw
+senwseseswwnwseseswswswswseneswseswsesese
+ewswenweeeeeeswseeeeeneee
+swswseseseneweseswsesewneseseseesewnenw
+neneswswewsesweswwswnenwsw
+swswwswswswswswswswneswswswswswneswswsene
+eneeneseenenesewneeneenwseewenew
+enwnenenewnwsesenwneneneswnenesenwnwwww
+seswnwnenwnenwnwsenenwnenewnenwnwneewnese
+nwnwwewnwnwnwnwwwwewswwnwnwnwsw
+swwwnwwnwwewwwwwenwweswesew
+swneswwenwwsenewswswnwwseewnwnew
+nesenenwsenenwnwnwnwnesenwnwnenwnenenenw
+swnewswswswswneswnewsenwswneswswwwswsew
+newewnenwswneseewneseseneneeewnee
+nenenwweenenenwneweeseneseneneese
+eseseeseeseswwneeeneswswnweenwenee
+newneswswnwnwwenwnwnwnwenweeneswnw
+eeeneeswwneseneenwsweenweeeenw
+enewsenwsewesesesesesewseeneseese
+swswswswwnwswswsweseeswnweswswswswswswsw
+wwwswswweweeewnewwswwswwsw
+nwseseseesenweswwwnwsweseswseenenwsw
+nwenenwwwwwwnwwsewnwwew
+sewswswnwswswswswsw
+neeneseeeeeeenweeeesewswewe
+swwneswnwswswswnwswswwesewwweswww
+enesesenweswnwneeswnenenewesenwsww
+nweeeseeeseeseswwseenewseneesesese
+senenwswseswwsweeeweneeneseewsenw
+neseswweenwnweswnwnwnwsenwswnwnwnwwenw
+nwsewswswwwswswswswenwsw
+sesenwseesenwseseseeee
+seseswsesweswenenwswseseswsenwswseswswsw
+nenewnenesweneneneenenwnewneneneesw
+wseneenesenwsewnwseswseseseesewsesee
+ewwwswwwnwewwswenwnewnwenwwe
+esweewsweneeneeneneenenwnewswnee
+seswnwsweseswsewswnwswsweswsesweswsw
+eeeewswewseeseneewnwnesenwsenwswe
+wnwswwseswseswwswswswnwwwswewwnw
+eswnwsenwnwnwwnwwnwnenewesweeswnwsenw
+nwseswwwswsenewnewwwewww
+enwneseneneswwnwnwnenenwwnenene
+swsweneeseewseenenwswsesenw
+nwenwwweswnwsesenwenenwnwnewnwnwnwnwne
+neeseswneseneweneneneneswnwneenenweene
+nwnwnwewnwnwneenwnenwswnesenew
+wwswwswswswseswwswswnesweswneswww
+neswwwwwswswsenwww
+senwnwesewnwnwnwswnwnwnwnwnwnwnwnwenwnw
+seeseneenenweeenewee
+eeeweeeeeeseeseenesee
+eeseeeenenwsweeewsweenwe
+newwswwwwwswneeswswswwwwwwswe
+wnenwnewwwwwweseenenwwwsese
+nwswneneewnwenwnwnwnwsenwnwnwnwnwswnewnw
+eseeewweeswseeeeneeeeeee
+neneneweneneneseenwwnenwnenwneneswnesw
+wnwseswnewneseneseeswseseesenesesew
+senenwsenwwwnwnwnwnwnwnewwnwwwww
+nweeeeneeneeeneswneswseenw
+sewseneeeseswnwse
+ewswnwneneeeneseseewnwse
+wseswswwswswnewwsweseswwswwnwww
+newwswnwwswwswwnenesewsweweenwse
+nwnenwsewnwnenwwwwwswnwwswnwnwsesene
+eeswswswswseswswnwwneswswnwswsw
+eneenweneeeeeswswneeneenenwnwse
+nweeneeeeeeeeeeeeswnweswse
+nenesenwnwnesewnwwnwnwnwnesewnenwnwnw
+swwnwnesesenwswnwswsweseeneenwsenw
+wsewsenewnwnenwwwswnwwsenenesewsw
+nwswnewseeeeeswenwwesweneseseseswe
+nwseseseeseseseseseseesesesese
+nwenwswsweweneeeeewnweseswseese
+eeeeeseseenwseseseeenwswneseese
+nenwsweewsewsewnwswnesewnenwseeew
+nwswswenenenenewnenwneenenwneneswnenene
+seseneneeeeweeeseeeswewseeew
+newseeeseseswsesesesesesesenwee
+nwewnenenenwnenenenenwnwswneenenwne
+eeseeeseswnenwwseeseewseeseesesee
+nesewswswwneewnenwswwwwwwwww
+eweneenweeeeeeeseeseeee
+eeeeeewsweeneeseeneneenee
+swswsesesweseswnwswwwnenwne
+sesweneneswswswswnwseswneswswswseswesenwnw
+seseswsewsesenenwseseswsesesenesesesesene
+seseswneswseseseseesenwsewseseesesenee
+eswwswswseseseswswseswwnewswswe
+weswnwenesweseenenweswenweeneenene
+nweseseesesenwswnwneseseenwseewee
+ewswswwswswwswsweswswswwnwe
+seesewneeseeseseewseseseee
+nwsweswseswewswseneneesenwsesesesesee
+senwneneneeswneneewenenwenwseneene
+sewneeeeeweeeeeweeeeesenene
+wnwwsenwnwwenwnwsw
+nwwnenewwnwwswseseewswswwseswwnwe
+swwswswseswwnewwweewwswwwswww
+sweswswnweswswswswswnwswswswsw
+swwwnewswewsewewswswswwsenwnenwesw
+neseseewnwsenenwnewnwnenwnenewnwneswne
+eswneeeeeeneeweeeneeeenesw
+seseseseseseswwseseweseeeneeeee
+swneenenwswweseseswsesenwseswsesewnw
+eeswnweseesweeeseenesenwesesesee
+nwnwnwsenwneswnwnewnwnwneenesenwsenenwne
+sewnwseewwwnewnwwwnewswseswwwew
+neneeeeswsweeenewenwe
+senwwnwnwnenenwwnwnwnwnwwswsenwnwww
+eeseeneeeeeweeneeenwseeww
+swswnwneneewweseswseswswnenwnwswsewsw
+wwswwewswwwwwwewneseswnewswnww
+wsweswnwswnwenenwnwnwnwwnwwenww
+wnwnwnwnwsweswnwswnenewswneenesw
+eneeneseseswsenwswwesenewenenwnwnee
+wwnwnwnwewwnwenw
+swnenwnwswnwnewnwnwnwseeeenwnwswenwsw
+wwwwnwneswwnwwnenewewwwseswwsw
+eswesenweneenenwnweeseeewseeene
+seswseswnwswwswseseseeneswswseseseswse
+weneeeeeneneneneneeweneewnesenese
+wsewwwsewnwswwwnwnwwwwwewwne
+nenwnenwwnenenwsenwnwnenwenwsenwswnwnw
+sweswnweewswswnwwswwwe
+nwnwnwwnwnewnwnwsenenwnwnwwnwnwesewwnw
+wenewnwnwwwnwwwnwwwseswwwwnwse
+seeswwswnwswwnwswneswwswwswswswswswsw
+wswswwnweseneww
+neeeneenenenweeeneeswneneeewsw
+nwwneewwsewswnwnwwswwnewnw
+swseseseesenewswnenwsw
+wwnwsenenwnwnwenenenwwwnwesenesenwnw
+nenwneseneneneneneeewneenwneswnenene
+neeeswnwnwnwswnwnwnwnwnwnwnwwnwnwnwnw
+swswwwesewnwww
+neswneswwnwswnesewwwwswwswswwswsw
+swneswswswneswswwswswswswwswswsew
+nwsewseseneswseseeesweseseesese
+wwnwnesewwwnwwnwnenwnwnwsewwsenww
+nwewwseweeeese
+seswwnwnenenewnesweeneneswnw
+nwsenenenenwnwwneenwnwneenwwnwnenwne
+nenwnwnwnwnwnwseneneseswnenenwnwswnwnwnw
+neswneswsenenwnenenenenenenenenenenenene
+senwseswnenwnesenwneneeneeswnenwe
+swnewnenenwnenesweenewwneenenenenene
+sesenewnwseswsesesesenesesenesewwswsesenw
+swswseswswseseswswswswwswneswnwswneseeswsw
+eneseswwneseewse
+eswsenwnwneseseswnwneeneeenew
+nweneneneeseswnee
+wsenwsewnenwnwneswsweswswswswwwese
+swswswswwsenwswsweswswseseswsw
+swnwwnwwwwenewwewwnwsewnewsw
+nenwsweeeeseswswnwnweee
+newnwseswsenwnwnenwnwsenwnwnenwnwwenenww
+wnwwwnenwnwnwwwenwsewsenenwnwenw
+neneneneneneneenenenwseesenwwewnenene
+nenenesewneeneneneeeneseneneenewne
+nwnwenwnwesenwnwnwnwnwnwwnwnwnwnwswnwnw
+nwnwnwwnwenwenenwnwnwswnwnwnwne
+nwnesenwwneewnwnwnwnwnwnwnwnwnwnwswnww
+wswswswwnwswnesewswweswsw
+wwnweseseneneeneseneesesesenwnwswwswe
+nwswnewenwnwswnwnwnwnwnenweswswnwnwnenw
+wwewnwwwseswswwwwwswwneww
+seeewswwnwsesesenewnenwesenewsesw
+nwswsesenenesweeseeswwwswwwwnwnww
+wswswwnwwnwneseseewwnwnewwwwne
+eneeeneeeeeeew
+sesweswswneswnewswswwswsesewseswswse
+sesesesesesenwneswse
+nwenenwswenwnwnwswnw
+swswswswswswswswsenwswswsw
+seseseswseneseswsewnwsewseseseseswseswsene
+sewwnwnwnwnwesenwnwwnwwne
+newnwnwnwnwnwneenenenenwnwnwne
+nwnwnweswnwswnwnwnwnwnwnwewnwwwenwnw
+neseseseseseseseesewsesenweeesewse
+seswesweesweneeneneewewneeeenw
+wsenenenenenenenenenenenene
+eswswseneseneswswnwswswswswswswswswswsw
+nweeseesweseneenwnwneeeeeenee
+wswnewwswwswseswneeswwnenwswseswnwsw
+enweeeswnweseeeeeeweeeesw
+nenewnweseeneeneene
+wwsewwwwnewnewwwwwwwseww
+eswnwwnwnwswewnwswwwwwnwwnwnwe
+eeenwnweeenwsesweseseeesesewee
+nwseseseeeseeseeenwenewseseswesesese
+swseneeeneeweneswnweneeesenwenene
+seeswswnwswsenesesenwseeseswsenwseneewsw
+neswneneeseneeneesweneenwnewnenenwsw
+nwswseswnenwnwnwnwnenwnwnenwwnwse
+eweneneneneneseseweswneenwwneee
+wsewwwnwsewwnwnenewwwwwwnww
+seeesweeeweseseneewenwesesesenwe
+seseesenwsesesesesesesesese
+swnwseswnwsesweswnwsesesw
+wewswnwwwwwwswwneswsesenewsesww
+eeeeswenenwee
+senweweeeneswnwse
+sewseswnenewsenweesew
+nwneeneenesweeewnweeeeeneesee
+wseswneswnwseneseswwnenwswnwseeswswswse
+neneeenenewenenee
+swenwswswseseswsewnwseswswse
+swwswswsesenweeseweeswwswwswswese
+swswnwnwenwnwsenwwnesenwsenenwnwwsenesw
+swnesweneenenesenenewneswwwesenenewne
+seseswneeeeseseesee
+nesesenwsenesesewseseeswswseseneseneswse
+nwnenwsenenenwnwsenwwnwnwnwnwnwnwwenw
+wewnwwewwwswwsesewnewwswwnww
+neneneseeenenenweenwneneweswenee
+nweswswnwswsenwseswseeswsenwnwswswesww
+wswwsewwwwnwwesewnwwewwnesw
+swwswwwneswwswswwswswww
+enewnenenesenenewwesenenwneneewnenw
+wswswswswswswwsweswswnwswswnwswswswswene
+wneeseseswseswseswsesenwseswseseswsenw
+wnenwnwwnwwsenwnwnesenwnwnesenwseneenwsw
+swnwnwnwnwnwnwnwnwnenwsenwnenwsenwnenene
+neeneeeneswseneeeeeneeneenewnw
+wnenwnwwsweenwnwnwswwswwsenwnwnwe
+sewswseenewneeswswnwwww
+senenwseswswesesesesesenwseswseseseswswse
+nwnwnwenenwnwsenwsenesenwswnwswswnenwnw
+wswewswswnwneeswswwswneswwswsesew
+nweswsesesenwsenwswneseswseswseswseseswnw
+eeweseneweneneeesenwsew
+swsesenwwneseseseswseseseseseneseseswse
+seeeneeseseswnwswseseeseeesesewnw
+seesewenesesesewsese
+nwenwnewswnwnwnwswnwneenewnwsenwsesee
+nwsenenwwnenenwnwnwnenwnenenwne
+swnwswswswswswswswswsweswneswseswsw
+eswweeeneneneneneneseneneneeneswnene
+enwnwwnwwnwenwnwnwnwnwnwnwwnw
+ewswnewnwwewnenesesesewesewnwswne
+swnweseweeseeeneeeseeeseeee
+eneneswweeeeeeeeeesenweew
+nwwnwnwnwenenwswnenwenenwnenwswnw
+eeneswnwwwseewseenewwewweene
+weneseeewwseneeeneeeeseseeswe
+nenwnenenenwnwnenenwwnwnenenesene
+wwwenesewnwwwwwwsenewwnwwww
+neneneeswnenenenwsenewwnenesenenenenese
+nwsenwwnwnewnwwsw
+sesesweesesesesesenwseseewseeesenwse
+nwnwwswnwwwswsewsenwnwnenwwnwwnenwenw
+enwnwneneeeeneneeesweeeneswee
+ewseeseesenweseneseseswnewwsesesesese
+wwseswwswsewwwswwswwswnweswnwwne
+nenwswneweswseeenenwenweswnewnenesw
+wswnwnenwwnwnwneeeswnwnwwwnwswnwnwnw
+eeseswsesesesesenwswnweseseseseeeewne
+swswseseswswswseseseew
+nwnewnenewseneneneeswneneneneenenene
+eseseseseswseseswseseseswnenewseswsewne
+esesewwsesesenenwswsenenewseseneswse
+nwnwwnwnwswnewnwsenwnenwnweeswswwnw
+swnwswswswswswswswnwswswswneswswwseswswe
+neseenwsweeeeeswseswesesenenwnesee
+eesenweswneseeeswewseeseenwsese
+esweesenwnwsewseeenweeeseeswnwwe