]> code.bitgloo.com Git - clyne/advent-of-code.git/commitdiff
day4: made more concise
authorClyne Sullivan <clyne@bitgloo.com>
Sun, 5 Dec 2021 02:32:44 +0000 (21:32 -0500)
committerClyne Sullivan <clyne@bitgloo.com>
Sun, 5 Dec 2021 02:32:44 +0000 (21:32 -0500)
day4/part1.clj
day4/part2.clj

index eddebe6407e05da8e6eb51a7d70f8f3a51a7a7cd..b9fccebf7fa1564d95e8ee5125a01ef55c7e569a 100644 (file)
@@ -1,54 +1,43 @@
 (require '[clojure.string :as str])
 
 (def calls
-  (map
-    #(Integer/parseInt %)
-    (-> (read-line)
-        (str/split #",")
-        )
-    )
+  (->> (read-line)
+       (#(str/split % #","))
+       (map #(Integer/parseInt %))
+       )
   )
 
-;(println calls)
-
 (defn read-board []
-  (when (not (nil? (read-line)))
-    (vec
-    (for [x (range 0 5)]
-      (-> (read-line)
-          (concat " ")
-          (str/join)
-          (str/trim)
-          (str/split #"\s+")
-          (#(map (fn [l] (Integer/parseInt l)) %))
+  (when (some? (read-line))
+    (mapv
+        (fn [line] (->> line
+            (str/join)
+            (str/trim)
+            (#(str/split % #"\s+"))
+            (map #(Integer/parseInt %))
+            )
           )
-      ))
+        (repeatedly 5 read-line)
+        )
     )
   )
 
-(defn bingo-row? [row]
-  (every? nil? row)
-  )
-
 (defn bingo? [board]
-  (not
-    (nil?
-      (some
-        bingo-row?
-        (concat
-          board
-          (apply mapv vector board)
-          )
-        )
+  (some?
+    (some
+      #(every? nil? %)
+      (concat board (apply mapv vector board))
       )
     )
   )
 
-(defn get-bingo [_board]
-  (loop
-    [board _board nums calls turns 1]
-    (let [new-board (vec (for [r (range 0 5)]
-                      (replace {(first nums) nil} (get board r))))]
+(defn bingo-mark [board n]
+  (mapv (partial replace {n nil}) board)
+  )
+
+(defn get-bingo [init-board]
+  (loop [board init-board nums calls turns 1]
+    (let [new-board (bingo-mark board (first nums))]
       (if (bingo? new-board)
         [new-board (first nums) turns]
         (recur new-board (rest nums) (inc turns))
     )
   )
 
-(def best (atom [999 0]))
-
-(loop [board (read-board)]
-  (when (not (nil? board))
+(loop [best [999 0] board (read-board)]
+  (if (nil? board)
+    (println best)
     (let [bingo (get-bingo board)]
-      (when (< (get bingo 2) (first @best))
-        (reset! best
-                [(get bingo 2)
-                 (*
-                  (second bingo)
-                  (->> (first bingo)
-                       (flatten)
-                       (filter some?)
-                       (apply +)
-                       )
-                  )]
+      (recur
+        (if (< (get bingo 2) (first best))
+          [(get bingo 2)
+           (->> (first bingo)
+                (flatten)
+                (filter some?)
+                (apply +)
+                (* (second bingo))
                 )
+           ]
+          best
+          )
+        (read-board)
         )
       )
-    (recur (read-board))
     )
   )
 
-(println @best)
-
index e90137d7a5c3d721c8ad09924b1d6a0323952837..516e83c93ba60a2d9f79a9f5f970ff9c8d810f3a 100644 (file)
@@ -1,52 +1,43 @@
 (require '[clojure.string :as str])
 
 (def calls
-  (map
-    #(Integer/parseInt %)
-    (-> (read-line)
-        (str/split #",")
-        )
-    )
+  (->> (read-line)
+       (#(str/split % #","))
+       (map #(Integer/parseInt %))
+       )
   )
 
 (defn read-board []
-  (when (not (nil? (read-line)))
-    (vec
-    (for [x (range 0 5)]
-      (-> (read-line)
-          (concat " ")
-          (str/join)
-          (str/trim)
-          (str/split #"\s+")
-          (#(map (fn [l] (Integer/parseInt l)) %))
+  (when (some? (read-line))
+    (mapv
+        (fn [line] (->> line
+            (str/join)
+            (str/trim)
+            (#(str/split % #"\s+"))
+            (map #(Integer/parseInt %))
+            )
           )
-      ))
+        (repeatedly 5 read-line)
+        )
     )
   )
 
-(defn bingo-row? [row]
-  (every? nil? row)
-  )
-
 (defn bingo? [board]
-  (not
-    (nil?
-      (some
-        bingo-row?
-        (concat
-          board
-          (apply mapv vector board)
-          )
-        )
+  (some?
+    (some
+      #(every? nil? %)
+      (concat board (apply mapv vector board))
       )
     )
   )
 
-(defn get-bingo [_board]
-  (loop
-    [board _board nums calls turns 1]
-    (let [new-board (vec (for [r (range 0 5)]
-                      (replace {(first nums) nil} (get board r))))]
+(defn bingo-mark [board n]
+  (mapv (partial replace {n nil}) board)
+  )
+
+(defn get-bingo [init-board]
+  (loop [board init-board nums calls turns 1]
+    (let [new-board (bingo-mark board (first nums))]
       (if (bingo? new-board)
         [new-board (first nums) turns]
         (recur new-board (rest nums) (inc turns))
     )
   )
 
-(def best (atom [0 0]))
-
-(loop [board (read-board)]
-  (when (not (nil? board))
+(loop [best [0 0] board (read-board)]
+  (if (nil? board)
+    (println best)
     (let [bingo (get-bingo board)]
-      (when (> (get bingo 2) (first @best))
-        (reset! best
-                [(get bingo 2)
-                 (*
-                  (second bingo)
-                  (->> (first bingo)
-                       (flatten)
-                       (filter some?)
-                       (apply +)
-                       )
-                  )]
+      (recur
+        (if (> (get bingo 2) (first best))
+          [(get bingo 2)
+           (->> (first bingo)
+                (flatten)
+                (filter some?)
+                (apply +)
+                (* (second bingo))
                 )
+           ]
+          best
+          )
+        (read-board)
         )
       )
-    (recur (read-board))
     )
   )
 
-(println @best)
-