-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathday04.py
More file actions
77 lines (56 loc) · 1.92 KB
/
Copy pathday04.py
File metadata and controls
77 lines (56 loc) · 1.92 KB
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
73
74
75
76
77
import numpy as np
filepath = "day04.txt"
def read_file():
return [line.strip() for line in open(filepath)]
def get_rolls(lines):
rolls_of_paper = []
row = 0
for line in lines:
tokens = list(line)
for column in range(len(tokens)):
if tokens[column] == '@':
rolls_of_paper.append((row, column))
row += 1
return rolls_of_paper
def is_accessed(roll, all_rolls):
directions = [(1, 0), (0, 1), (-1, 0), (0, -1), (1, 1), (-1, -1), (1, -1), (-1, 1)]
adjacent_rolls_count = 0
for direction in directions:
possible_direction = tuple(x + y for x, y in zip(roll, direction))
if possible_direction in all_rolls:
adjacent_rolls_count += 1
if adjacent_rolls_count > 3:
return False
return True
def solve_part_I():
lines = read_file()
rolls_of_paper = get_rolls(lines)
print(rolls_of_paper)
accessible_rolls = 0
for roll in rolls_of_paper:
if is_accessed(roll, rolls_of_paper):
accessible_rolls += 1
return accessible_rolls
# result_1 = solve_part_I()
# print(result_1)
def get_accessible_rolls(rolls_of_paper):
accessible_rolls = []
for roll in rolls_of_paper:
if is_accessed(roll, rolls_of_paper):
accessible_rolls.append(roll)
print(f"Totally accessible rolls: {len(accessible_rolls)}")
return accessible_rolls
def solve_part_II():
lines = read_file()
rolls_of_paper = get_rolls(lines)
print(rolls_of_paper)
accessible_rolls = rolls_of_paper
sum_accessed_rolls = 0
while len(accessible_rolls) > 0:
accessible_rolls = get_accessible_rolls(rolls_of_paper)
sum_accessed_rolls += len(accessible_rolls)
rolls_of_paper = list(set(rolls_of_paper) - set(accessible_rolls))
print(f"Totally removed: {sum_accessed_rolls}")
return sum_accessed_rolls
result_2 = solve_part_II()
print(result_2)