# Advent of Code 2019 - Day 8

Posted on 2019-12-22

# 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.