diff options
author | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
---|---|---|
committer | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
commit | 8777ff071f7bb37631baa7b6717ad29961e50911 (patch) | |
tree | 6d59c4ed58e454b960339c3d1151f0a879e8d7cb /aoc2022/day-21 | |
parent | 6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff) | |
download | gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip |
sorting by language
Diffstat (limited to 'aoc2022/day-21')
-rw-r--r-- | aoc2022/day-21/day-21.rkt | 43 |
1 files changed, 0 insertions, 43 deletions
diff --git a/aoc2022/day-21/day-21.rkt b/aoc2022/day-21/day-21.rkt deleted file mode 100644 index fccd6ad..0000000 --- a/aoc2022/day-21/day-21.rkt +++ /dev/null @@ -1,43 +0,0 @@ -#lang racket - -(require advent-of-code - (only-in relation ->number ->symbol)) - -(struct monkey (name op) #:transparent) -(struct op (f first second) #:transparent) - -(define (parse-monkey str) - (match (string-split str " ") - [(list (app (curryr string-trim ":") name) name1 (app ->symbol f) name2) - (monkey name (op f name1 name2))] - [(list (app (curryr string-trim ":") name) (app ->number int)) - (monkey name (op 'constant int #f))])) - -(define raw-monkeys (port->lines (open-aoc-input (find-session) 2022 21 #:cache #true))) - -(define monkey-table - (for/hash ([m raw-monkeys] #:do [(match-define (monkey name op) (parse-monkey m))]) - (values name op))) - -;; part 1 -(define (evaluate-monkey m-name [guess #f]) - (match-define (op f name1 name2) - (if (and guess (equal? m-name "humn")) (op 'constant guess #f) (hash-ref monkey-table m-name))) - (match f - ['constant name1] - ['+ (+ (evaluate-monkey name1 guess) (evaluate-monkey name2 guess))] - ['- (- (evaluate-monkey name1 guess) (evaluate-monkey name2 guess))] - ['* (* (evaluate-monkey name1 guess) (evaluate-monkey name2 guess))] - ['/ (/ (evaluate-monkey name1 guess) (evaluate-monkey name2 guess))])) - -(evaluate-monkey "root") - -;; part 2 -;; since humn only ever appears once, and it's never the divisor in a division operation, -;; the difference of the branches is linearly proportional to humn -;; therefore, if we find two points we can calculate the root directly -(match-define (op _ branch-1 branch-2) (hash-ref monkey-table "root")) -(define known-side (evaluate-monkey branch-2)) -(define humn-zero (- known-side (evaluate-monkey branch-1 0))) -(define humn-one (- known-side (evaluate-monkey branch-1 1))) -(- (/ humn-zero (- humn-one humn-zero))) |