diff options
Diffstat (limited to '2022')
-rw-r--r-- | 2022/day-07/day-07.rkt | 14 | ||||
-rw-r--r-- | 2022/day-12/day-12.rkt | 13 |
2 files changed, 14 insertions, 13 deletions
diff --git a/2022/day-07/day-07.rkt b/2022/day-07/day-07.rkt index 4ebd3b4..3826cc4 100644 --- a/2022/day-07/day-07.rkt +++ b/2022/day-07/day-07.rkt @@ -15,13 +15,13 @@ (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) _)) + (match (string-split cmd) + [(list "$" "ls") (values folders current-path (hash-has-key? folders current-path))] + [(list "$" "cd" "/") (values folders '("/") #false)] + [(list "$" "cd" "..") (values folders (rest current-path) #false)] + [(list "$" "cd" folder) (values folders (cons folder current-path) #false)] + [(list "dir" _) (values folders current-path previously-seen?)] + [(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?)])]))) diff --git a/2022/day-12/day-12.rkt b/2022/day-12/day-12.rkt index 9120468..5e0c365 100644 --- a/2022/day-12/day-12.rkt +++ b/2022/day-12/day-12.rkt @@ -35,11 +35,12 @@ (list p neighbor)))) ;; part 1 -(match-define-values (distances _) (dijkstra paths (hash-ref special-points 'start))) -(hash-ref distances (hash-ref special-points 'end)) +(time (match-define-values (distances _) (bfs paths (hash-ref special-points 'start))) + (hash-ref distances (hash-ref special-points 'end))) ;; part 2 -(for/lists (lengths #:result (apply min lengths)) - ([start (in-list (hash-keys terrain-mesh))] #:when (= 0 (hash-ref terrain-mesh start))) - (match-define-values (distances _) (dijkstra paths start)) - (hash-ref distances (hash-ref special-points 'end))) +(time (for/lists + (lengths #:result (apply min lengths)) + ([start (in-list (hash-keys terrain-mesh))] #:when (= 0 (hash-ref terrain-mesh start))) + (match-define-values (distances _) (bfs paths start)) + (hash-ref distances (hash-ref special-points 'end)))) |