about summary refs log tree commit diff
diff options
context:
space:
mode:
authorLeah Neukirchen <leah@vuxu.org>2020-12-14 20:28:30 +0100
committerLeah Neukirchen <leah@vuxu.org>2020-12-14 20:28:30 +0100
commitd58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9 (patch)
tree6ff63e7bd4ce7875d6e1eac9048252e2c5c7b059
parentfe08bce34f4c4839d56cbb14c4132df68d92b733 (diff)
downloadadventofcode2020-d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9.tar.gz
adventofcode2020-d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9.tar.xz
adventofcode2020-d58d88e5c3563e50897a3c7b1cbd16b6e3ed38c9.zip
day13
-rw-r--r--day132
-rw-r--r--day13.clj22
-rw-r--r--day13.ijs9
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