Files
aocpy/2017/d11.py

53 lines
963 B
Python

from lib import add2
from math import ceil
DIR = {
"n": (-2, 0),
"s": (2, 0),
"e": (0, 1),
"w": (0, -1),
"ne": (-1, 1),
"nw": (-1, -1),
"se": (1, 1),
"sw": (1, -1),
}
def steps_to_zero(pos: tuple[int, int]):
c = list(map(abs, pos))
steps = c[1]
c[0] -= c[1]
if c[0] > 0:
steps += ceil(c[0] / 2)
return steps
def part_1(data):
c = (0, 0)
for d in data.split(","):
c = add2(c, DIR[d])
return steps_to_zero(c)
def part_2(data):
c = (0, 0)
steps_max = 0
for d in data.split(","):
c = add2(c, DIR[d])
steps_max = max(steps_to_zero(c), steps_max)
return steps_max
def main():
data = open(0).read().strip()
print(part_1(data))
print(part_2(data))
assert part_1("ne,ne,ne") == 3
assert part_1("ne,ne,sw,sw") == 0
assert part_1("ne,ne,s,s") == 2
assert part_1("se,sw,se,sw,sw") == 3
if __name__ == "__main__":
main()