(ns aocclj.day03 (:require [clojure.string :as str] [clojure.set :as set])) (defn priority [c] (->> (if (Character/isLowerCase c) (dec (int \a)) (- (int \A) 27)) (- (int c)))) (defn seq-halver [s] (split-at (/ (count s) 2) s)) (defn block-priority [block] ((comp priority first (partial apply set/intersection) (partial map set)) block)) (defn solver [group-transducer input] (transduce (comp group-transducer (map block-priority)) + input)) (defn part1 [input] (solver (map seq-halver) input)) (defn part2 [input] (solver (partition-all 3) input))