Added 2017/11
This commit is contained in:
parent
a3a7d201b3
commit
ac2a79d085
52
2017/11/11.md
Normal file
52
2017/11/11.md
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
## \-\-- Day 11: Hex Ed \-\--
|
||||||
|
|
||||||
|
Crossing the bridge, you\'ve barely reached the other side of the stream
|
||||||
|
when a program comes up to you, clearly in distress. \"It\'s my child
|
||||||
|
process,\" she says, \"he\'s gotten lost in an infinite grid!\"
|
||||||
|
|
||||||
|
Fortunately for her, you have plenty of experience with infinite grids.
|
||||||
|
|
||||||
|
Unfortunately for you, it\'s a [hex
|
||||||
|
grid](https://en.wikipedia.org/wiki/Hexagonal_tiling).
|
||||||
|
|
||||||
|
The hexagons (\"hexes\") in [this
|
||||||
|
grid]{title="Raindrops on roses and whiskers on kittens."} are aligned
|
||||||
|
such that adjacent hexes can be found to the north, northeast,
|
||||||
|
southeast, south, southwest, and northwest:
|
||||||
|
|
||||||
|
\ n /
|
||||||
|
nw +--+ ne
|
||||||
|
/ \
|
||||||
|
-+ +-
|
||||||
|
\ /
|
||||||
|
sw +--+ se
|
||||||
|
/ s \
|
||||||
|
|
||||||
|
You have the path the child process took. Starting where he started, you
|
||||||
|
need to determine the fewest number of steps required to reach him. (A
|
||||||
|
\"step\" means to move from the hex you are in to any adjacent hex.)
|
||||||
|
|
||||||
|
For example:
|
||||||
|
|
||||||
|
- `ne,ne,ne` is `3` steps away.
|
||||||
|
- `ne,ne,sw,sw` is `0` steps away (back where you started).
|
||||||
|
- `ne,ne,s,s` is `2` steps away (`se,se`).
|
||||||
|
- `se,sw,se,sw,sw` is `3` steps away (`s,s,sw`).
|
||||||
|
|
||||||
|
Your puzzle answer was `675`.
|
||||||
|
|
||||||
|
## \-\-- Part Two \-\-- {#part2}
|
||||||
|
|
||||||
|
*How many steps away* is the *furthest* he ever got from his starting
|
||||||
|
position?
|
||||||
|
|
||||||
|
Your puzzle answer was `1424`.
|
||||||
|
|
||||||
|
Both parts of this puzzle are complete! They provide two gold stars:
|
||||||
|
\*\*
|
||||||
|
|
||||||
|
At this point, you should [return to your Advent calendar](/2017) and
|
||||||
|
try another puzzle.
|
||||||
|
|
||||||
|
If you still want to see it, you can [get your puzzle
|
||||||
|
input](11/input).
|
98
2017/11/solution.py
Normal file
98
2017/11/solution.py
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
#!/bin/python3
|
||||||
|
import sys,re,math
|
||||||
|
from pprint import pprint
|
||||||
|
|
||||||
|
input_f = 'input'
|
||||||
|
|
||||||
|
part = 2
|
||||||
|
|
||||||
|
def manhattan(a, b):
|
||||||
|
return int(sum(abs(val1-val2) for val1, val2 in zip(a,b))/2)
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 1 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
# https://www.redblobgames.com/grids/hexagons/
|
||||||
|
|
||||||
|
if part == 1:
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
steps = line.rsplit()[0].split(',')
|
||||||
|
#print(steps)
|
||||||
|
|
||||||
|
grid = []
|
||||||
|
|
||||||
|
w, h = 11,11
|
||||||
|
grid = [[' ' for x in range(w)] for y in range(h)]
|
||||||
|
|
||||||
|
|
||||||
|
start = int(len(grid)/2)
|
||||||
|
distance = []
|
||||||
|
|
||||||
|
x = 0
|
||||||
|
y = 0
|
||||||
|
z = 0
|
||||||
|
|
||||||
|
for i in steps:
|
||||||
|
if i == 'ne':
|
||||||
|
x += 1
|
||||||
|
z -= 1
|
||||||
|
if i == 'sw':
|
||||||
|
x -= 1
|
||||||
|
z += 1
|
||||||
|
if i == 's':
|
||||||
|
z += 1
|
||||||
|
y -= 1
|
||||||
|
if i == 'n':
|
||||||
|
z -= 1
|
||||||
|
y += 1
|
||||||
|
if i == 'se':
|
||||||
|
x += 1
|
||||||
|
y -= 1
|
||||||
|
if i == 'nw':
|
||||||
|
x -= 1
|
||||||
|
y += 1
|
||||||
|
print(int((abs(x)+abs(y)+abs(z))/2))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#########################################
|
||||||
|
# #
|
||||||
|
# Part 2 #
|
||||||
|
# #
|
||||||
|
#########################################
|
||||||
|
if part == 2:
|
||||||
|
with open(input_f) as file:
|
||||||
|
for line in file:
|
||||||
|
steps = line.rsplit()[0].split(',')
|
||||||
|
|
||||||
|
distance = []
|
||||||
|
|
||||||
|
x = 0
|
||||||
|
y = 0
|
||||||
|
z = 0
|
||||||
|
|
||||||
|
for i in steps:
|
||||||
|
if i == 'ne':
|
||||||
|
x += 1
|
||||||
|
z -= 1
|
||||||
|
if i == 'sw':
|
||||||
|
x -= 1
|
||||||
|
z += 1
|
||||||
|
if i == 's':
|
||||||
|
z += 1
|
||||||
|
y -= 1
|
||||||
|
if i == 'n':
|
||||||
|
z -= 1
|
||||||
|
y += 1
|
||||||
|
if i == 'se':
|
||||||
|
x += 1
|
||||||
|
y -= 1
|
||||||
|
if i == 'nw':
|
||||||
|
x -= 1
|
||||||
|
y += 1
|
||||||
|
distance.append((abs(x)+abs(y)+abs(z))/2)
|
||||||
|
|
||||||
|
print('Distance:',int(max(distance)))
|
Loading…
Reference in New Issue
Block a user