Skip to content

Commit 850d3c3

Browse files
committed
Day 20 Python solutions
1 parent a45df83 commit 850d3c3

File tree

2 files changed

+128
-0
lines changed

2 files changed

+128
-0
lines changed

20-1.py

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/usr/bin/env python
2+
3+
import numpy
4+
5+
class Image:
6+
def __init__(self, enhance, input):
7+
self.mapping = [0] * 512
8+
for i in range(len(enhance)):
9+
if enhance[i] == '#':
10+
self.mapping[i] = 1
11+
12+
self.size = len(input)
13+
self.image = numpy.zeros((self.size, self.size), dtype=numpy.uint)
14+
15+
for row in range(len(input)):
16+
for col in range(len(input)):
17+
if input[row][col] == '#':
18+
self.image[row, col] = 1
19+
20+
self.background = 0
21+
22+
def get_pixel(self, row, col):
23+
if row < 0 or col < 0 or row >= self.size or col >= self.size:
24+
return self.background
25+
else:
26+
return self.image[row, col]
27+
28+
def get_grid(self, row, col):
29+
num = 0
30+
for r in [-1, 0, 1]:
31+
for c in [-1, 0, 1]:
32+
num <<= 1
33+
if self.get_pixel(row + r, col + c) > 0:
34+
num += 1
35+
return num
36+
37+
def get_enhanced(self, row, col):
38+
return self.mapping[self.get_grid(row, col)]
39+
40+
def enhance(self):
41+
new_size = self.size + 2
42+
new_image = numpy.zeros((new_size, new_size), dtype=numpy.uint)
43+
new_background = self.mapping[int(str(self.background) * 9, 2)]
44+
45+
for row in range(new_size):
46+
for col in range(new_size):
47+
new_image[row, col] = self.get_enhanced(row - 1, col - 1)
48+
49+
self.image = new_image
50+
self.size = new_size
51+
self.background = new_background
52+
53+
def score(self):
54+
return numpy.sum(self.image)
55+
56+
57+
lines = [list(line.strip()) for line in open('20.input').readlines()]
58+
59+
img = Image(lines[0], lines[2:])
60+
61+
for _ in range(2):
62+
img.enhance()
63+
64+
print(img.score())

20-2.py

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
#!/usr/bin/env python
2+
3+
import numpy
4+
5+
class Image:
6+
def __init__(self, enhance, input):
7+
self.mapping = [0] * 512
8+
for i in range(len(enhance)):
9+
if enhance[i] == '#':
10+
self.mapping[i] = 1
11+
12+
self.size = len(input)
13+
self.image = numpy.zeros((self.size, self.size), dtype=numpy.uint)
14+
15+
for row in range(len(input)):
16+
for col in range(len(input)):
17+
if input[row][col] == '#':
18+
self.image[row, col] = 1
19+
20+
self.background = 0
21+
22+
def get_pixel(self, row, col):
23+
if row < 0 or col < 0 or row >= self.size or col >= self.size:
24+
return self.background
25+
else:
26+
return self.image[row, col]
27+
28+
def get_grid(self, row, col):
29+
num = 0
30+
for r in [-1, 0, 1]:
31+
for c in [-1, 0, 1]:
32+
num <<= 1
33+
if self.get_pixel(row + r, col + c) > 0:
34+
num += 1
35+
return num
36+
37+
def get_enhanced(self, row, col):
38+
return self.mapping[self.get_grid(row, col)]
39+
40+
def enhance(self):
41+
new_size = self.size + 2
42+
new_image = numpy.zeros((new_size, new_size), dtype=numpy.uint)
43+
new_background = self.mapping[int(str(self.background) * 9, 2)]
44+
45+
for row in range(new_size):
46+
for col in range(new_size):
47+
new_image[row, col] = self.get_enhanced(row - 1, col - 1)
48+
49+
self.image = new_image
50+
self.size = new_size
51+
self.background = new_background
52+
53+
def score(self):
54+
return numpy.sum(self.image)
55+
56+
57+
lines = [list(line.strip()) for line in open('20.input').readlines()]
58+
59+
img = Image(lines[0], lines[2:])
60+
61+
for _ in range(50):
62+
img.enhance()
63+
64+
print(img.score())

0 commit comments

Comments
 (0)