diff --git a/2017/11/11.md b/2017/11/11.md new file mode 100644 index 0000000..2c8e3cc --- /dev/null +++ b/2017/11/11.md @@ -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). diff --git a/2017/11/solution.py b/2017/11/solution.py new file mode 100644 index 0000000..863101e --- /dev/null +++ b/2017/11/solution.py @@ -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))) \ No newline at end of file