From 8777ff071f7bb37631baa7b6717ad29961e50911 Mon Sep 17 00:00:00 2001 From: "H.J" Date: Wed, 9 Oct 2024 11:36:55 -0400 Subject: sorting by language --- racket/aoc2018/day-04/day-04.rkt | 43 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 racket/aoc2018/day-04/day-04.rkt (limited to 'racket/aoc2018/day-04/day-04.rkt') diff --git a/racket/aoc2018/day-04/day-04.rkt b/racket/aoc2018/day-04/day-04.rkt new file mode 100644 index 0000000..3660099 --- /dev/null +++ b/racket/aoc2018/day-04/day-04.rkt @@ -0,0 +1,43 @@ +#lang racket + +(require advent-of-code + data/applicative + data/monad + megaparsack + megaparsack/text + threading) + +(struct entry (month day hour minute message) #:transparent) + +(define (parse-message chrs) + (define str (apply string chrs)) + (match str + ["wakes up" 'awake] + ["falls asleep" 'asleep] + [shift (~> shift (string-trim "Guard #") (string-trim " begins shift") string->number)])) + +(define entry/p + (do (string/p "[1518-") + [month <- integer/p] + (char/p #\-) + [day <- integer/p] + space/p + [hour <- integer/p] + (char/p #\:) + [minute <- integer/p] + (string/p "] ") + [message <- (many/p any-char/p)] + (pure (entry month day hour minute (parse-message message))))) + +(define (parse-entry str) + (parse-result! (parse-string entry/p str))) + +(define entries + (~> (port->lines (open-aoc-input (find-session) 2018 4 #:cache #true)) (map parse-entry _))) + +(define sorted-entries + (~> entries + (sort < #:key entry-minute) + (sort < #:key entry-hour) + (sort < #:key entry-day) + (sort < #:key entry-month))) -- cgit v1.2.3