Example #1
0
for i in range(w):
    for j in range(h):
        d[i, j] = []
        for u, v in ((1, 1), (1, 0), (1, -1), (0, -1), (-1, -1), (-1, 0),
                     (-1, 1), (0, 1)):
            r = 1
            while (0 <= i + r * u < w) and (0 <= j + r * v < h):
                if (i + r * u, j + r * v) in q:
                    d[i, j].append((i + r * u, j + r * v))
                    break
                r += 1

c = set(q.keys())
while c:
    qq = dict(q)
    cc = set()
    for i, j in c:
        n = [q[k] for k in d[i, j]].count("#")
        if q[i, j] == "L" and n == 0:
            qq[i, j] = "#"
            cc.update(d[i, j])
        elif q[i, j] == "#" and n >= 5:
            qq[i, j] = "L"
            cc.update(d[i, j])
    q = qq
    c = cc

print(list(p.values()).count("#"), list(q.values()).count("#"))

aoc.tock()
Example #2
0
import aoc
data = aoc.strlist(3)

p = len(data)
q = len(data[0])
n = "".join(i[j % q] for i, j in zip(data, range(0, 3 * p, 3))).count("#")

m = n
for u, v in [(1, 1), (5, 1), (7, 1), (1, 2)]:
    m *= "".join(i[j % q] for i, j in zip(data[::v], range(0, u * p //
                                                           v, u))).count("#")

print(n, m)
aoc.tock("ms")