Solved day8b

master
Arne Wischer 6 years ago
parent 78efc75506
commit 5fc1676776
  1. 2
      advent.py
  2. 2
      days/__init__.py
  3. 48
      days/day8.py

@ -18,6 +18,8 @@ def suite():
suite.addTest(Day6('test_day6b')) suite.addTest(Day6('test_day6b'))
suite.addTest(Day7('test_day7a')) suite.addTest(Day7('test_day7a'))
suite.addTest(Day7('test_day7b')) suite.addTest(Day7('test_day7b'))
suite.addTest(Day8('test_day8a'))
suite.addTest(Day8('test_day8b'))
return suite return suite

@ -5,4 +5,4 @@ from .day4 import Day4
from .day5 import Day5 from .day5 import Day5
from .day6 import Day6 from .day6 import Day6
from .day7 import Day7 from .day7 import Day7
from .comp import OpcodeComputer from .day8 import Day8

@ -4,15 +4,18 @@ import sys
class Day8(unittest.TestCase): class Day8(unittest.TestCase):
inputfile = os.path.join(os.path.dirname(__file__), "input/day8_input") imgsize = 25 * 6
def test_day8a(self): def get_image(self):
size = 25 * 6 inputfile = os.path.join(os.path.dirname(__file__), "input/day8_input")
with open(self.inputfile) as fp: with open(inputfile) as fp:
img = [int(k) for k in str(fp.readline())] img = [int(k) for k in str(fp.readline())]
breaks = [size*k for k in range(len(img)//size+1)] 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:])]
layers = [img[b:e] for b, e in zip(breaks, breaks[1:])] def test_day8a(self):
layers = self.get_image()
min = sys.maxsize min = sys.maxsize
layer = 0 layer = 0
@ -21,9 +24,30 @@ class Day8(unittest.TestCase):
if z < min: if z < min:
min = z min = z
layer = i layer = i
solution = layers[layer].count(1)*layers[layer].count(2)
print("Result was {} on layer {}".format(layers[layer].count(1)*layers[layer].count(2), layer)) self.assertEqual(solution, 2806)
def test_day8b(self):
if __name__ == "__main__": layers = self.get_image()
Day8().test_day8a() 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)

Loading…
Cancel
Save