day 21 part 1
parent
f3b38a3ece
commit
52a2184a3c
|
@ -0,0 +1,131 @@
|
|||
...................................................................................................................................
|
||||
..#...#....#.......#.#..##......#...............#..#....#......................................#....##.........#...##..#.#.....#...
|
||||
.....#..#............#....#.#...##..#.................#..#..................#...#.#.......#.#..#....#.....#...#.#..............#...
|
||||
.#........#...........#......................#..........#................#...#..............#......#...........#..#.....#.#........
|
||||
..#.#.#..........#.......#....#....#......#.......#...#..................#.###...........#...........##...#..........#.##.#.#.#.#..
|
||||
.#.#.........#.....#.#...........#.......##.###.....#.#.........#.#.........##.................##.........##.#.............##.#....
|
||||
...#.#...#.#...........#.#.####....................##.#........##..........#......#.............##.#...............#...............
|
||||
......##...#.##....#.......#....#...#....#..................................#......#.#.#..#.........#..........#..#...#............
|
||||
.#..#..#...#........................#......#...##.................#...............#..........##.........#..........................
|
||||
......#...#..#...#................#....#.....................#..................#...#.............#..#..#.......##.#.....#.........
|
||||
.#........#..........#...#........#...........##..............#...#..#.................#............................#.....#....#...
|
||||
...............##..####...........###..#...##.#................#.......#.................#......#........................#......#..
|
||||
....#............#.........#...........#..#.#.#..........#..........#...............#....#....###...##.........#...................
|
||||
.#.....#..#....#.#..............#..#.....#.#........................................##..#.....#....#...#..##.##...#................
|
||||
.....#.....#....#..#......#...............#....#.......#..#..............#...................#............................#........
|
||||
................#........#................#.#.........................#.....#.......#.....#.................#.....#.........#......
|
||||
......##....#..#...#....#..#............#....#...........#..##............#..#.........#.......#...#.#..........#.....#...#....#...
|
||||
....#.#...#.........#..#....#...#......#................#..##.......##.................#..#....#..........#......#.................
|
||||
..........#..#..#..#..........#........................#.................###..............##.#..#.#......#...#.##...........#......
|
||||
.###...#.......#..................#....#...............#.......#..#..#...#..#.......................#.#...#..#........#...#......#.
|
||||
.......#...........#.#..##......#................#............#.#.#......#................#.........#.....#..........#..#..#...#...
|
||||
....#.....................##....#......##...................#...............#.....#...............#..#........#.#....##.....#..#...
|
||||
.......#..#.##..#...###...#........#.............##........#......................##.........#...............#....#.#..............
|
||||
..###.......#..#......#........#...#...............###.###.........#.#.#........#...........#.........#...........#....#....#.#....
|
||||
.....#..........#......#...#.........#........#........#...#...........#.....#.#.............................#.#.......###.##.#.##.
|
||||
..#.................#.............#................#.#............#.#.....#........................#........#.................#....
|
||||
.#..##..#.#......##..........................#..#.........#.....#......#.....#.....#............................###.....##....#..#.
|
||||
.......#.#.......#............#...........#....#.......#....#...............#.#..##..##.........#....#..............#....###...#...
|
||||
...#.......#..##..#..#......................#......##......#........#...#........##.##.#..................#...#.#....##..##......#.
|
||||
...#.......#.........#.........................#...................#......#.......#...#...#.......#............#........###........
|
||||
.#.#.#...#.#........##..................#...#.#.........................#......#.....#..#.#........##............#...........#.....
|
||||
.#.#...#.....###.#........##...........#..#...##.........#...###..#.#...#....##........#...#.............#...#........##...#.....#.
|
||||
..............#..........#...#........#.......##..##........................#................#........##.........#.................
|
||||
....##.................#..................................#.............##..#.#....#...#..#...................#.....#....#.#.#.....
|
||||
....#####...##...#..##..#..#.......###.....#.#......#..#..#.##.....#..#.................#..........................#.#.##.#........
|
||||
..........#..#....##.#.................#......#...#.#.......#......##.........#..#.#.....................................#..#......
|
||||
..##..##.....#.....#....#...........#.#..........#............#.......###....................#..#..........#....#............#...#.
|
||||
......#..........#.......................#...#......#...#...#..#....#..#.....#...........#..#....#............#.....#....#.#.......
|
||||
.#..#......#...#..##................##..#...#.........#.........#.#..#..................#..........................#...#..#.##.....
|
||||
..#......#..#..................................#.....#.###.#.........#......#.#...#................#..........#....#...............
|
||||
........#..##....#...................#........#....#...#..........#...#...#..........####.....#..##.#................#.........###.
|
||||
....#..............................#..#..#..#.##......#...#...................#.##..........#..#...#..................#....###.##..
|
||||
.#..........................#.#..#...........#..#......#..#..#........................#........................##...#.#..#......#..
|
||||
............................#..#...#..................#................#..............##.#.#.#..................#...........##.#...
|
||||
.........#..###............#.....##...#..#...#.##.....##....#.....#.#.......#.#...#........##.........#.#..............#.#.....#...
|
||||
...........#............#.........#.....##...##......#.........#...##...............#.##................#............#.....#...#...
|
||||
.#####.#..#...............................#..#...............#...................#.....#.#............#................#...#.......
|
||||
.#..#...#....#....................#...........#.................................................#......##................#....##.#.
|
||||
....#......#..........#..##...#..#.##....#...#.....#.#........#...#.....#.....#......#...#..#..#..#........................#....#..
|
||||
...#.....#..........##......#..#.....##...#...#...#.#..........#..............#.....#..........#..#.....###.................###....
|
||||
.....................##...#....#....#......#...#.#.......#...........#..........#..............#.......##.................#..#.....
|
||||
..##.................#.......#...........#.##........#..##.#...........#.#....#.#.......#..##....#.#..#....#....#..................
|
||||
.....#...........#.#........#..........#..#.##.....#............#.......#..#.....##....#.#...........##.......#............#.......
|
||||
.....##.#.............##........##...........#..#.#..##.#.......#.......#..................#.#..#..#.......#.................#.#...
|
||||
.#.#..............##....#.......#......#..#........#..................#.#.##..#...#....#.#...........##.....#..#..#.........##.....
|
||||
..............##................#....#....#........#.......#...##...#.#.#........#.#...#...#..#.#.......#.#...#....................
|
||||
.............####.....#..........................#.#..................................#........#.#..##...#...#..#..................
|
||||
.#......................#.....#####.#...........#.#............#.............##....#....#.#...........##..........##...........##..
|
||||
...........#.#.#..#...##...##........#.......#.......#.#........#.......#......#............#..###....#.......#..#.....#........#..
|
||||
............#....#...............#.##............#...##....#.#...........#........#...#...##...........#..........#................
|
||||
......................#............#..##......#......#....#.......#..##......#...#....#....#....#..#..#..........#.....#.#.........
|
||||
................#.....##.......#....##..#.......#......###......#.......#....#.......#....##...........#.#....#....##....#.........
|
||||
................#..#...#.##...#...#....#.........#....#...##......#.#...#....#.............#.....#............##...#...............
|
||||
......................#....#......#.#....##...#...#...#.#.......#.....#..#.......#...#.#.##..#........#.....#....#.........#.......
|
||||
.....##..#..#......................#.#........#....#......#....#..#....#.........#..#.......#.......#.......#.#.......#.###..#.....
|
||||
.................................................................S.................................................................
|
||||
..................#...#.....#....#...........#..#.#..........#............................#....................##.....#....#.......
|
||||
.........#....#......#..#......#...#.#......#...#...#..............#....##.##........#..........##...##...#.......##.#....#........
|
||||
................#.##.#..#..............#.....#..#......#....#............#.#...###..#......#......#....#........#..##..............
|
||||
.........#.....................................#...#.#.............#.....#...........#........###.....................#.#..........
|
||||
.........#....#...........#...##..#........#..........#.#.....#.................#.#.#.##..#...#.#................#....#............
|
||||
...................#...................#...#..............#.....#.#.......#..............#......#..........###.......#..#..........
|
||||
...........#.#.............##...#...#....#.#.....#....................#.....#..#.....#........##.#....#....#...................##..
|
||||
.#................#.#.#.##.............#..#...#....#.#..####.#.......##......................#.......#....#....##................#.
|
||||
...##..............###...#.#..#..#.#...................#....#...#..#.#....##.....#.....#........#...#...#.#.#...................##.
|
||||
................................##.#..........#........#..........#.#....#.........##.......##........#............................
|
||||
...#............##......#.........#.....#.#................##......#.......#....##...#....#.....#.#..#....#.#.....#.............#..
|
||||
......#.........#.....###.##...#..#...#..#.##....#.#.....#.#.#........##...#..#..........#.............#...................#.......
|
||||
.#....#............#.....#..##....##...##.....#.#......##..#........#..........#.................#.......#......#.............#....
|
||||
...#.....#........#......#...........#..#......#.#.#...#....#.###.....##...##..#...#......#..#..........#..#..#..........#.....#...
|
||||
..#.#..#...........#.###...#.......#..........#...#.........#.#....#......#.........#...#....#...#.##....#....#..........##....#...
|
||||
......#.#...#............##.......#.......##...............#..................#.#....#..#..#..#..#...#...#...#.....................
|
||||
....#.......................#........##..#........##.....#.............#........#.#...........#.....#....##...........#..#.........
|
||||
...#.......#..#.......#......#....#......#..........#.#.#.#.......##....#....................##.........#................#..#......
|
||||
..#....................###.......##.#.....#.....#.#............##..#....#..#.................#...#..##.###............#...#..##....
|
||||
.....#......#..#...............#.....##......#.....#.......#..#.#..#....#..##.................##....#....##................#....#..
|
||||
.............##..#.........#..#..#........#..#..........#...#................###..........##.#.#.........#........#....##..#..#....
|
||||
.#.#.#.......#..............#....#...#............#.......#....#.........#........#....#............#............#...#.#..#........
|
||||
.............#.....#.........................#....#.#...........#.................#.#..#....#..........................#.##...#....
|
||||
...#......#........#.............#..................#.###....................#.#.....#........#.....#.........#.#.#.....#.#........
|
||||
.#.............#...##...........#.....#.....#.............#.........#...............###....#...#..#.#............#.#.............#.
|
||||
............##..#................#....#.......#............##.........##..................#......................#.#..#....#.......
|
||||
............#......#.....................#.#.#.#..#.#..#......#.............#.#....##.....#....#...............#.#............#....
|
||||
..#..#.#.#.#....#......#............##..............#....##.........#.......#.....#...##.....#....................#.......#.....#..
|
||||
...#...........#.......#...................#......#...#.##....##....#..#.#...##..#..........#...##............#..#........#.....#..
|
||||
.....#....#..#..##................#...#...#....#.#....#.#.............#...#..............#.##.............#..#..#....#.#...#...#.#.
|
||||
.......#..#.........#.....#..........#......#.#...#.........#.#.....#...#..........#....................#....#..........#..........
|
||||
..#.#.#.....#.........#..###...........#.##.#.......#..#..........#.#.......#......#......#.#.........#.#....#..#..#.......#....#..
|
||||
.#.........#...#......#...............#......#.#.....#.....................#.......#.#......#..................#...............##..
|
||||
..#....#..............................#.....#.##.....#........#....#......#....#....#..#....#........###..#..#..........#....#..#..
|
||||
....#.......##........##..............................#.........#...###.#........#...#.##.............##.....#.#......#..........#.
|
||||
...#.#.##.....#........#.................#...#..#........#............#..#.#........#....................#.....#........#..........
|
||||
.........#....#.........#.......##...........#.#.#.#..............#......#..#.......................#.#......................#.....
|
||||
............#........#..##..#................#..#.............#.............####....#..#.........#............................#....
|
||||
....#......#..##...#...#.#...................#.....#.....#.........#.............#...............#...............###.......#.#.....
|
||||
.#.....#..........................#...........#...............#............##......#.#..........#.......#..........................
|
||||
...##.....................#....#...#.........#...............#..#......##.#...#.#..................#.......#.......................
|
||||
...#........#....#....................#............#.#...#...............#................................##..........##....#.#....
|
||||
.#...##.....#........####....#......#.#......................#.............#..#....#.......#...........#..#.........#..............
|
||||
......#..............#...........#..##.....................#.#.......#.#..###.............#......#.......#..#...#...............#..
|
||||
...#....#...................##...................#.#.#.#...##.....#.#.......#.#..........#............#..............##.......#....
|
||||
...........#.................##.........#..............#.......##..##..#.#................##.#.#..#.#.#.............#..............
|
||||
........#..##.....#.#.......#.........................#....##.........###.....##........#..........#..#...#............#...#....#..
|
||||
...................#.#.#......#..#.........#............#..#........#........#............#....#...........#.......................
|
||||
.......#..........#.............#.#.#..#....#...............#..............#...........##..#...#..................#..........##..#.
|
||||
..............##....#....#..#.....#..........#.........#.#...#.....###..#.............#...................#..#.#.#....##..#....#...
|
||||
...##..........#.....#.#.#...##...#...#........#............#........#.#..............#.....#........#..##...........#.#........#..
|
||||
.#..#.#....#..##.##....##.#....##....#...#...#..........#..##.......#...................#.......##..........#........#...#.#....#..
|
||||
.#..#....#........#......#...............###.............#..........#...#...............#........#...#...###....#..#.#.........#...
|
||||
.....#.........#.#..#....#...#.....#......#.................#...#....#...............#.........#.........#...........#.#...........
|
||||
..##.....#..........#...#..#.....#....#.#.....................#...#.................#.....#..#...#.#................#.........##.#.
|
||||
.........#..#.##........#...####......#.......#................#...#............#..#.#...........#....#.....#.#....#...###.........
|
||||
.........#......#...#...#....#...#.....##..#..##.....#..............#........#........#.........#...........#.....#......#.#..#....
|
||||
...##.......#.....#....#.............#.##...#.#....................................#.#...#...............#...................#.....
|
||||
......................#.###.............#........#.................................#.##........#..#.#.............##...#...........
|
||||
...#........#....#.....#.#...........#.#.......#....#.............#................#.....#..#..#..#.#.......#...#.....#.....##.....
|
||||
.##.#....#.........#........##......#................##............................#...#..................#...##............##.....
|
||||
......#.......#........#..#.#...#.........#............#.#........................#..#....#.#...##.........#...#..........##.......
|
||||
............#.#...#.....#..#..........#.....#..........................###.#.......##..#......#...#......#.........##...###.....#..
|
||||
.#.#......#.#..............#............#..........#.#....................#......#..#...#....#..#.#......#...............#.#.......
|
||||
...................................................................................................................................
|
|
@ -0,0 +1,11 @@
|
|||
...........
|
||||
.....###.#.
|
||||
.###.##..#.
|
||||
..#.#...#..
|
||||
....#.#....
|
||||
.##..S####.
|
||||
.##..#...#.
|
||||
.......##..
|
||||
.##.#.####.
|
||||
.##..##.##.
|
||||
...........
|
|
@ -0,0 +1,64 @@
|
|||
import sys
|
||||
from collections import defaultdict
|
||||
map = [x.strip() for x in sys.stdin]
|
||||
|
||||
print(map)
|
||||
|
||||
Y = len(map)
|
||||
X = len(map[0])
|
||||
assert all(len(row) == X for row in map)
|
||||
|
||||
grid = {}
|
||||
#start = None
|
||||
#for i, row in enumerate(map):
|
||||
# for j,c in enumerate(row):
|
||||
# if c in "#.":
|
||||
# pass
|
||||
# elif c == "S":
|
||||
# start = (i,j)
|
||||
# else:
|
||||
# raise Exception("invalid char %s at (%s,%s)" % (c, i, j))
|
||||
# grid[i,j] = d
|
||||
|
||||
#print(grid)
|
||||
|
||||
|
||||
def solve(grid):
|
||||
import numpy
|
||||
fill = numpy.zeros((Y,X+1), dtype='uint8')
|
||||
mask = numpy.zeros((Y,X+1), dtype='uint8')
|
||||
for i, row in enumerate(map):
|
||||
for j, c in enumerate(row):
|
||||
if c == '#':
|
||||
mask[i,j] = 1
|
||||
if c == 'S':
|
||||
start = (i,j)
|
||||
|
||||
def draw(fill):
|
||||
for i, row in enumerate(fill):
|
||||
print("".join(".O#"[f + 2*mask[i,j]] for j,f in enumerate(row)))
|
||||
|
||||
fill[start] = 1
|
||||
|
||||
# flood fill
|
||||
for i in range(64):
|
||||
draw(fill)
|
||||
old = fill
|
||||
fill = numpy.zeros(fill.shape, dtype='uint8')
|
||||
for i in range(Y):
|
||||
f = (old[i] == 1)
|
||||
f = numpy.roll(f, 1) | numpy.roll(f, -1)
|
||||
if i > 0: f |= (old[i-1] == 1)
|
||||
if i < Y-1: f |= (old[i+1] == 1)
|
||||
f[-1] = False
|
||||
f &= (mask[i] == 0)
|
||||
#print(old, f)
|
||||
if f.any():
|
||||
fill[i, f] = 1
|
||||
|
||||
draw(fill)
|
||||
|
||||
print(numpy.sum(fill))
|
||||
|
||||
|
||||
solve(grid)
|
Loading…
Reference in New Issue