aboutsummaryrefslogtreecommitdiffstats
path: root/src/aoc_2022/day04.clj
blob: a6ca91bb861ff0fd6c702ff77aa51b0650a3cfb2 (plain)
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
37
38
(ns aoc-2022.day04)
(require '[clojure.java.io :as io])
(require '[aoc-2022.utils :as utils])
(require '[clojure.string :as str])

(defn parse-rows [rows]
  (->> rows
       (map #(str/split % #","))
       (map (fn [[a, b]]
              [(map #(Long/valueOf %) (str/split a #"-")),
               (map #(Long/valueOf %) (str/split b #"-"))]))
       (map flatten)))

(defn assignment-contains [[a1 a2 b1 b2]]
  (or
     (and (>= a1 b1) (<= a2 b2))
     (and (>= b1 a1) (<= b2 a2))))

(defn task1 [rows]
  (->> rows
       parse-rows
       (filter assignment-contains)
       count))

(defn assignment-overlaps [[a1 a2 b1 b2]]
  (not (or (> a1 b2) (> b1 a2))))

(defn task2 [rows]
  (->> rows
       parse-rows
       (filter assignment-overlaps)
       count))

(with-open [rdr (io/reader "resources/day04_actual.txt")]
  (let [rows (line-seq rdr)]
    (do
      (println "task1:" (task1 rows))
      (println "task2:" (task2 rows)))))