-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday3.py
72 lines (61 loc) · 2.6 KB
/
day3.py
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
67
68
69
70
71
72
input_lines = []
def is_part_number(line_idx: int, number_idx: int, number_length: int):
for x in range(line_idx - 1, line_idx + 2):
for y in range(number_idx - 1, number_idx + number_length + 1):
try:
if not input_lines[x][y].isdigit() and input_lines[x][y] != ".":
return True
except IndexError:
pass
# if number_idx != 0:
# if is_part_marker(input_lines[line_idx][number_idx - 1]):
# return True
# if line_idx != 0:
# if is_part_marker(input_lines[line_idx - 1][number_idx - 1]):
# return True
# if line_idx != NUMBER_OF_LINES - 1:
# if is_part_marker(input_lines[line_idx + 1][number_idx - 1]):
# return True
# if number_idx + number_length != LINE_LENGTH - 1:
# if is_part_marker(input_lines[line_idx][number_idx + number_length]):
# return True
# if line_idx != 0:
# if is_part_marker(input_lines[line_idx - 1][number_idx + number_length]):
# return True
# if line_idx != NUMBER_OF_LINES - 1:
# if is_part_marker(input_lines[line_idx + 1][number_idx + number_length]):
# return True
# if line_idx != 0:
# for idx in range(number_idx, number_idx + number_length):
# if is_part_marker(input_lines[line_idx - 1][idx]):
# return True
# if line_idx != NUMBER_OF_LINES - 1:
# for idx in range(number_idx, number_idx + number_length):
# if is_part_marker(input_lines[line_idx + 1][idx]):
# return True
return False
def main():
with open("day3_input.txt", "r") as input_file:
input_string = input_file.read()
global input_lines
input_lines = input_string.splitlines()
part_numbers_sum: int = 0
for line_idx, line in enumerate(input_lines):
number: str = ""
number_idx: int | None = None
for char_idx, char in enumerate(line):
if char.isdigit():
number += char
if number_idx is None:
number_idx = char_idx
elif number_idx is not None:
if is_part_number(line_idx, number_idx, len(number)):
part_numbers_sum += int(number)
number = ""
number_idx = None
if number_idx is not None:
if is_part_number(line_idx, number_idx, len(number)):
part_numbers_sum += int(number)
print("Sum of part numbers:", part_numbers_sum)
if __name__ == '__main__':
main()