diff options
author | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-12-07 08:16:16 -0500 |
---|---|---|
committer | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-12-07 08:16:16 -0500 |
commit | 6296e77658d2c5508d32d5a1500b582fb6b5def9 (patch) | |
tree | 94a6a4728c78776c3ae4789f752dc22dff42a23a /2022 | |
parent | dee026d9be9756f9b19e278724543b51a69dd048 (diff) | |
download | gleam_aoc-6296e77658d2c5508d32d5a1500b582fb6b5def9.tar.gz gleam_aoc-6296e77658d2c5508d32d5a1500b582fb6b5def9.zip |
day 7 complete
Diffstat (limited to '2022')
-rw-r--r-- | 2022/day-07/day-07.rkt | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/2022/day-07/day-07.rkt b/2022/day-07/day-07.rkt new file mode 100644 index 0000000..4ebd3b4 --- /dev/null +++ b/2022/day-07/day-07.rkt @@ -0,0 +1,36 @@ +#lang racket + +(require advent-of-code + fancy-app + threading + (only-in relation ->number)) + +(define command-output (~> (fetch-aoc-input (find-session) 2022 7) (string-split "\n"))) + +(define (parse-commands cmds) + (define (update-sizes h path size) + (match path + ['() h] + [(list* _ fs) (update-sizes (hash-update h path (+ _ size) 0) fs size)])) + + (for/fold ([folders (hash)] [current-path '()] [previously-seen? #false] #:result folders) + ([cmd (in-list cmds)]) + (match cmd + ["$ ls" (values folders current-path (hash-has-key? folders current-path))] + ["$ cd /" (values folders '("/") #false)] + ["$ cd .." (values folders (rest current-path) #false)] + [(regexp #px"\\$ cd (.+)" (list _ folder)) (values folders (cons folder current-path) #false)] + [(regexp #px"dir (.+)") (values folders current-path previously-seen?)] + [(regexp #px"(.+) (.+)" (list _ (app ->number size) _)) + (cond + [previously-seen? (values folders current-path previously-seen?)] + [else (values (update-sizes folders current-path size) current-path previously-seen?)])]))) + +(define folders (parse-commands command-output)) + +;; part 1 +(for/sum ([(_ v) (in-hash folders)] #:when (<= v 100000)) v) + +;; part 2 +(define required-to-delete (- 30000000 (- 70000000 (hash-ref folders '("/"))))) +(~>> folders hash-values (filter (> _ required-to-delete)) (apply min)) |