blob: ca687295581a17a44f71538263b0f717f683d379 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
(ns org.vuxu.aoc2021.day03
(:require [clojure.string :as str]))
(defn parse-digit [char]
(Character/digit char 10))
(defn bits->number [bits]
(Integer/parseInt (apply str bits) 2))
(def data
(->> (slurp "day03")
(str/split-lines)
(mapv (partial mapv parse-digit))))
(def part1
(let [gamma (->> data
(apply mapv +)
(map #(if (>= % (/ (count data) 2)) 1 0)))
epsilon (map (partial - 1) gamma)]
(* (bits->number gamma) (bits->number epsilon))))
;; => 2003336
(def part2
(letfn [(helper [selector]
(loop [cands data
i 0]
(let [freqs (->> cands
(map #(get % i))
frequencies)
choice (if (selector (freqs 0 0) (freqs 1 0)) 1 0)
new-cands (filter #(= (get % i) choice) cands)]
(if (> (count new-cands) 1)
(recur new-cands (inc i))
(bits->number (first new-cands))))))]
(* (helper <=) (helper >))))
;; => 1877139
|