Advent of Code 2019 - Day 8
Advent of Code 2019 - Day 8
Intro
Day 8 was a refreshing break from the Intcode vm and it was exactly what I like out of programming puzzles: simple premise, straightforward, and short implementation time once you’ve devised a valid approach.
As always, you can find my full solutions repo here.
Solution
For part one, I worked with a list of lists, with each inner list as a “layer” of data. The two money-maker functions are one to count the number of times a character appears in the layer and one to find the layer with the fewest zeroes.
def count_char(layer, char):
count = 0
for digit in layer:
if digit == char:
count += 1
return count
def find_fewest_zeroes(layers):
fewest_layer = 0
least_zeroes_ct = maxsize
for index, layer in enumerate(layers):
zeroes = count_char(layer, "0")
if zeroes < least_zeroes_ct:
least_zeroes_ct = zeroes
fewest_layer = index
return fewest_layer
From there, you just have to find the right layer then multiply
count_char(layer, "1")
times count_char(layer, "2")
. Voila.
Starting part two, I realized that it would be much easier to work with the layers in a row/column format, so I made each layer a 2d list. Then, I made a function to find the first non-transparent color for each pixel in a layer.
def find_pixel(layers, row, col):
for layer in layers:
pixel = layer[row][col]
if pixel != "2":
return pixel
return 2
Creating the output image is super easy once you have the data in an amenable format.
layers = split_rows(layers)
pixels = []
for i in range(0, 6):
pixels.append([])
for j in range(0, 25):
pixels[i].append(find_pixel(layers, i, j))
Now, for another Intcode puzzle…
As always, you can find my full solutions repo here.