Advertisement
luorduz

advent-22-13

Dec 15th, 2022
503
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Clojure 1.23 KB | Source Code | 0 0
  1. (defn match [[a b :as pair]]
  2.   (cond
  3.     (every? integer? pair) (when (not= a b) (< a b))
  4.     (integer? a) (recur [[a] b])
  5.     (integer? b) (recur [a [b]])
  6.     :else
  7.       (loop [x 0 y 0]
  8.         (let [f (get a x) s (get b y)]
  9.           (cond
  10.             (not-any? nil? [f s]) (if-some [res (match [f s])] res (recur (inc x) (inc y)))
  11.             (and (nil? f) (some? s)) true
  12.             (and (nil? s) (some? f)) false
  13.             :else nil)))))
  14.  
  15. (defn sorter [a b]
  16.   (case (match [a b])
  17.     true -1
  18.     false 1
  19.     nil 0
  20. ))
  21.              
  22. (with-open [rdr (clojure.java.io/reader "comp.in")]
  23.   (let [pairs (->> rdr
  24.                   line-seq
  25.                   (partition-by clojure.string/blank?)
  26.                   (remove (partial every? clojure.string/blank?))
  27.                   (map (partial map read-string))
  28.               )]
  29.     (->> pairs
  30.       (map-indexed #(vector (inc %1) (match %2)))
  31.       (filter second)
  32.       (map first)
  33.       (apply +)
  34.       println)
  35.     (->> pairs
  36.       (reduce (fn [all [a b]] (conj all a b)) [])
  37.       (concat [[[2]] [[6]]])
  38.       (sort sorter)
  39.       (map-indexed #(vector (inc %1) %2))
  40.       (filter #(#{[[2]] [[6]]} (second %)))
  41.       (map first)
  42.       (apply *)
  43.       println)
  44. ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement