diff --git a/day7/part1.clj b/day7/part1.clj index 43426f8..03c2aa6 100644 --- a/day7/part1.clj +++ b/day7/part1.clj @@ -1,26 +1,22 @@ -(def input - (->> (slurp "./in") ; "16,1,2,0,4,2,7,1,2,14" - (#(clojure.string/split % #",")) - (map read-string) - ) - ) - (defn median [lst] (let [cnt (count lst) hlf (quot cnt 2) srt (sort lst)] - (if (odd? cnt) - (nth srt hlf) - (quot (+ (nth srt hlf) (nth srt (dec hlf))) 2) + (cond->> (nth srt hlf) + (even? cnt) + (+ (nth srt (dec hlf))) + :true + (#(quot % 2)) ) ) ) -(println - (->> input - (map (partial - (median input))) - (map #(if (neg? %) (- %) %)) - (apply +) - ) - ) +(->> (slurp "./in") ; "16,1,2,0,4,2,7,1,2,14" + (#(clojure.string/split % #",")) + (map read-string) + (#(map (partial - (median %)) %)) + (map #(Math/abs %)) + (apply +) + (println) + ) diff --git a/day7/part2.clj b/day7/part2.clj index c051a6a..83d2033 100644 --- a/day7/part2.clj +++ b/day7/part2.clj @@ -1,23 +1,23 @@ -(def input - (->> (slurp "./in") ;"16,1,2,0,4,2,7,1,2,14" - (#(clojure.string/split % #",")) - (map read-string) - ) - ) - -(defn mean [lst] - (quot (apply + lst) (count lst)) - ) - -(defn calc-fuel [lst meen] - (->> input - (map (partial - meen)) - (map #(if (neg? %) (- %) %)) - (map #(apply + (range 1 (inc %)))) +(defn calc-fuel [lst pos] + (->> lst + (map + (comp + #(/ (* % (inc %)) 2) + #(Math/abs %) + (partial - pos) + ) + ) (apply +) ) ) -(println (min (calc-fuel input (mean input)) - (calc-fuel input (inc (mean input))))) +(let [input (->> (slurp "./in") ;"16,1,2,0,4,2,7,1,2,14" + (#(clojure.string/split % #",")) + (map read-string) + ) + mean (quot (apply + input) (count input)) + ] + (println (min (calc-fuel input mean) + (calc-fuel input (inc mean)))) + )