mirror of
https://github.com/Ajetski/advent-of-code.git
synced 2025-11-27 13:12:44 -10:00
45 lines
1.0 KiB
Clojure
45 lines
1.0 KiB
Clojure
(ns day07
|
|
(:require
|
|
[core :as c]
|
|
[input-manager :refer [get-input]]
|
|
[clojure.string :as str]))
|
|
|
|
(def input (->> (get-input 7)
|
|
(map #(str/split % #": "))
|
|
(c/mmap c/split-whitespace)
|
|
(c/mmmapv parse-long)
|
|
(map #(update % 0 first))
|
|
(into {})))
|
|
|
|
(defn valid-row? [target acc [v & vs]]
|
|
(if v
|
|
(or (valid-row? target (+ acc v) vs)
|
|
(valid-row? target (* acc v) vs))
|
|
(= target acc)))
|
|
|
|
;; part 1
|
|
(->> input
|
|
(pmap #(when (valid-row? (first %) 0 (second %))
|
|
%))
|
|
(filter identity)
|
|
(map first)
|
|
(reduce +))
|
|
|
|
(defn valid-row-2?
|
|
([target [v & vs]] (valid-row-2? target v vs))
|
|
([target acc [v & vs]]
|
|
(if v
|
|
(or (valid-row-2? target (+ acc v) vs)
|
|
(valid-row-2? target (* acc v) vs)
|
|
(valid-row-2? target (parse-long (str acc v)) vs))
|
|
(= target acc))))
|
|
|
|
;; part 2
|
|
(->> input
|
|
(pmap #(when (apply valid-row-2? %)
|
|
%))
|
|
(filter identity)
|
|
(map first)
|
|
(reduce +))
|
|
|