You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.5 KiB
53 lines
1.5 KiB
import unittest
|
|
import os
|
|
import sys
|
|
|
|
|
|
class Day8(unittest.TestCase):
|
|
imgsize = 25 * 6
|
|
|
|
def get_image(self):
|
|
inputfile = os.path.join(os.path.dirname(__file__), "input/day8_input")
|
|
with open(inputfile) as fp:
|
|
img = [int(k) for k in str(fp.readline())]
|
|
breaks = [self.imgsize*k for k in range(len(img)//self.imgsize+1)]
|
|
|
|
return [img[b:e] for b, e in zip(breaks, breaks[1:])]
|
|
|
|
def test_day8a(self):
|
|
layers = self.get_image()
|
|
|
|
min = sys.maxsize
|
|
layer = 0
|
|
for i, l in enumerate(layers):
|
|
z = l.count(0)
|
|
if z < min:
|
|
min = z
|
|
layer = i
|
|
solution = layers[layer].count(1)*layers[layer].count(2)
|
|
self.assertEqual(solution, 2806)
|
|
|
|
def test_day8b(self):
|
|
layers = self.get_image()
|
|
result = [2 for i in range(self.imgsize)]
|
|
|
|
for pos in range(self.imgsize):
|
|
for l in layers:
|
|
result[pos] = l[pos] if result[pos] == 2 else result[pos]
|
|
|
|
result = ['#' if x == 0 else '.' if x == 1 else ' ' for x in result]
|
|
for k in range(len(result)):
|
|
# print(result[k], end='')
|
|
if (k+1) % 25 == 0:
|
|
# print('')
|
|
pass
|
|
|
|
expected = """\
|
|
....#...####..##..##...##\
|
|
###.#.##.####.#.##.#.##.#\
|
|
##.##...#####.#.##.#...##\
|
|
#.###.##.####.#....#.##.#\
|
|
.####.##.#.##.#.##.#.##.#\
|
|
....#...###..##.##.#...##\
|
|
"""
|
|
self.assertEqual("".join(result), expected)
|
|
|