Solution to problem 8 part 1 in Python
This commit is contained in:
parent
9d0d92e188
commit
8f21db5bef
60
src/Year_2019/P8.py
Normal file
60
src/Year_2019/P8.py
Normal file
@ -0,0 +1,60 @@
|
||||
# --- Day 8: Space Image Format ---
|
||||
|
||||
# The Elves' spirits are lifted when they realize you have an opportunity to
|
||||
# reboot one of their Mars rovers, and so they are curious if you would spend a
|
||||
# brief sojourn on Mars. You land your ship near the rover.
|
||||
|
||||
# When you reach the rover, you discover that it's already in the process of
|
||||
# rebooting! It's just waiting for someone to enter a BIOS password. The Elf
|
||||
# responsible for the rover takes a picture of the password (your puzzle input)
|
||||
# and sends it to you via the Digital Sending Network.
|
||||
|
||||
# Unfortunately, images sent via the Digital Sending Network aren't encoded
|
||||
# with any normal encoding; instead, they're encoded in a special Space Image
|
||||
# Format. None of the Elves seem to remember why this is the case. They send
|
||||
# you the instructions to decode it.
|
||||
|
||||
# Images are sent as a series of digits that each represent the color of a
|
||||
# single pixel. The digits fill each row of the image left-to-right, then move
|
||||
# downward to the next row, filling rows top-to-bottom until every pixel of the
|
||||
# image is filled.
|
||||
|
||||
# Each image actually consists of a series of identically-sized layers that are
|
||||
# filled in this way. So, the first digit corresponds to the top-left pixel of
|
||||
# the first layer, the second digit corresponds to the pixel to the right of
|
||||
# that on the same layer, and so on until the last digit, which corresponds to
|
||||
# the bottom-right pixel of the last layer.
|
||||
|
||||
# For example, given an image 3 pixels wide and 2 pixels tall, the image data
|
||||
# 123456789012 corresponds to the following image layers:
|
||||
|
||||
# Layer 1: 123
|
||||
# 456
|
||||
|
||||
# Layer 2: 789
|
||||
# 012
|
||||
|
||||
# The image you received is 25 pixels wide and 6 pixels tall.
|
||||
|
||||
# To make sure the image wasn't corrupted during transmission, the Elves would
|
||||
# like you to find the layer that contains the fewest 0 digits. On that layer,
|
||||
# what is the number of 1 digits multiplied by the number of 2 digits?
|
||||
|
||||
from collections import Counter
|
||||
|
||||
with open("files/P8.txt") as f:
|
||||
digits = [
|
||||
int(digit) for line in f.read().strip().split() for digit in line
|
||||
]
|
||||
|
||||
picture_size = 25 * 6
|
||||
layers = []
|
||||
for i in range(0, len(digits), picture_size):
|
||||
layer = Counter(digits[i : i + picture_size])
|
||||
layers.append(layer)
|
||||
|
||||
fewest_zeros = min(layer[0] for layer in layers)
|
||||
|
||||
for layer in layers:
|
||||
if layer[0] == fewest_zeros:
|
||||
print(layer[1] * layer[2])
|
Loading…
x
Reference in New Issue
Block a user