53 lines
963 B
Python
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()
|