diff options
author | Leah Neukirchen <leah@vuxu.org> | 2020-12-14 20:28:30 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2020-12-14 20:28:30 +0100 |
commit | d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9 (patch) | |
tree | 6ff63e7bd4ce7875d6e1eac9048252e2c5c7b059 | |
parent | fe08bce34f4c4839d56cbb14c4132df68d92b733 (diff) | |
download | adventofcode2020-d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9.tar.gz adventofcode2020-d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9.tar.xz adventofcode2020-d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9.zip |
day13
-rw-r--r-- | day13 | 2 | ||||
-rw-r--r-- | day13.clj | 22 | ||||
-rw-r--r-- | day13.ijs | 9 |
3 files changed, 33 insertions, 0 deletions
diff --git a/day13 b/day13 new file mode 100644 index 0000000..7e74881 --- /dev/null +++ b/day13 @@ -0,0 +1,2 @@ +1000390 +23,x,x,x,x,x,x,x,x,x,x,x,x,41,x,x,x,x,x,x,x,x,x,383,x,x,x,x,x,x,x,x,x,x,x,x,13,17,x,x,x,x,19,x,x,x,x,x,x,x,x,x,29,x,503,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,x,37 diff --git a/day13.clj b/day13.clj new file mode 100644 index 0000000..6f91046 --- /dev/null +++ b/day13.clj @@ -0,0 +1,22 @@ +(let [[a l] (clojure.string/split-lines (slurp "day13"))] + (def time (read-string a)) + (def buses (map read-string (replace {"x" "0"} + (clojure.string/split l #","))))) + +(->> (remove #{0} buses) + (map #(vector % (- % (mod time %)))) + (apply min-key second) + (apply *)) ; => 2298 + +(defn minv "Compute x^-1 mod y naively." + [x y] + (some #(if (= 1 (mod (* x %) y)) %) (range 1 y))) + +;; using chinese remainder theorem +(let [[a b] (apply map vector + (remove (comp zero? second) (map-indexed vector buses))) + N (apply * b) + y (map #(/ N %) b) + z (map minv y b) + x (map * (map - a) y z)] + (mod (apply + x) N)) ; => 783685719679632 diff --git a/day13.ijs b/day13.ijs new file mode 100644 index 0000000..9accec0 --- /dev/null +++ b/day13.ijs @@ -0,0 +1,9 @@ +load 'aoc.ijs' +'t oy' =: lines 'day13' +x =: 0 +y =: 0 -.~ oy =: x: ".&> (<;._1 ',',oy) + +(n{y)*v{~n=.{./:v=.y-y|".t NB. 2298 + +minv =: ]|(^-&2x) NB. x assumed prime +(*/y)|+/(-oy i. y)*((*/%])([*minv)])y NB. 783685719679632 |