From 9600766b224fe0d056b9531c577c1f397a6ebdf3 Mon Sep 17 00:00:00 2001 From: Nat Quayle Nelson Date: Sat, 12 Dec 2020 15:12:16 -0700 Subject: [PATCH] Solve AOC day 12 pt 1 --- projects/aoc/src/year2020/Evasion.hx | 7 + projects/aoc/src/year2020/EvasionDSL.kiss | 38 + projects/aoc/src/year2020/Solutions.hx | 1 + projects/aoc/src/year2020/Solutions.kiss | 22 +- projects/aoc/src/year2020/inputs/day12.txt | 768 +++++++++++++++++++++ 5 files changed, 835 insertions(+), 1 deletion(-) create mode 100644 projects/aoc/src/year2020/Evasion.hx create mode 100644 projects/aoc/src/year2020/EvasionDSL.kiss create mode 100644 projects/aoc/src/year2020/inputs/day12.txt diff --git a/projects/aoc/src/year2020/Evasion.hx b/projects/aoc/src/year2020/Evasion.hx new file mode 100644 index 00000000..9e9cca0b --- /dev/null +++ b/projects/aoc/src/year2020/Evasion.hx @@ -0,0 +1,7 @@ +package year2020; + +import kiss.EmbeddedScript; +import kiss.Prelude; + +@:build(kiss.EmbeddedScript.build("src/year2020/EvasionDSL.kiss", "src/year2020/inputs/day12.txt")) +class EvasionScript extends EmbeddedScript {} diff --git a/projects/aoc/src/year2020/EvasionDSL.kiss b/projects/aoc/src/year2020/EvasionDSL.kiss new file mode 100644 index 00000000..0c883bc5 --- /dev/null +++ b/projects/aoc/src/year2020/EvasionDSL.kiss @@ -0,0 +1,38 @@ +(defprop &mut x 0) +(defprop &mut y 0) +// 0 is east +// 1 is south +// 2 is west +// 3 is north +(defprop &mut facing 0) + +(defun fixFacing [f] + (Math.floor (% (if (> 0 f) (+ 4 f) f) 4))) + +(defmethod N [num] + (set y (+ y num))) +(defmethod S [num] + (set y (- y num))) +(defmethod E [num] + (set x (+ x num))) +(defmethod W [num] + (set x (- x num))) +(defmethod R [angle] + (set facing (fixFacing (+ facing (/ angle 90))))) +(defmethod L [angle] + (set facing (fixFacing (- facing (/ angle 90))))) +(defmethod F [num] + (case facing + (0 (E num)) + (1 (S num)) + (2 (W num)) + (3 (N num)) + (otherwise (throw (+ "Bad facing" facing))))) + +(defreadermacro "" [stream] + (stream.dropWhitespace) + (if (stream.isEmpty) + null + `(,(ReaderExp.Symbol + (stream.expect "a ship command" (lambda [] (stream.takeChars 1)))) + ,(ReaderExp.Symbol (stream.expect "a number argument" (lambda [] (stream.takeUntilAndDrop #|"\n"|#))))))) \ No newline at end of file diff --git a/projects/aoc/src/year2020/Solutions.hx b/projects/aoc/src/year2020/Solutions.hx index b145d342..a7627324 100644 --- a/projects/aoc/src/year2020/Solutions.hx +++ b/projects/aoc/src/year2020/Solutions.hx @@ -15,6 +15,7 @@ import year2020.Customs; import year2020.Bags; import year2020.BootCode; import year2020.Adapters; +import year2020.Evasion; @:build(kiss.Kiss.build("src/year2020/Solutions.kiss")) class Solutions {} diff --git a/projects/aoc/src/year2020/Solutions.kiss b/projects/aoc/src/year2020/Solutions.kiss index 09222562..01ceaa8e 100644 --- a/projects/aoc/src/year2020/Solutions.kiss +++ b/projects/aoc/src/year2020/Solutions.kiss @@ -137,18 +137,38 @@ (let [memoized (memoize Adapters.arrangementCount)] (set Adapters.arrangementCount #|cast memoized|#)) (assert (= "347250213298688" (Int64.toStr (Adapters.arrangementCount adapters 0)))))) + // Day 11 (when (<= 0 (days.indexOf 11)) (print "TODO day 11")) - (when (<= 0 (days.indexOf 12)) (print "TODO day 12")) + + // Day 12 + (when (<= 0 (days.indexOf 12)) + (let [script (new EvasionScript)] + (script.run) + (assert (= 441 (+ (Math.abs script.x) (Math.abs script.y)))))) + + // Day 13 (when (<= 0 (days.indexOf 13)) (print "TODO day 13")) + // Day 14 (when (<= 0 (days.indexOf 14)) (print "TODO day 14")) + // Day 15 (when (<= 0 (days.indexOf 15)) (print "TODO day 15")) + // Day 16 (when (<= 0 (days.indexOf 16)) (print "TODO day 16")) + // Day 17 (when (<= 0 (days.indexOf 17)) (print "TODO day 17")) + // Day 18 (when (<= 0 (days.indexOf 18)) (print "TODO day 18")) + // Day 19 (when (<= 0 (days.indexOf 19)) (print "TODO day 19")) + // Day 20 (when (<= 0 (days.indexOf 20)) (print "TODO day 20")) + // Day 21 (when (<= 0 (days.indexOf 21)) (print "TODO day 21")) + // Day 22 (when (<= 0 (days.indexOf 22)) (print "TODO day 22")) + // Day 23 (when (<= 0 (days.indexOf 23)) (print "TODO day 23")) + // Day 24 (when (<= 0 (days.indexOf 24)) (print "TODO day 24")) + // Day 25 (when (<= 0 (days.indexOf 25)) (print "TODO day 25"))) \ No newline at end of file diff --git a/projects/aoc/src/year2020/inputs/day12.txt b/projects/aoc/src/year2020/inputs/day12.txt new file mode 100644 index 00000000..b7a816e3 --- /dev/null +++ b/projects/aoc/src/year2020/inputs/day12.txt @@ -0,0 +1,768 @@ +S1 +F17 +S3 +F56 +W5 +F11 +N4 +F94 +W4 +S1 +L180 +E2 +F38 +S3 +F46 +L90 +N2 +S3 +W3 +L90 +E1 +L180 +F73 +L90 +E1 +N3 +R90 +S5 +E5 +L90 +W2 +F1 +E5 +R270 +W3 +S4 +W5 +F55 +E2 +L90 +W5 +L90 +E1 +L90 +F9 +W5 +F21 +E4 +F63 +E1 +F48 +N1 +F80 +E5 +L90 +N1 +E1 +S4 +R180 +F48 +F87 +N5 +W2 +F90 +S4 +E5 +F76 +F37 +R180 +E5 +F51 +S3 +R90 +F79 +F25 +L90 +W1 +F100 +S2 +E3 +L90 +N1 +W4 +F41 +S5 +L90 +W5 +L90 +W2 +S4 +W3 +F75 +L90 +F20 +E5 +N5 +R90 +F99 +N4 +N1 +L90 +N5 +N2 +E2 +S4 +F29 +L180 +N1 +W3 +L90 +W3 +L180 +F84 +F25 +E1 +S3 +R90 +F64 +L90 +E1 +F40 +N3 +R90 +N3 +F67 +F37 +L90 +F17 +E4 +F87 +N3 +W5 +S2 +R90 +E4 +N1 +W4 +F75 +E2 +F18 +R90 +F6 +S4 +F13 +E1 +L270 +F50 +W2 +R90 +W4 +S5 +R90 +F14 +L180 +N5 +L180 +F78 +E1 +S3 +R90 +E2 +R270 +E4 +S1 +L90 +L180 +F91 +W3 +W5 +F45 +N4 +F44 +L90 +N3 +L90 +S2 +L90 +F76 +W3 +R90 +F3 +W3 +F24 +L90 +F83 +W2 +F19 +S4 +L90 +N4 +E5 +L180 +N5 +W5 +F67 +S3 +R90 +E4 +F51 +L90 +E5 +L90 +F79 +E2 +N2 +W4 +E2 +L90 +F41 +E4 +N2 +L90 +N2 +L90 +N3 +F51 +F79 +N2 +W2 +N5 +W4 +F60 +N3 +R90 +W4 +S1 +F59 +W1 +F3 +N5 +L180 +N5 +F23 +N4 +E3 +R90 +F14 +W4 +F86 +L90 +N2 +S1 +W3 +R90 +N1 +F25 +L90 +F22 +E5 +F88 +L270 +F14 +N5 +F32 +N1 +F98 +S1 +W2 +E5 +L180 +E4 +S2 +F46 +L180 +W4 +F87 +E2 +F83 +R90 +S5 +F68 +E5 +F95 +N1 +F43 +E2 +F64 +S3 +F5 +S1 +W3 +L90 +E4 +L90 +F63 +S3 +F44 +N4 +R90 +F95 +S5 +W1 +N4 +W4 +F87 +W3 +N3 +L180 +W4 +R180 +N2 +E2 +N2 +L90 +W5 +R90 +W1 +F22 +L180 +N4 +W1 +S1 +R90 +N3 +R180 +S5 +W4 +R90 +E3 +S1 +E3 +N1 +L270 +F96 +E2 +N1 +F98 +W4 +L90 +W1 +W4 +R90 +W2 +S3 +F64 +S3 +F67 +N2 +R180 +S5 +F13 +N4 +F53 +W1 +N1 +L90 +F54 +S1 +E2 +F28 +R90 +W3 +L90 +E3 +N4 +F34 +R90 +F51 +L90 +F24 +R180 +W4 +N2 +F88 +F78 +S2 +E1 +N2 +L180 +F58 +E4 +R90 +N4 +L90 +N5 +R180 +N5 +R270 +W3 +F41 +S4 +F61 +R90 +F71 +S1 +F9 +R90 +F47 +W2 +N4 +L180 +W5 +F52 +L90 +N4 +F11 +W3 +L90 +W5 +N4 +F10 +S1 +F75 +S5 +L90 +S2 +F28 +L90 +F80 +E3 +R180 +E4 +F42 +E4 +F85 +N1 +W4 +R90 +E2 +F38 +R90 +F77 +F95 +L90 +S5 +F86 +R90 +N1 +E2 +R90 +N3 +F28 +R180 +N5 +F25 +E3 +F52 +N4 +E3 +N4 +E3 +F37 +L180 +N1 +E2 +L180 +E5 +F82 +N4 +F100 +N3 +E3 +L90 +W3 +S1 +R270 +E5 +W5 +R90 +F44 +F15 +R180 +S3 +L90 +E4 +F44 +R90 +N1 +E4 +N4 +F62 +R90 +S4 +L180 +S1 +F13 +E3 +F70 +L270 +F52 +L270 +F80 +L90 +F89 +N4 +F79 +W5 +F55 +R90 +F62 +E4 +F91 +R180 +E2 +F74 +R90 +F18 +L90 +E3 +N5 +E2 +R90 +W2 +R180 +N3 +F69 +W3 +R90 +F92 +E2 +F48 +N2 +L90 +S3 +F49 +E3 +L180 +F6 +R90 +S5 +F58 +F67 +E5 +S2 +L90 +W5 +F3 +S1 +F73 +W1 +E4 +R180 +N3 +E2 +F72 +L90 +S1 +F31 +W1 +F44 +L180 +F100 +W3 +N1 +W5 +L90 +S2 +N3 +R90 +W4 +S5 +F62 +E5 +F55 +L180 +W2 +L90 +E1 +F45 +S3 +W2 +F49 +N4 +L90 +E3 +N2 +R180 +E5 +N1 +N5 +E5 +R90 +W3 +F73 +E3 +F66 +L90 +S2 +E3 +F100 +S3 +W2 +S4 +W5 +R180 +E4 +S3 +S1 +W2 +R90 +F22 +R90 +F76 +L270 +S5 +F95 +L90 +N3 +F16 +R270 +S3 +N5 +F66 +R90 +F63 +W5 +F37 +N2 +L90 +W1 +F68 +R90 +F98 +E4 +S3 +R90 +E2 +S1 +F91 +E1 +F42 +E1 +F13 +S4 +F10 +R180 +E4 +R90 +N2 +W4 +L180 +N5 +R90 +N3 +F26 +R90 +F42 +L180 +E5 +S3 +L90 +S3 +E3 +F79 +R270 +E4 +F54 +N5 +W3 +F16 +W1 +S3 +R90 +F100 +S1 +W3 +N2 +E1 +S4 +F1 +R180 +F66 +W2 +R90 +W2 +F27 +E2 +F16 +R90 +S3 +F61 +E1 +F4 +L90 +N5 +F45 +L90 +N1 +L90 +F50 +W1 +R90 +N1 +F44 +S2 +F53 +S5 +F59 +E4 +S3 +E2 +N5 +E2 +L90 +E4 +L90 +N1 +L90 +N5 +F31 +R180 +N2 +F18 +E2 +F27 +L90 +F57 +R90 +F40 +R180 +E2 +F94 +S3 +E2 +S4 +E4 +R90 +L90 +E5 +N5 +E1 +N3 +F97 +S3 +F16 +E3 +W5 +F80 +S1 +W2 +S4 +F18 +N4 +E5 +R90 +N1 +F43 +N4 +E4 +N1 +E2 +W1 +F99 +W4 +F79 +F20 +E3 +F63 +W4 +F21 +E1 +F82 +E3 +R90 +F8 +N5 +W2 +L180 +W5 +F13 +S2 +L90 +N3 +R180 +N4 +F9 +L90 +F39