blob: f9eac4a3329546eb3351e31800548555dfd738b5 (
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
|
#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)))
|