47 lines
1.2 KiB
Python
47 lines
1.2 KiB
Python
import sys
|
|
import numpy as np
|
|
|
|
|
|
# @profile
|
|
def main():
|
|
with open(sys.argv[1]) as f:
|
|
inp = [
|
|
[[c == "#" for c in line] for line in field.split("\n")]
|
|
for field in f.read().strip().split("\n\n")
|
|
]
|
|
|
|
(part1, part2) = (0, 0)
|
|
|
|
for field in inp:
|
|
field = np.array(field)
|
|
(h, w) = field.shape
|
|
|
|
(x1, y1, x2, y2) = (0, 0, 0, 0)
|
|
for x in range(1, w):
|
|
w2 = min(x, w - x)
|
|
left = field[:, (x - w2) : x]
|
|
right = field[:, x : (x + w2)][:, ::-1]
|
|
mismatches = (left != right).sum()
|
|
if not x2 and mismatches == 1:
|
|
x2 = x
|
|
elif not x1 and mismatches == 0:
|
|
x1 = x
|
|
|
|
if not x1 or not x2:
|
|
for y in range(1, h):
|
|
h2 = min(y, h - y)
|
|
left = field[(y - h2) : y]
|
|
right = field[y : (y + h2)][::-1]
|
|
mismatches = (left != right).sum()
|
|
if not y2 and mismatches == 1:
|
|
y2 = y
|
|
elif not y1 and mismatches == 0:
|
|
y1 = y
|
|
|
|
part1 += x1 + y1 * 100
|
|
part2 += x2 + y2 * 100
|
|
|
|
print(part1, part2)
|
|
|
|
|
|
main()
|