From 5c985c7a49acf328a79c91e593eb6c1a519020f1 Mon Sep 17 00:00:00 2001 From: Fedor Lyanguzov Date: Tue, 4 May 2021 02:51:19 +0300 Subject: [PATCH] Solve 12.1 and 12.2 --- 12/12.py | 82 ++++++ 12/input | 787 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 869 insertions(+) create mode 100644 12/12.py create mode 100644 12/input diff --git a/12/12.py b/12/12.py new file mode 100644 index 0000000..14e22d0 --- /dev/null +++ b/12/12.py @@ -0,0 +1,82 @@ +data = [(s[0], int(s[1:])) for s in """ +F10 +N3 +F7 +R90 +F11 +""".strip().split("\n")] +with open("input") as f: + data = [(s[0], int(s[1:])) for s in f.read().strip().split("\n")] + +ship = (0, 0, 0) + +directions = { + 0: (1, 0), + 90: (0, 1), + 180: (-1, 0), + 270: (0, -1), + } + +def move(dx, dy, ship): + x, y, a = ship + return (x+dx, y+dy, a) + +def turn(sign, degree, ship): + x, y, a = ship + return (x, y, (a+sign*degree)%360) + +def moveF(value, ship): + x, y, a = ship + dx, dy = directions[a] + dx, dy = dx*value, dy*value + return move(dx, dy, ship) + +funcs = { + "L": lambda degree, ship: turn(1, degree, ship), + "R": lambda degree, ship: turn(-1, degree, ship), + "N": lambda value, ship: move(0, value, ship), + "S": lambda value, ship: move(0, -value, ship), + "E": lambda value, ship: move(value, 0, ship), + "W": lambda value, ship: move(-value, 0, ship), + "F": moveF, + } + +for op, value in data: + ship = funcs[op](value, ship) + +x, y, _ = ship +print(abs(x)+abs(y)) + + + +def turn90(waypoint): + x, y = waypoint + return (-y, x) +def turn(sign, degree, waypoint): + for _ in range((360+sign*degree)%360//90): + waypoint = turn90(waypoint) + return waypoint +def moveF(value, waypoint, ship): + dx, dy = waypoint + x, y = ship + return waypoint, (x+dx*value, y+dy*value) +def move(dx, dy, ship): + x, y = ship + return (x+dx, y+dy) +waypoint = (10, 1) +ship = (0, 0) + +funcs = { + "L": lambda degree, waypoint, ship: (turn(1, degree, waypoint), ship), + "R": lambda degree, waypoint, ship: (turn(-1, degree, waypoint), ship), + "N": lambda value, waypoint, ship: (move(0, value, waypoint), ship), + "S": lambda value, waypoint, ship: (move(0, -value, waypoint), ship), + "E": lambda value, waypoint, ship: (move(value, 0, waypoint), ship), + "W": lambda value, waypoint, ship: (move(-value, 0, waypoint), ship), + "F": moveF, + } +for op, value in data: + waypoint, ship = funcs[op](value, waypoint, ship) + +x, y = ship +print(abs(x)+abs(y)) diff --git a/12/input b/12/input new file mode 100644 index 0000000..e10642d --- /dev/null +++ b/12/input @@ -0,0 +1,787 @@ +W2 +F23 +S1 +W3 +L180 +W3 +R90 +N4 +F17 +S4 +W4 +R90 +W4 +E1 +N4 +F5 +N2 +R90 +F43 +N5 +L90 +F12 +S4 +W1 +S3 +W2 +N4 +F76 +S1 +W4 +W2 +F20 +N4 +F81 +W4 +N3 +R180 +W2 +N4 +W3 +F16 +N4 +L180 +F1 +W3 +F34 +W3 +S3 +F92 +L90 +S2 +L90 +E5 +N2 +F85 +W3 +R90 +W2 +F88 +N2 +L90 +W1 +N4 +L90 +E5 +N3 +L90 +F8 +E1 +L90 +N3 +F3 +F61 +S5 +R90 +W2 +F84 +W1 +L90 +E1 +S3 +W5 +F89 +E3 +F67 +E2 +E5 +F29 +N5 +W4 +F53 +N2 +E5 +F73 +W4 +L90 +S2 +R180 +N3 +R90 +F27 +N2 +F41 +L270 +W5 +F3 +N5 +F81 +R90 +N2 +W5 +N2 +R90 +S1 +R180 +S3 +L90 +E2 +F38 +S1 +E3 +S5 +F44 +N1 +F26 +E1 +S2 +F25 +E1 +S2 +F33 +S4 +R90 +N2 +W2 +F9 +R90 +F64 +W1 +S3 +E5 +R180 +N2 +L90 +S4 +E4 +L90 +S2 +F50 +S3 +R90 +F8 +E2 +N1 +R90 +S5 +S1 +F100 +N3 +F97 +R180 +S3 +L180 +F45 +W5 +S1 +E5 +E3 +F26 +N4 +R90 +N4 +F50 +W5 +R90 +F58 +S4 +W3 +E1 +N3 +R90 +S4 +E2 +F26 +N4 +L90 +F60 +W4 +N1 +F10 +E5 +L180 +N4 +E1 +F15 +E3 +L270 +F23 +R90 +F61 +R90 +F25 +L90 +W2 +S3 +R180 +F44 +W5 +E1 +R90 +S2 +R270 +W2 +S1 +F13 +E5 +N2 +R270 +F68 +F99 +W1 +F31 +N5 +F89 +E5 +N4 +W5 +N2 +F59 +E3 +L180 +E3 +L90 +L180 +S5 +F27 +E1 +S3 +R180 +N5 +E4 +L180 +N2 +E3 +W1 +L180 +F23 +N4 +E1 +F87 +N1 +E3 +F45 +W5 +F17 +L90 +N1 +L90 +W3 +S2 +F62 +R180 +F8 +R90 +F19 +W1 +S2 +S5 +W4 +F40 +F52 +S3 +F6 +R90 +S5 +W3 +S5 +E3 +W3 +S1 +F11 +S2 +E4 +F3 +R90 +L270 +E1 +S1 +W4 +L180 +W2 +S4 +E2 +N3 +W3 +S2 +W4 +L90 +F24 +W3 +F58 +E5 +R90 +F73 +E4 +F92 +R90 +F62 +W4 +R90 +W2 +S3 +W2 +F75 +N4 +R180 +W5 +S5 +W1 +S2 +L90 +S1 +E5 +L180 +N3 +W3 +F77 +E2 +S5 +L90 +E5 +S4 +L90 +S4 +F32 +L90 +W3 +F92 +W3 +S4 +W1 +R90 +F6 +R180 +E4 +W2 +R90 +W4 +S2 +W5 +S2 +F79 +R90 +S4 +F50 +S4 +W3 +F87 +W5 +R90 +S2 +F23 +E1 +N1 +R90 +F24 +L90 +F29 +N1 +R90 +E5 +N5 +F79 +W3 +L90 +S4 +E5 +S1 +F36 +W2 +R90 +F36 +R270 +F82 +E4 +F82 +S3 +F94 +N2 +L180 +S2 +E1 +N3 +F54 +S3 +F11 +E2 +R90 +W2 +F39 +R90 +S2 +W2 +R90 +E4 +N2 +E5 +F59 +W3 +R90 +W3 +F78 +N4 +F97 +S4 +W1 +F48 +N2 +E2 +R180 +F6 +R90 +W4 +R90 +E5 +F19 +N2 +R180 +F50 +W3 +N5 +R90 +N1 +W4 +F68 +R90 +N2 +L90 +F83 +E3 +N4 +W2 +F48 +W3 +E3 +L180 +F73 +R90 +F81 +W1 +R90 +F25 +S3 +F23 +L270 +S4 +F76 +W3 +F73 +N2 +E5 +L90 +N3 +W3 +R270 +F37 +S5 +R90 +F46 +S4 +E4 +F92 +L90 +N1 +L180 +W3 +S5 +F27 +N1 +L180 +F91 +W4 +N3 +F11 +L180 +N1 +E3 +L90 +S2 +R90 +S2 +E3 +F55 +S4 +E2 +S2 +F3 +E3 +F58 +W4 +N4 +E5 +F2 +N1 +W3 +F86 +E5 +F60 +W3 +F9 +S4 +R180 +F44 +E4 +N1 +F74 +L270 +E4 +L270 +F52 +R180 +F70 +L180 +E1 +F68 +R90 +E5 +W4 +R90 +E4 +F27 +S2 +L90 +W5 +N5 +R90 +E2 +N5 +F15 +R180 +F72 +S5 +L90 +F31 +R90 +E4 +R270 +S3 +W3 +R270 +N1 +S3 +R90 +F80 +R90 +E2 +N5 +W2 +L90 +F40 +N1 +F14 +L90 +W2 +F9 +W4 +R90 +F88 +R180 +N1 +E5 +F96 +N1 +F4 +R90 +F56 +F14 +L90 +F8 +R180 +S2 +F75 +L90 +E5 +R90 +F81 +N1 +W3 +F46 +R270 +S2 +F15 +W3 +R180 +F27 +W3 +F53 +R90 +E5 +L90 +S3 +W1 +F62 +S5 +W2 +S5 +R90 +F82 +W2 +N4 +L270 +E1 +N5 +E2 +F52 +N1 +E2 +S2 +R180 +N1 +L90 +W2 +L90 +F78 +L90 +W1 +N4 +F81 +E1 +N4 +W2 +F86 +W1 +F30 +W5 +N4 +E3 +F42 +N2 +F5 +R90 +F60 +L90 +E5 +S4 +E5 +S3 +F70 +S3 +R90 +W5 +R90 +W2 +N3 +L180 +E3 +S2 +E3 +F82 +E2 +F5 +E4 +E1 +S1 +R180 +W4 +F1 +R180 +N4 +E1 +S3 +E3 +F59 +W3 +F73 +L90 +F74 +R90 +E1 +F54 +W3 +F54 +L90 +S4 +F100 +F56 +L90 +F26 +L180 +F50 +W3 +S2 +E3 +F87 +N2 +W5 +F50 +S2 +W5 +S1 +F46 +R90 +F89 +L90 +N4 +F53 +W1 +F56 +E4 +S5 +F68 +L90 +F22 +R90 +F73 +S5 +S5 +L90 +E4 +S2 +R270 +E3 +L90 +F20 +L90 +F84 +S1 +F29 +W2 +S4 +L90 +W4 +N1 +F65 +E5 +L90 +S3 +F38 +L90 +L90 +N5 +F50 +S1 +F16 +R90 +F12 +E2 +N3 +F49 +R90 +F4 +N1 +R90 +F80 +R180 +W2 +L90 +S5 +E1 +F93 +R90 +F32 +L180 +F44 +L90 +S4 +F42 +N2 +R90 +S1 +F56 +L180 +E2 +F90 +N1 +F3 +L90 +E1 +F91 +L90 +W4 +L90 +F10 +S3 +W5 +S3 +F87