Last active
December 4, 2020 14:36
-
-
Save stuartstein777/7b69f6f39fe44669c77e935ba1249aec to your computer and use it in GitHub Desktop.
aoc 2020 - day 4
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; -------------------------- part 1 | |
(defn valid? [passport] | |
(let [required-fields [:hgt :byr :eyr :ecl :iyr :pid :hcl]] | |
(every? #(passport %) required-fields))) | |
;; -------------------------- part 2 | |
(defn valid-year [min max byr] | |
(and byr (= 4 (count byr)) (re-matches #"\d+" byr) (<= min (Integer/parseInt byr) max))) | |
(defn valid-height [height] | |
(and height | |
(re-matches #"(\d+)cm|(\d+)in" height) | |
(let [h (Integer/parseInt (subs height 0 (- (count height) 2))) | |
unit (subs height (- (count height) 2))] | |
(if (= unit "in") | |
(<= 59 h 76) | |
(<= 150 h 193))))) | |
(defn valid? [{:keys [hgt byr eyr ecl iyr pid hcl]}] | |
(and ((partial valid-year 1920 2002) byr) | |
((partial valid-year 2010 2020) iyr) | |
((partial valid-year 2020 2030) eyr) | |
(valid-height hgt) | |
hcl (re-matches #"#([0-9]|[a-f]){6}" hcl) | |
(#{"amb" "blu" "brn" "gry" "grn" "hzl" "oth"} ecl) | |
pid (re-matches #"[0-9]{9}" pid))) | |
;; ---------------------- shared | |
(defn parse [entry] | |
(->> (str/split entry #"\r\n|\s") | |
(map (fn [e] | |
(let [[k v] (str/split e #":")] | |
{(keyword k) v}))) | |
(apply merge))) | |
(as-> (slurp "input.txt") o | |
(str/split o #"\r\n\r\n") | |
(map parse o) | |
(filter valid? o) | |
(count o)) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment