]> code.bitgloo.com Git - clyne/advent-of-code.git/commitdiff
day21: add part 1
authorClyne Sullivan <clyne@bitgloo.com>
Tue, 21 Dec 2021 18:00:36 +0000 (13:00 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Tue, 21 Dec 2021 18:00:36 +0000 (13:00 -0500)
day21/part1.clj [new file with mode: 0644]

diff --git a/day21/part1.clj b/day21/part1.clj
new file mode 100644 (file)
index 0000000..174f5a1
--- /dev/null
@@ -0,0 +1,22 @@
+(require 'clojure.string)
+
+(loop [player-positions   (->> (slurp "./in")
+                               clojure.string/split-lines
+                               (map (comp read-string second #(clojure.string/split % #": ")))
+                               (mapv #(drop (dec %) (cycle (range 1 11)))))
+       player-scores      (into [] (repeat (count player-positions) 0))
+       player-turn        (cycle (range 0 (count player-scores)))
+       deterministic-dice (cycle (range 1 101))
+       dice-roll-count    0]
+  (if-not (every? #(< % 1000) player-scores)
+    (println (* dice-roll-count (apply min player-scores)))
+    (let [roll         (reduce + (take 3 deterministic-dice))
+          turn         (first player-turn)
+          new-position (drop roll (get player-positions turn))]
+      (recur
+        (assoc player-positions turn new-position)
+        (update player-scores turn + (first new-position))
+        (next player-turn)
+        (drop 3 deterministic-dice)
+        (+ dice-roll-count 3)))))
+