73 lines
1.8 KiB
Python
73 lines
1.8 KiB
Python
from tools.aoc import AOCDay
|
|
from typing import Any
|
|
|
|
|
|
class Day(AOCDay):
|
|
inputs = [
|
|
[
|
|
(2806, "input08")
|
|
],
|
|
[
|
|
("see image above", "input08")
|
|
]
|
|
]
|
|
|
|
def part1(self) -> Any:
|
|
img_string = self.getInput()
|
|
img_width = 25
|
|
img_height = 6
|
|
layers = []
|
|
while len(img_string) > 0:
|
|
layers.append([img_string[i*img_width:(i+1)*img_width] for i in range(img_height)])
|
|
img_string = img_string[(img_height*img_width):]
|
|
|
|
min_zero = len(self.input[0])
|
|
min_index = -1
|
|
for i, x in enumerate(layers):
|
|
zero_count = 0
|
|
for r in x:
|
|
zero_count += r.count("0")
|
|
|
|
if zero_count < min_zero:
|
|
min_zero = zero_count
|
|
min_index = i
|
|
|
|
one_count = 0
|
|
two_count = 0
|
|
for x in layers[min_index]:
|
|
one_count += x.count("1")
|
|
two_count += x.count("2")
|
|
|
|
return one_count * two_count
|
|
|
|
def part2(self) -> Any:
|
|
img_string = self.getInput()
|
|
img_width = 25
|
|
img_height = 6
|
|
layers = []
|
|
while len(img_string) > 0:
|
|
layers.append([img_string[i*img_width:(i+1)*img_width] for i in range(img_height)])
|
|
img_string = img_string[(img_height*img_width):]
|
|
|
|
rows = []
|
|
for y in range(img_height):
|
|
line = ""
|
|
for x in range(img_width):
|
|
z = 0
|
|
while layers[z][y][x] == "2":
|
|
z += 1
|
|
|
|
line += " " if layers[z][y][x] == "0" else "#"
|
|
|
|
rows.append(line)
|
|
|
|
for x in rows:
|
|
print(x)
|
|
|
|
return "see image above"
|
|
|
|
|
|
if __name__ == '__main__':
|
|
day = Day(2019, 8)
|
|
day.run(verbose=True)
|