about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2020-12-13 16:34:55 +0100
committerLeah Neukirchen <leah@vuxu.org>2020-12-13 16:34:55 +0100
commit6f632d4daff51d874e049bcdd168366fd1b4c71c (patch)
tree690190640f7b064938c898d8ec6a94d3b907d413
parentcc9dc71b287c001b1dc5f61a59a770d805d65659 (diff)
downloadadventofcode2020-6f632d4daff51d874e049bcdd168366fd1b4c71c.tar.gz
adventofcode2020-6f632d4daff51d874e049bcdd168366fd1b4c71c.tar.xz
adventofcode2020-6f632d4daff51d874e049bcdd168366fd1b4c71c.zip
day12
-rw-r--r--day12750
-rw-r--r--day12.clj35
-rw-r--r--day12.ijs35
3 files changed, 820 insertions, 0 deletions
diff --git a/day12 b/day12
new file mode 100644
index 0000000..dc64185
--- /dev/null
+++ b/day12
@@ -0,0 +1,750 @@
+W1
+F91
+W3
+F82
+N1
+E2
+N4
+R90
+F25
+N2
+F75
+E4
+R90
+F91
+R90
+F64
+L90
+E1
+L90
+S2
+L180
+S2
+E3
+N2
+E5
+L90
+N2
+R90
+F30
+L90
+N1
+F37
+S1
+E5
+F3
+E2
+F59
+W3
+L270
+S5
+W5
+S4
+F84
+N5
+R180
+E4
+F31
+L90
+E2
+F77
+L90
+N5
+F17
+N4
+N4
+W2
+F45
+S1
+F92
+E1
+F33
+L270
+F21
+L90
+E1
+F81
+N5
+F20
+E2
+R90
+N4
+W3
+L180
+S2
+F33
+E5
+F87
+R90
+N2
+F29
+E3
+S4
+L90
+E4
+R90
+S2
+F65
+L90
+F69
+W2
+N4
+F73
+R180
+S3
+R90
+N3
+R90
+W1
+L180
+F96
+N3
+W2
+L180
+S5
+F29
+E3
+S4
+W1
+F53
+E1
+L90
+E5
+F26
+E3
+R270
+E2
+S2
+W2
+F43
+W2
+F53
+F74
+R180
+N5
+W3
+S4
+F70
+R90
+W4
+F56
+L90
+S5
+R180
+E4
+S4
+F80
+S1
+F91
+R90
+S4
+F88
+L90
+S5
+R90
+E2
+S1
+F37
+N1
+R90
+F92
+W5
+F14
+N2
+E5
+S2
+F89
+L180
+N4
+E4
+L90
+F32
+E4
+R90
+F99
+N3
+L180
+F78
+S1
+R270
+W1
+F11
+S4
+F47
+N4
+L90
+F17
+R90
+E4
+S3
+F14
+S1
+R90
+N3
+F52
+W3
+S5
+L180
+F41
+R90
+F62
+W1
+R90
+E4
+F1
+W5
+F86
+W1
+N5
+F5
+S1
+E5
+F67
+W3
+F97
+E1
+L90
+S2
+E1
+R90
+F82
+E3
+N2
+F16
+L90
+W2
+F35
+R180
+N2
+E3
+N4
+W4
+F13
+S5
+E1
+S5
+L90
+E5
+F65
+E5
+L90
+S4
+E3
+W4
+N1
+R90
+N5
+F93
+R90
+S5
+R90
+L90
+F86
+E3
+F90
+E4
+N2
+E4
+R180
+W5
+R90
+E3
+F98
+F56
+L90
+F68
+L90
+N3
+F35
+S1
+W5
+F25
+L180
+F7
+R270
+F84
+R90
+S4
+E5
+S3
+L270
+F33
+W3
+R90
+W5
+N3
+E4
+R90
+W2
+F100
+E5
+S2
+L90
+F6
+E1
+L90
+S1
+F17
+N3
+E1
+S3
+F78
+R90
+W5
+N4
+L90
+F13
+W5
+R90
+F7
+F74
+R90
+E4
+F28
+L90
+S5
+R90
+F77
+S2
+E2
+N3
+F30
+E1
+R90
+W2
+S2
+F62
+E2
+L90
+E2
+F56
+L90
+F61
+S1
+F14
+W3
+F23
+L90
+E3
+S3
+L270
+S5
+F97
+E5
+S1
+F96
+W2
+F61
+L180
+F25
+L90
+W4
+F100
+W4
+F14
+W4
+S5
+R90
+F67
+E1
+R90
+F89
+W5
+S3
+W2
+N2
+F64
+L180
+S4
+R270
+F47
+E1
+S1
+E4
+N1
+R90
+N2
+E5
+F97
+N3
+E5
+S5
+R180
+E5
+F34
+L90
+W1
+W1
+N3
+R90
+F17
+N1
+F75
+S4
+W5
+N2
+W1
+N2
+L90
+W3
+N2
+F1
+N1
+W3
+R90
+F18
+E4
+N4
+F18
+N4
+F73
+W4
+F61
+W3
+R90
+N5
+L90
+N4
+F70
+E4
+F10
+L90
+F33
+N5
+L90
+W4
+L180
+E2
+F41
+E1
+S4
+E4
+L90
+F28
+N2
+W4
+S2
+F86
+R180
+S3
+W3
+S3
+W2
+F55
+W1
+F18
+W2
+F18
+L90
+S4
+W1
+L90
+F47
+L90
+S4
+F39
+N5
+L180
+S3
+W5
+F95
+W1
+R90
+E2
+N3
+L90
+S4
+F77
+S1
+W4
+S5
+E4
+R90
+W1
+R90
+W3
+W2
+N4
+F1
+W1
+N5
+F55
+E4
+N4
+W5
+L90
+F90
+E4
+R90
+E2
+R90
+S5
+F44
+N2
+E3
+R90
+F64
+W1
+L180
+L180
+F55
+L90
+F15
+S2
+E1
+R270
+F10
+R90
+W4
+F43
+E1
+F7
+N2
+W3
+F10
+N1
+L270
+N2
+L90
+E2
+R90
+F28
+W2
+N5
+F70
+R90
+E3
+E3
+F75
+W4
+L90
+S2
+R90
+F83
+L270
+E1
+F87
+R180
+N3
+L90
+F30
+L90
+E1
+N5
+F87
+N4
+R90
+F51
+W5
+N3
+R90
+S5
+F98
+W4
+N2
+E2
+L90
+E4
+S1
+E5
+F60
+N1
+L180
+E1
+F10
+R90
+W5
+F90
+W5
+F9
+S1
+W3
+F9
+E2
+S4
+L180
+F61
+W2
+N3
+F35
+R90
+E4
+N3
+W4
+L90
+E1
+L90
+S1
+F62
+S5
+W1
+N5
+L180
+F76
+W3
+L90
+W4
+L90
+N2
+E3
+N5
+E1
+N2
+F13
+S1
+F20
+W5
+L90
+S1
+F89
+S3
+L90
+W2
+L90
+F48
+W5
+N1
+R90
+F93
+L90
+E4
+L90
+N2
+F100
+W5
+S5
+W1
+S1
+E2
+S1
+W4
+R90
+S2
+F99
+W2
+F80
+L90
+F78
+N4
+L90
+F67
+S1
+L90
+F23
+W3
+N1
+W5
+F76
+R270
+F51
+L90
+W2
+N1
+E3
+S3
+L90
+F83
+L90
+F46
+S5
+L180
+N3
+E3
+F49
+E5
+N4
+W5
+L90
+E3
+R90
+S4
+F54
+E1
+F49
+N4
+L180
+E3
+L90
+R90
+F95
+W2
+N2
+F12
+R180
+E4
+R90
+N5
+L180
+S3
+W3
+S1
+F22
+W1
+F18
+L90
+F35
+R90
+F3
+S4
+L90
+F53
+W5
+F58
+L90
+S2
+F48
+S5
+R180
+F67
+L180
+W1
+S3
+L90
+F33
+F34
+R90
+F54
+W2
+L180
+S5
+W4
+R90
+F80
+W4
+S1
+W4
+F35
+E1
+F48
+N3
+L270
+F78
+N4
+S4
+F11
+S1
+W3
+L90
+W1
+F26
+R180
+E3
+F43
+S4
+R180
+W3
+N2
+F80
+W4
+F29
+W5
+W1
+R270
+N3
+L90
+F17
+W4
+F49
+S4
+S1
+F47
diff --git a/day12.clj b/day12.clj
new file mode 100644
index 0000000..1ce50bc
--- /dev/null
+++ b/day12.clj
@@ -0,0 +1,35 @@
+(def data
+  (->> (slurp "day12")
+       (clojure.string/split-lines)
+       (map (juxt first (comp read-string #(subs % 1))))
+       vec))
+
+(defn rotl [[dx dy] deg]
+  (case deg
+     90 [(- dy) dx]
+    180 [(- dx) (- dy)]
+    270 [dy (- dx)]))
+
+(defn step1 [[x y dx dy] [ins n]]
+  (case ins
+    \N [x (+ y n) dx dy]
+    \S [x (- y n) dx dy]
+    \E [(+ x n) y dx dy]
+    \W [(- x n) y dx dy]
+    \L (concat [x y] (rotl [dx dy] n))
+    \R (concat [x y] (rotl [dx dy] (- 360 n)))    
+    \F [(+ x (* n dx)) (+ y (* n dy)) dx dy]))
+
+(apply + (map #(Math/abs %) (take 2 (reduce step1 [0 0 1 0] data)))) ; => 1294
+
+(defn step2 [[x y wx wy] [ins n]]
+  (case ins
+    \N [x y wx (+ wy n)]
+    \S [x y wx (- wy n)]
+    \E [x y (+ wx n) wy]
+    \W [x y (- wx n) wy]
+    \L (concat [x y] (rotl [wx wy] n))
+    \R (concat [x y] (rotl [wx wy] (- 360 n)))
+    \F [(+ x (* n wx)) (+ y (* n wy)) wx wy]))
+
+(apply + (map #(Math/abs %) (take 2 (reduce step2 [0 0 10 1] data)))) ; => 20592
diff --git a/day12.ijs b/day12.ijs
new file mode 100644
index 0000000..e5301ed
--- /dev/null
+++ b/day12.ijs
@@ -0,0 +1,35 @@
+load 'aoc.ijs'
+d =: ({.;".@}.) every lines 'day12'
+
+rotl =: ] ({. ,~ [: - {:)@[&0~ 90 %~ [
+
+step1 =: 4 : 0
+'xx yy dx dy' =. y
+'ins n' =. x
+select. ins
+case. 'N' do. y + 0,n,0,0
+case. 'S' do. y - 0,n,0,0
+case. 'E' do. y + n,0,0,0
+case. 'W' do. y - n,0,0,0
+case. 'L' do. xx,yy,n rotl dx,dy
+case. 'R' do. xx,yy,(360 - n) rotl dx,dy
+case. 'F' do. y + n*dx,dy,0,0
+end.
+)
+
++/|2 {. 0 0 1 0 (step1 F.. ]) d  NB. 1294
+
+step2 =: 4 : 0
+'ins n' =. x
+select. {. ins
+case. 'N' do. y + 0,0,0,n
+case. 'S' do. y - 0,0,0,n
+case. 'E' do. y + 0,0,n,0
+case. 'W' do. y - 0,0,n,0
+case. 'L' do. (2{.y),n rotl 2}.y
+case. 'R' do. (2{.y),(360-n) rotl 2}.y
+case. 'F' do. y + n*(2}.y),0,0
+end.
+)
+
++/|2 {. 0 0 10 1 (step2 F.. ]) d  NB. 20592