From 38118e4613b4c9315d5e4acb9e91f23833b8479f Mon Sep 17 00:00:00 2001 From: Ben Charlton Date: Sun, 8 Dec 2019 13:44:49 +0000 Subject: [PATCH] day8 --- 8/8.py | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100755 8/8.py diff --git a/8/8.py b/8/8.py new file mode 100755 index 0000000..7e63222 --- /dev/null +++ b/8/8.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python3 + +import sys, os + +if len(sys.argv) < 3: + print(sys.argv[0], "width", "height") + exit() + +width = int(sys.argv[1]) +height = int(sys.argv[2]) + +for line in sys.stdin: + pixels = line.rstrip() + + layer = 0 + x = 0 + y = 0 + layers = [] + counts = [] + + row = [] + layer = [] + + zeroes = 0 + ones = 0 + twos = 0 + + # build layers. + for i in range(0, len(pixels)): + pixel = int(pixels[i]) + + if pixel == 0: + zeroes += 1 + elif pixel == 1: + ones += 1 + elif pixel == 2: + twos += 1 + + row.append(pixel) + x += 1 + + # Assemble layer + if x == width: + x = 0 + y += 1 + layer.append(row) + row = [] + + # Add layer, stats and reset counts + if y == height: + y = 0 + layers.append(layer) + counts.append((zeroes, ones, twos)) + layer = [] + zeroes = 0 + ones = 0 + twos = 0 + + # return part 1 answer + fewest = None + wanted = 0 + for layer in counts: + if fewest is None or layer[0] < fewest: + wanted = layer[1] * layer[2] + fewest = layer[0] + print(wanted) + + # render part 2 answer + for y in range(0,height): + row = "" + for x in range(0, width): + p = 2 + for l in range(0, len(layers)): + if p == 2: + p = layers[l][y][x] + if p == 0: + row = row + " " + else: + row = row + "*" + print(row) + + \ No newline at end of file