fix memoiation

This commit is contained in:
Adam Jeniski 2023-12-15 15:29:56 -05:00
parent adfc073ed1
commit a87daecd7d

View File

@ -34,45 +34,38 @@
(filter (fn [[[row]]] (= r row)))
(map second)))
(defn get-refl-value [m num-rows num-cols & [discriminator]]
(defn get-refl-value [m num-rows num-cols]
(let [rows (range 0 num-rows)
cols (range 0 num-cols)]
(when discriminator
(println discriminator))
(or (->> cols
(map #(for [c (range (min (inc %) (- (dec num-cols) %)))]
[(- % c) (inc (+ % c))]))
(filter not-empty)
(filter #(or (not= (second discriminator) :row)
(not= (first discriminator) %)))
(map (partial map (fn [[a b]]
; (println a b :col discriminator)
(= (get-col m a)
(get-col m b)))))
(map-indexed vector)
(filter (comp (partial every? identity)
second))
(filter second)
first
(#(when %
[(inc (first %)) :col])))
(->> rows
(apply
concat
(filter
not-empty
(list (->>
rows
(map #(for [r (range (min (inc %) (- (dec num-rows) %)))]
[(- % r) (inc (+ % r))]))
(filter not-empty)
(filter #(or (not= (second discriminator) :row)
(not= (first discriminator) %)))
(map (partial map (fn [[a b]]
; (println a b :row discriminator)
(= (get-row m a)
(get-row m b)))))
(map-indexed vector)
(filter (comp (partial every? identity)
second))
(filter second)
first
(#(when %
[(inc (first %)) :row]))))))
(map #(vector (inc (first %)) :row)))
(->> cols
(map #(for [c (range (min (inc %) (- (dec num-cols) %)))]
[(- % c) (inc (+ % c))]))
(filter not-empty)
(map (partial map (fn [[a b]]
(= (get-col m a)
(get-col m b)))))
(map-indexed vector)
(filter (comp (partial every? identity)
second))
(filter second)
(map #(vector (inc (first %)) :col))))))))
(defn gen-map [input]
(->> input
@ -87,31 +80,41 @@
(map #(get-refl-value (gen-map %)
(count %)
(count (first %))))
(map first)
(map #(update % 1 (fn [x] (condp = x
:col 1
:row 100))))
(map (partial apply *))
(reduce +)
)
(defn print-board [m num-rows num-cols]
(println)
(doseq [row (range num-rows)]
(doseq [col (range num-cols)]
(print (m [row col])))
(println)))
;; part 2
(->> input
(mapv
#(let [num-rows (count %)
num-cols (count (first %))
m (gen-map %)
smudge (first (get-refl-value m num-rows num-cols))]
(->> (for [r (range num-rows)
c (range num-cols)]
(->> (get-refl-value
(update m [r c] (fn [c] (if (= c \#) \. \#)))
num-rows
num-cols)
(filter (partial not= smudge))))
(filter not-empty)
(apply concat))))
(map first)
(map #(update % 1 (fn [x] (condp = x
:col 1
:row 100))))
(map (partial apply *))
(reduce +))
;; part 2
(->> sample-input
(mapv #(let [num-rows (count %)
num-cols (count (first %))
m (gen-map %)
smudge (get-refl-value m num-rows num-cols)]
(->>
(for [r (range num-rows)
c (range num-cols)]
(let [m-prime (update m [r c] (fn [c] (if (= c \#) \. \#)))
res (get-refl-value m-prime num-rows num-cols smudge)]
res))
(filter identity)
first)))
; (map get-refl-value)
; (map #(update % 1 (fn [x] (condp = x
; :col 1
; :row 100))))
; (map (partial apply *))
; (reduce +)
)