Add solution and README for day8
This commit is contained in:
parent
fc141304d8
commit
2794d172a9
96
day8/README.md
Normal file
96
day8/README.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
# Day 8: Space Image Format
|
||||||
|
|
||||||
|
## Problem
|
||||||
|
|
||||||
|
### Part One
|
||||||
|
|
||||||
|
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?
|
||||||
|
|
||||||
|
### Part Two
|
||||||
|
|
||||||
|
Now you're ready to decode the image. The image is rendered by stacking the
|
||||||
|
layers and aligning the pixels with the same positions in each layer. The
|
||||||
|
digits indicate the color of the corresponding pixel: `0` is black, `1` is
|
||||||
|
white, and `2` is transparent.
|
||||||
|
|
||||||
|
The layers are rendered with the first layer in front and the last layer in
|
||||||
|
back. So, if a given position has a transparent pixel in the first and second
|
||||||
|
layers, a black pixel in the third layer, and a white pixel in the fourth
|
||||||
|
layer, the final image would have a black pixel at that position.
|
||||||
|
|
||||||
|
For example, given an image `2` pixels wide and `2` pixels tall, the image
|
||||||
|
data `0222112222120000` corresponds to the following image layers:
|
||||||
|
|
||||||
|
```
|
||||||
|
Layer 1: 02
|
||||||
|
22
|
||||||
|
|
||||||
|
Layer 2: 11
|
||||||
|
22
|
||||||
|
|
||||||
|
Layer 3: 22
|
||||||
|
12
|
||||||
|
|
||||||
|
Layer 4: 00
|
||||||
|
00
|
||||||
|
```
|
||||||
|
|
||||||
|
Then, the full image can be found by determining the top visible pixel in
|
||||||
|
each position:
|
||||||
|
|
||||||
|
* The top-left pixel is black because the top layer is `0`.
|
||||||
|
* The top-right pixel is white because the top layer is `2` (transparent),
|
||||||
|
but the second layer is `1`.
|
||||||
|
* The bottom-left pixel is white because the top two layers are `2`, but the
|
||||||
|
third layer is `1`.
|
||||||
|
* The bottom-right pixel is black because the only visible pixel in that
|
||||||
|
position is `0` (from layer 4).
|
||||||
|
|
||||||
|
So, the final image looks like this:
|
||||||
|
|
||||||
|
```
|
||||||
|
01
|
||||||
|
10
|
||||||
|
```
|
||||||
|
|
||||||
|
What message is produced after decoding your image?
|
||||||
1
day8/input
Normal file
1
day8/input
Normal file
File diff suppressed because one or more lines are too long
35
day8/python/day8.py
Normal file
35
day8/python/day8.py
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
f = open('../input').read()
|
||||||
|
|
||||||
|
g = 25*6
|
||||||
|
timer = int(len(f)/g)
|
||||||
|
times = {}
|
||||||
|
layer = {}
|
||||||
|
for i in range(timer):
|
||||||
|
layer[i] = f[0:g]
|
||||||
|
f = f[g:]
|
||||||
|
times[i] = list(layer[i]).count('0')
|
||||||
|
|
||||||
|
k = list(times.keys())[list(times.values()).index(min(list(times.values())))]
|
||||||
|
a = list(layer[k]).count('1')
|
||||||
|
b = list(layer[k]).count('2')
|
||||||
|
print('Solution for Part One:', a*b)
|
||||||
|
|
||||||
|
f = open('../input').read()
|
||||||
|
g = 25*6
|
||||||
|
layer = {}
|
||||||
|
for i in range(timer):
|
||||||
|
layer[i] = f[0:g]
|
||||||
|
f = f[g:]
|
||||||
|
|
||||||
|
picture=layer[0]
|
||||||
|
|
||||||
|
for i in range(25*6):
|
||||||
|
d = 0
|
||||||
|
while picture[i] == '2':
|
||||||
|
d += 1
|
||||||
|
picture = picture[:i] + layer[d][i] + picture[i + 1:]
|
||||||
|
|
||||||
|
picture = picture.replace('0', ' ')
|
||||||
|
print('Solution for Part Two:')
|
||||||
|
for i in range(25):
|
||||||
|
print(picture[i*25:(i+1)*25])
|
||||||
Loading…
x
Reference in New Issue
Block a user