aboutsummaryrefslogtreecommitdiff
path: root/2020
diff options
context:
space:
mode:
authorHJ <thechairman@thechairman.info>2021-12-11 00:03:24 -0500
committerHJ <thechairman@thechairman.info>2021-12-11 00:03:24 -0500
commit1855292990b1d423aae36bcf501bc20ddcf6ae82 (patch)
tree63602cb2640f11292dcd90b98c2e0ec31111e019 /2020
parent5625c662c99bbca796da5ba6e5c48127322fb680 (diff)
parent87949095177bc0beecd7d69f2368cdac727792d9 (diff)
downloadgleam_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.rkt44
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)))
+
+