aboutsummaryrefslogtreecommitdiff
path: root/racket/aoc2018/day-04
diff options
context:
space:
mode:
authorH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
committerH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
commit8777ff071f7bb37631baa7b6717ad29961e50911 (patch)
tree6d59c4ed58e454b960339c3d1151f0a879e8d7cb /racket/aoc2018/day-04
parent6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff)
downloadgleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz
gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip
sorting by language
Diffstat (limited to 'racket/aoc2018/day-04')
-rw-r--r--racket/aoc2018/day-04/day-04.rkt43
1 files changed, 43 insertions, 0 deletions
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)))