-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday13.py
113 lines (86 loc) · 2.24 KB
/
day13.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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
def inp():
pairs = []
folds = []
f = False
for line in open("input_d13.txt", "rt"):
if line == "\n":
f = True
continue
line = line.replace("\n", "")
if f == False:
line = line.split(",")
pairs.append((int(line[0]),int(line[1])))
else:
line = line.split(" ")
folds.append(line[2])
max_x = 0
max_y = 0
for i in range(len(pairs)):
if pairs[i][0] > max_x:
max_x = pairs[i][0]
if pairs[i][1] > max_y:
max_y = pairs[i][1]
max_x += 1
max_y += 1
arr = [[0 for i in range(max_x)] for j in range(max_y)]
for pair in pairs:
arr[pair[1]][pair[0]] += 1
return (arr, folds)
def info(a):
for row in a:
print(row)
print("")
def countDots(arr):
dots = 0
for row in arr:
for val in row:
if val > 0:
dots += 1
return dots
def printDots(arr):
for row in arr:
for val in row:
if val > 0:
print("#",end="")
else:
print(" ",end="")
print("")
def fold_x(arr, x):
tmp = [[0 for i in range(x)] for j in range(len(arr))]
for i in range(len(tmp)):
for j in range(len(tmp[0])):
tmp[i][j] = arr[i][j]
tmp2 = arr.copy()
for i in range(len(tmp2)):
for j in range(x+1):
del tmp2[i][0]
y = len(tmp2[0])-1
for i in range(len(tmp)):
for j in range(len(tmp[0])):
tmp[i][j] += tmp2[i][y-j]
return tmp
def fold_y(arr, y):
tmp = [[0 for i in range(len(arr[0]))] for j in range(y)]
for i in range(len(tmp)):
for j in range(len(tmp[0])):
tmp[i][j] = arr[i][j]
tmp2 = arr.copy()
for i in range(y+1):
del tmp2[0]
x = len(tmp2)-1
for i in range(len(tmp)):
for j in range(len(tmp[0])):
tmp[i][j] += tmp2[x-i][j]
return tmp
arr = inp()[0]
folds = inp()[1]
for fold in folds:
f = fold.split("=")
#info(arr)
if f[0] == "x":
arr = fold_x(arr, int(f[1]))
elif f[0] == "y":
arr = fold_y(arr, int(f[1]))
printDots(arr)
dots = countDots(arr)
print(dots)