93 lines
2.5 KiB
Python
93 lines
2.5 KiB
Python
from lib import *
|
|
|
|
EXAMPLE = """
|
|
#.##..##.
|
|
..#.##.#.
|
|
##......#
|
|
##......#
|
|
..#.##.#.
|
|
..##..##.
|
|
#.#.##.#.
|
|
|
|
#...##..#
|
|
#....#..#
|
|
..##..###
|
|
#####.##.
|
|
#####.##.
|
|
..##..###
|
|
#....#..#
|
|
""".replace("\n", "", count=1)
|
|
|
|
|
|
def solve(i: Input, second=False):
|
|
res = 0
|
|
ps = i.paras()
|
|
|
|
for p in ps:
|
|
g = Input(p).grid2()
|
|
|
|
row_res, col_res = [], []
|
|
rows = g.rows()
|
|
cols = g.cols()
|
|
for i_row in range(len(rows) - 1):
|
|
for i in range(min(i_row + 1, len(rows) - i_row - 1)):
|
|
if rows[i_row - i] != rows[i_row + i + 1]:
|
|
break
|
|
else:
|
|
if not second:
|
|
res += (i_row + 1) * 100
|
|
row_res.append(i_row)
|
|
|
|
for i_col in range(len(cols) - 1):
|
|
for i in range(min(i_col + 1, len(cols) - i_col - 1)):
|
|
if cols[i_col - i] != cols[i_col + i + 1]:
|
|
break
|
|
else:
|
|
if not second:
|
|
res += (i_col + 1)
|
|
col_res.append(i_col)
|
|
|
|
if not second:
|
|
continue
|
|
|
|
for c in g.all_coords():
|
|
g[c] = '.' if g[c] == '#' else '#'
|
|
rows = g.rows()
|
|
cols = g.cols()
|
|
for i_row in range(len(rows) - 1):
|
|
for i in range(min(i_row + 1, len(rows) - i_row - 1)):
|
|
if rows[i_row - i] != rows[i_row + i + 1]:
|
|
break
|
|
else:
|
|
if not i_row in row_res:
|
|
res += (i_row + 1) * 100
|
|
row_res.append(i_row)
|
|
|
|
for i_col in range(len(cols) - 1):
|
|
for i in range(min(i_col + 1, len(cols) - i_col - 1)):
|
|
if cols[i_col - i] != cols[i_col + i + 1]:
|
|
break
|
|
else:
|
|
if not i_col in col_res:
|
|
res += (i_col + 1)
|
|
col_res.append(i_col)
|
|
g[c] = '.' if g[c] == '#' else '#'
|
|
if len(row_res + col_res) != 2:
|
|
raise Exception("Unexpected amount of mirrors!!")
|
|
return res
|
|
|
|
|
|
def main():
|
|
DAY_INPUT = "i13.txt"
|
|
|
|
print("Example 1:", solve(Input(EXAMPLE)))
|
|
print("Solution 1:", solve(Input(DAY_INPUT)))
|
|
assert 29846 == solve(Input(DAY_INPUT))
|
|
|
|
print("Example 2:", solve(Input(EXAMPLE), True))
|
|
print("Solution 2:", solve(Input(DAY_INPUT), True))
|
|
assert 25401 == solve(Input(DAY_INPUT), True)
|
|
|
|
if __name__ == "__main__":
|
|
main()
|