From 8b043023bbabc960f5071e6594bb3bfedfbbc1bc Mon Sep 17 00:00:00 2001 From: haskal Date: Fri, 6 Dec 2019 00:23:54 -0500 Subject: [PATCH] Day s i x --- 6.rkt | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 6.rkt diff --git a/6.rkt b/6.rkt new file mode 100644 index 0000000..a173bd7 --- /dev/null +++ b/6.rkt @@ -0,0 +1,47 @@ +#lang racket + +(define (split-lines s) + (string-split (string-trim s) "\n")) + +(define (parse-orbit s) + (string-split s ")")) + +(define COM "COM") + +(define input (map parse-orbit (split-lines (file->string "input.6.txt")))) + +(define (create-uom input) + (make-hash + (for/list ([grp (group-by first input)]) + (cons (first (first grp)) (map second grp))))) + +(define uom (create-uom input)) + +(define (walk-count uom key [depth 0]) + (let ([sats (hash-ref uom key '())]) + (+ depth + (for/sum ([sat sats]) + (walk-count uom sat (add1 depth)))))) + +;; Part 1 +(walk-count uom COM) + +(define (get-path uom search [curr COM] [acc '()]) + (let ([sats (hash-ref uom curr '())] + [new-curr (append acc (list curr))]) + (if (member search sats) + new-curr + (ormap (lambda (sat) (get-path uom search sat new-curr)) + sats)))) + +(define path-YOU (get-path uom "YOU")) +(define path-SAN (get-path uom "SAN")) + +(define (get-transfers you san) + (cond + [(equal? (first you) (first san)) + (get-transfers (rest you) (rest san))] + [else (+ (length you) (length san))])) + +;; Part 2 +(get-transfers path-YOU path-SAN) \ No newline at end of file