diff options
author | HJ <thechairman@thechairman.info> | 2021-12-11 00:03:24 -0500 |
---|---|---|
committer | HJ <thechairman@thechairman.info> | 2021-12-11 00:03:24 -0500 |
commit | 1855292990b1d423aae36bcf501bc20ddcf6ae82 (patch) | |
tree | 63602cb2640f11292dcd90b98c2e0ec31111e019 /2020 | |
parent | 5625c662c99bbca796da5ba6e5c48127322fb680 (diff) | |
parent | 87949095177bc0beecd7d69f2368cdac727792d9 (diff) | |
download | gleam_aoc-1855292990b1d423aae36bcf501bc20ddcf6ae82.tar.gz gleam_aoc-1855292990b1d423aae36bcf501bc20ddcf6ae82.zip |
Merge branch 'main' of https://github.com/hunkyjimpjorps/AdventOfCode
Diffstat (limited to '2020')
-rw-r--r-- | 2020/day-05/day-05.rkt | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/2020/day-05/day-05.rkt b/2020/day-05/day-05.rkt new file mode 100644 index 0000000..93c54a2 --- /dev/null +++ b/2020/day-05/day-05.rkt @@ -0,0 +1,44 @@ +#lang racket +(require "../../jj-aoc.rkt" + threading + algorithms) + +(define tickets + (for/list + ([l (in-lines (open-day 5 2020))]) + (~>> l + (regexp-match #px"(.{7})(.{3})" ) + rest))) + +(define (find-place str min-p max-p l r) + (if (string=? "" str) + min-p + (let ([p-range (/ (add1 (- max-p min-p)) 2)] + [c (substring str 0 1)]) + (cond + [(string=? c l) + (find-place (substring str 1) min-p (- max-p p-range) l r)] + [(string=? c r) + (find-place (substring str 1) (+ min-p p-range) max-p l r)])))) + +(define (find-row str) (find-place str 0 127 "F" "B")) +(define (find-col str) (find-place str 0 7 "L" "R")) + +(define (ticket-id t) + (let ([row (find-row (first t))] + [col (find-col (second t))]) + (+ col (* 8 row)))) + +;; part 1 +(define occupied-seats + (~>> (for/list ([t (in-list tickets)]) (ticket-id t)))) + +(apply max occupied-seats) + +;; part 2 +(set-first + (set-subtract (list->set (inclusive-range (apply min occupied-seats) + (apply max occupied-seats))) + (list->set occupied-seats))) + + |