70 lines
1.5 KiB
Python
70 lines
1.5 KiB
Python
|
def get_file_input(filename: str):
|
||
|
ret = []
|
||
|
with open(filename, "r") as f:
|
||
|
for line in f.readlines():
|
||
|
ret.append(line.strip())
|
||
|
return ret
|
||
|
|
||
|
def main(use_sample_input = True, part = 1):
|
||
|
sample = [
|
||
|
"..##.......",
|
||
|
"#...#...#..",
|
||
|
".#....#..#.",
|
||
|
"..#.#...#.#",
|
||
|
".#...##..#.",
|
||
|
"..#.##.....",
|
||
|
".#.#.#....#",
|
||
|
".#........#",
|
||
|
"#.##...#...",
|
||
|
"#...##....#",
|
||
|
".#..#...#.#"
|
||
|
]
|
||
|
|
||
|
s = sample if use_sample_input else get_file_input("input")
|
||
|
|
||
|
if part == 1:
|
||
|
expected_result = 7
|
||
|
res = get_result(s, 3, 1)
|
||
|
else:
|
||
|
expected_result = 336
|
||
|
slopes = {
|
||
|
(1, 1),
|
||
|
(3, 1),
|
||
|
(5, 1),
|
||
|
(7, 1),
|
||
|
(1, 2)
|
||
|
}
|
||
|
|
||
|
tmp = []
|
||
|
for slope in slopes:
|
||
|
tmp.append(get_result(s, *slope))
|
||
|
|
||
|
res = mult_all(*tmp)
|
||
|
|
||
|
if use_sample_input:
|
||
|
return f"{res} {res==expected_result}".upper()
|
||
|
else:
|
||
|
return res
|
||
|
|
||
|
def mult_all(*ns: int):
|
||
|
ret = 1
|
||
|
for n in ns:
|
||
|
ret *= n
|
||
|
return ret
|
||
|
|
||
|
def get_result(l: list, inc_x: int, inc_y: int):
|
||
|
ret = 0
|
||
|
x = 0
|
||
|
y = 0
|
||
|
while y < len(l):
|
||
|
if l[y][x] == "#":
|
||
|
ret += 1
|
||
|
x += inc_x
|
||
|
x %= len(l[0])
|
||
|
y += inc_y
|
||
|
return ret
|
||
|
|
||
|
print(main(use_sample_input = False, part = 2))
|
||
|
|
||
|
|