aboutsummaryrefslogtreecommitdiff
path: root/2020/day-04/day-04.rkt
blob: 3c7db8943b1e81ef349f41ed921e71107b985efd (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
39
40
41
42
43
44
45
46
47
48
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)))