Day s i x
This commit is contained in:
parent
e088178b3a
commit
8b043023bb
|
@ -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)
|
Loading…
Reference in New Issue