diff options
author | HJ <thechairman@thechairman.info> | 2021-12-11 00:03:22 -0500 |
---|---|---|
committer | HJ <thechairman@thechairman.info> | 2021-12-11 00:03:22 -0500 |
commit | 5625c662c99bbca796da5ba6e5c48127322fb680 (patch) | |
tree | 16cda8f621a9341552418c950063ea0b1e8b0528 /2020/day-04 | |
parent | 1dc1ec88673472326692edf25758e8c64ef7367b (diff) | |
download | gleam_aoc-5625c662c99bbca796da5ba6e5c48127322fb680.tar.gz gleam_aoc-5625c662c99bbca796da5ba6e5c48127322fb680.zip |
2020 day 4 part 1
Diffstat (limited to '2020/day-04')
-rw-r--r-- | 2020/day-04/day-04.rkt | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/2020/day-04/day-04.rkt b/2020/day-04/day-04.rkt new file mode 100644 index 0000000..3c7db89 --- /dev/null +++ b/2020/day-04/day-04.rkt @@ -0,0 +1,49 @@ +#lang racket +(require "../../jj-aoc.rkt" + threading) + +(define passports + (~> (open-day 4 2020) + (port->string) + (string-split "\n\n") + (map (λ~> (string-replace "\n" " ")) _))) + +;; part 1 +(define required-fields + (list "byr:" + "iyr:" + "eyr:" + "hgt:" + "hcl:" + "ecl:" + "pid:")) + +(define (valid-passport? p) + (andmap (λ (s) (string-contains? p s)) required-fields)) + +(count valid-passport? passports) + +;; part 2 +(define passport-fields + (for/list ([p (in-list passports)] + #:when (valid-passport? p)) + (~> p + string-split + (map (curryr string-split ":") _) + flatten + (apply hash _)))) + +(define (valid-byr p) + (define year (string->number (hash-ref p "byr"))) + (and (<= year 1920) + (>= year 2002))) + +(define (valid-iyr p) + (define year (string->number (hash-ref p "iyr"))) + (and (<= year 2010) + (>= year 2020))) + +(define (valid-eyr p) + (define year (string->number (hash-ref p "iyr"))) + (and (<= year 2020) + (>= year 2030)))
\ No newline at end of file |