Solve AOC day 12 pt 1

This commit is contained in:
2020-12-12 15:12:16 -07:00
parent fed69f1142
commit 9600766b22
5 changed files with 835 additions and 1 deletions

View File

@@ -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 {}

View File

@@ -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"|#)))))))

View File

@@ -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 {}

View File

@@ -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")))

View File

@@ -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