-
Notifications
You must be signed in to change notification settings - Fork 0
/
day20.krk
66 lines (51 loc) · 1.6 KB
/
day20.krk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env kuroko
'''
Day 20
'''
import fileio
import kuroko
import gc
import os
#gc.pause()
if True:
let data
with fileio.open(kuroko.argv[1] if len(kuroko.argv) > 1 else kuroko.argv[0].replace('.krk','.txt'),'r') as f:
data = f.readlines()
let lines = [line.strip() for line in data]
data = None
let algo = [1 if x == '#' else 0 for x in lines[0]]
let rest = lines[2:]
lines = None
let height = len(rest)
let width = len(rest[0])
def maybe(img,y,x,inf):
return (img.get((y,x),inf) << 2) | (img.get((y,x+1),inf) << 1) | (img.get((y,x+2),inf))
def pt_to_manip(img,y,x,inf):
let ind = (maybe(img,y-1,x-1,inf) << 6) | (maybe(img,y,x-1,inf) << 3) | maybe(img,y+1,x-1,inf)
return algo[ind]
let img = {}
for y in range(height):
for x in range(width):
if rest[y][x] == '#':
img[(y,x)] = 1
rest = None
let inf = 0
let flip = (1,0)
for i in range(50):
let next = {}
let mi_y = min(y for y,x in img) - 1
let ma_y = max(y for y,x in img) + 2
let mi_x = min(x for y,x in img) - 1
let ma_x = max(x for y,x in img) + 2
for y in range(mi_y,ma_y):
for x in range(mi_x,ma_x):
if pt_to_manip(img,y,x,inf) == inf:
next[(y,x)] = inf
inf = flip[inf]
#for _y in range(mi_y-1, ma_y+1):
# for _x in range(mi_x-1, ma_x+1):
# print(' #'[next.get((_y,_x),inf)],end='')
# print()
img = next
print(len(img),'unlit' if inf == 1 else 'lit')
os.exit(0)