diff options
author | Leah Neukirchen <leah@vuxu.org> | 2022-12-08 17:36:38 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2022-12-08 17:36:38 +0100 |
commit | 4a49127af3b9fb548dbfa5c55fdc8e15b180eb80 (patch) | |
tree | b46e60731a5056cd2b5caf76cea7e232cf5c0df2 /day07.rkt | |
parent | f4bb1b6ca10ad9c7c2479152ce99aa603d0eea02 (diff) | |
download | adventofcode2022-4a49127af3b9fb548dbfa5c55fdc8e15b180eb80.tar.gz adventofcode2022-4a49127af3b9fb548dbfa5c55fdc8e15b180eb80.tar.xz adventofcode2022-4a49127af3b9fb548dbfa5c55fdc8e15b180eb80.zip |
day07
Diffstat (limited to 'day07.rkt')
-rw-r--r-- | day07.rkt | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/day07.rkt b/day07.rkt new file mode 100644 index 0000000..7bcb3ca --- /dev/null +++ b/day07.rkt @@ -0,0 +1,52 @@ +#lang racket + +(define data (file->lines "day07")) + +(define fs (make-hash)) +(let loop ([data (cdr data)] + [cwd '()]) + (let ([cmd (car data)] + [rest (cdr data)]) + (cond [(string-prefix? cmd "$ cd") + (let ([dir (third (string-split cmd " "))]) + (if (equal? dir "..") + (loop rest (cdr cwd)) + (loop rest (cons dir cwd))))] + [(equal? cmd "$ ls") + (let dir-loop ([dir-list rest]) + (if (null? dir-list) + (void) ; done + (let ([line (car dir-list)] + [dir-rest (cdr dir-list)]) + (cond [(string-prefix? line "$") + (loop (cons line dir-rest) cwd)] ; push back line + [(string-prefix? line "dir") + (dir-loop dir-rest)] ; ignore + [else + (let* ([fields (string-split line " ")] + [size (string->number (first fields))]) + (let segment-loop ([dir cwd]) + (hash-update! fs + (string-join (reverse dir) "/" #:before-first "/") + (curry + size) + 0) + (unless (null? dir) + (segment-loop (cdr dir)))) + (dir-loop dir-rest))]))))] + [else (error "invalid line")]))) + +(for/sum ([(dir size) fs]) + (if (<= size 100000) + size + 0)) +; 1306611 + +(let* ([total (hash-ref fs "/")] + [unused (- 70000000 total)] + [needed (- 30000000 unused)]) + (for/fold ([smallest total]) + ([(dir size) fs]) + (if (>= size needed) + (min smallest size) + smallest))) +; 13210366 |