Frans Bergman 4 жил өмнө
parent
commit
3022d2488b
3 өөрчлөгдсөн 872 нэмэгдсэн , 0 устгасан
  1. 783 0
      12.input
  2. 84 0
      12.py
  3. 5 0
      12.small.input

+ 783 - 0
12.input

@@ -0,0 +1,783 @@
+F36
+L90
+S5
+F67
+W3
+R90
+F67
+R90
+E1
+S5
+W2
+N1
+E1
+F21
+S4
+E2
+S5
+R90
+N1
+F69
+R180
+N3
+F40
+E1
+S3
+R90
+S1
+R90
+F100
+W3
+F82
+N2
+W2
+F47
+W5
+F77
+W5
+R90
+N2
+W2
+F34
+N3
+E3
+F54
+L90
+S1
+E3
+R90
+F9
+R90
+E1
+N1
+F91
+L90
+S4
+W5
+S3
+L90
+W3
+F6
+L180
+N5
+F34
+E2
+L90
+F84
+L90
+W5
+L90
+W2
+N2
+E4
+L270
+F31
+N1
+R90
+N1
+W4
+L90
+F72
+S4
+F2
+L90
+F92
+N4
+E5
+F88
+R180
+E1
+S4
+E1
+S1
+F9
+N2
+W2
+L90
+F61
+R90
+F93
+S3
+L90
+W3
+F26
+E1
+L90
+E4
+S3
+R270
+N2
+F39
+R180
+S4
+E4
+F65
+S4
+R180
+S2
+F46
+W5
+R90
+E4
+L90
+F98
+W4
+R90
+E2
+R180
+F14
+L90
+S1
+F8
+S3
+L90
+N3
+F11
+S2
+L90
+W3
+S3
+L90
+W1
+L90
+F64
+S2
+E2
+N4
+W3
+F38
+E3
+N2
+F19
+S2
+L90
+E2
+F94
+E1
+R90
+E2
+S5
+L90
+F6
+E3
+S4
+L180
+W5
+R90
+N3
+W3
+S5
+F24
+L90
+F1
+W4
+F47
+W2
+S1
+E1
+S2
+E1
+N4
+L180
+F61
+W2
+F20
+E5
+S3
+F37
+F6
+L90
+E1
+R90
+W5
+S2
+L90
+E2
+N2
+L90
+F50
+W2
+F49
+R90
+S1
+R180
+S5
+R90
+S1
+E4
+R90
+F65
+L90
+S5
+E1
+F61
+S2
+F40
+L90
+E5
+R90
+E5
+L90
+S1
+F67
+S2
+F48
+R270
+E4
+F35
+S5
+F14
+L180
+E3
+L90
+F64
+W3
+R90
+E2
+R90
+S3
+L90
+S2
+W4
+F94
+R180
+N1
+W1
+R90
+F41
+R90
+N1
+L90
+W2
+N2
+R90
+F43
+N1
+L180
+F6
+E4
+F99
+N1
+F54
+N3
+R90
+F57
+W5
+F16
+S5
+L90
+E5
+R90
+S4
+L90
+F68
+L180
+S1
+E4
+R90
+F88
+S2
+F19
+R90
+W2
+W1
+F62
+S2
+R90
+N3
+R180
+S5
+E4
+F41
+W2
+S5
+W1
+R90
+W2
+W4
+L90
+S4
+R90
+F1
+W5
+F44
+W3
+N2
+F41
+W5
+L90
+N5
+W1
+F13
+E2
+R90
+N3
+W3
+F8
+W1
+R90
+F51
+R90
+E1
+S5
+F18
+S2
+E3
+F23
+L180
+F26
+N2
+F25
+E4
+F24
+E5
+N1
+L90
+S1
+E5
+R90
+F88
+S2
+W3
+R90
+F30
+L90
+E4
+L270
+S1
+E2
+F87
+W4
+N1
+R180
+N1
+F2
+L90
+S3
+F29
+S4
+L90
+N2
+F59
+L90
+W2
+N5
+F45
+N2
+W4
+N4
+F27
+W5
+F4
+S2
+F56
+L180
+S2
+R90
+W4
+F95
+L90
+R90
+F68
+L90
+S4
+W5
+F46
+N1
+W2
+F80
+R270
+F35
+L90
+E3
+S5
+R90
+S1
+W2
+F53
+S3
+R180
+F38
+F57
+W1
+R90
+N1
+W4
+S3
+R180
+E1
+F24
+S5
+F96
+W4
+F53
+S4
+F59
+F7
+E5
+S2
+L90
+E2
+L90
+N5
+L90
+N3
+F75
+S2
+R180
+N1
+W3
+N3
+R90
+F71
+L180
+S4
+L90
+F53
+S5
+L90
+N5
+S5
+F14
+L90
+E3
+F40
+N1
+E3
+N2
+F69
+W1
+N5
+W3
+S3
+R90
+N3
+F3
+S5
+E1
+R90
+E5
+F16
+R90
+F94
+E2
+L180
+F16
+E2
+F71
+W1
+F4
+L90
+W4
+F45
+L90
+S3
+W3
+S5
+R90
+E3
+N1
+W1
+S3
+L90
+W2
+W1
+S5
+F1
+L90
+E3
+L180
+S5
+F5
+W1
+L90
+N5
+E5
+R90
+E2
+R90
+W5
+R90
+F11
+W5
+S2
+E5
+R90
+F29
+W5
+S5
+F14
+S4
+L90
+F48
+R180
+F63
+E4
+N4
+E5
+W5
+S4
+W5
+S5
+F9
+L270
+W3
+F78
+W2
+F100
+W2
+N4
+F44
+F11
+E2
+F17
+E4
+F80
+S5
+F36
+L90
+W2
+F12
+L90
+N4
+E3
+S5
+F90
+F73
+W1
+S3
+W4
+F50
+N4
+N3
+F79
+W5
+F38
+L90
+W5
+S3
+F50
+R90
+L270
+R180
+F84
+L180
+E2
+R180
+N3
+N3
+W5
+S3
+L180
+N3
+E1
+N4
+N5
+F23
+N2
+E1
+N1
+E3
+F64
+E4
+F4
+R90
+S4
+E5
+S2
+L90
+E3
+F32
+W1
+N2
+F20
+E4
+W5
+F93
+E5
+N1
+W4
+F18
+E1
+N1
+F7
+N3
+F55
+E3
+F91
+W4
+F86
+N5
+W1
+F38
+N4
+R180
+W4
+S5
+F95
+R180
+F22
+R90
+F58
+W3
+F62
+L90
+F17
+S2
+R90
+N5
+L90
+N4
+E1
+N1
+E2
+E4
+R180
+F72
+N4
+E4
+R180
+F74
+W5
+N5
+W5
+N5
+W2
+F26
+S2
+E4
+N4
+F23
+E2
+F95
+E1
+N4
+E1
+L270
+S3
+E3
+R90
+S2
+E5
+R180
+F73
+S5
+W1
+F61
+F60
+E2
+F97
+S2
+L90
+W5
+R180
+F99
+R180
+F52
+N1
+L180
+S4
+W4
+R180
+F70
+S4
+L90
+S5
+W2
+L90
+N2
+W5
+F31
+L90
+E3
+F87
+L90
+S2
+W4
+F25
+L180
+F50
+S5
+E1
+F75
+N2
+F30
+S4
+F100
+E3
+L180
+F57
+L90
+W5
+R90
+W2
+F65
+L90
+F29
+E4
+L270
+E3
+L90
+N4
+E2
+E5
+F36
+N4
+E4
+N4
+F41
+E2
+S3
+F72
+W4
+F26
+L90
+E5
+R90
+N4
+F97
+L90
+W1
+F31
+N2
+L90
+E3
+N5
+L90
+F5
+R180
+F97
+S1
+E5
+N4
+R90
+F77
+N2
+F92
+S5
+F84
+E3
+S3
+L270
+N3
+R180
+N4
+F63
+N4
+E5
+F62
+S3
+F54
+N2
+E5
+F89
+R90
+S4
+F95
+F56
+L90
+S4
+L90
+S4
+R180
+F93

+ 84 - 0
12.py

@@ -0,0 +1,84 @@
+import itertools
+from math import sin, cos, radians, atan2, sqrt, pi, degrees
+
+instructions = []
+
+with open("12.input") as f:
+    for line in f.readlines():
+        line = line.strip()
+        instructions.append((line[0], int(line[1:])))
+
+myadd = lambda xs,ys: tuple(x + y for x, y in zip(xs, ys))
+
+def manhattan_distance(pos):
+    (x, y) = pos
+    return abs(y) + abs(x)
+
+def move(position, angle, instruction):
+    op, arg = instruction
+
+    if op == 'L':
+        angle += arg
+    elif op == 'R':
+        angle -= arg
+    elif op == 'N':
+        position = myadd(position, (0, arg))
+    elif op == 'S':
+        position = myadd(position, (0, -arg))
+    elif op == 'E':
+        position = myadd(position, (arg, 0))
+    elif op == 'W':
+        position = myadd(position, (-arg, 0))
+    elif op == 'F':
+        position = myadd(position, (cos(radians(angle)) * arg, sin(radians(angle)) * arg))
+
+    return (position, angle)
+
+position = (0, 0)
+angle = 0
+
+for instruction in instructions:
+    (position, angle) = move(position, angle, instruction)
+
+print("Answer 1: {:0.0f}".format(manhattan_distance(position)))
+
+def print_vector(vec):
+    print("{}, {}".format(vec, degrees(atan2(vec[1], vec[0]))))
+
+
+def rotate(vec, degrees):
+    angle = atan2(vec[1], vec[0])
+    length = sqrt(vec[0] ** 2 + vec[1] ** 2)
+    angle += radians(degrees)
+    vec = (cos(angle) * length, sin(angle) * length)
+    return vec
+
+
+def move_waypoint(ship_pos, way_pos, instruction):
+    op, arg = instruction
+
+    if op == 'L':
+        way_pos = rotate(way_pos, arg)
+    elif op == 'R':
+        way_pos = rotate(way_pos, -arg)
+    elif op == 'N':
+        way_pos = myadd(way_pos, (0, arg))
+    elif op == 'S':
+        way_pos = myadd(way_pos, (0, -arg))
+    elif op == 'E':
+        way_pos = myadd(way_pos, (arg, 0))
+    elif op == 'W':
+        way_pos = myadd(way_pos, (-arg, 0))
+    elif op == 'F':
+        ship_pos = (ship_pos[0] + way_pos[0] * arg, ship_pos[1] + way_pos[1] * arg)
+
+    return (ship_pos, way_pos)
+
+ship_pos = (0, 0)
+way_pos = (10, 1)
+
+for instruction in instructions:
+    (ship_pos, way_pos) = move_waypoint(ship_pos, way_pos, instruction)
+
+print("Answer 2: {:0.0f}".format(manhattan_distance(ship_pos)))
+

+ 5 - 0
12.small.input

@@ -0,0 +1,5 @@
+F10
+N3
+F7
+R90
+F11