diff options
author | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-12-21 01:13:05 -0500 |
---|---|---|
committer | Hunky Jimpjorps <thechairman@thechairman.info> | 2022-12-21 01:13:05 -0500 |
commit | 6ac92474ce6cb7ef853ddce86dadfb136069e931 (patch) | |
tree | 3281a92804f9170570602320fefc549bd1fe68a4 /2022/day-21 | |
parent | 34f0d5602be6ec9629fe94f6a5d70c08028dcf57 (diff) | |
download | gleam_aoc-6ac92474ce6cb7ef853ddce86dadfb136069e931.tar.gz gleam_aoc-6ac92474ce6cb7ef853ddce86dadfb136069e931.zip |
day 21 tweaks
Diffstat (limited to '2022/day-21')
-rw-r--r-- | 2022/day-21/day-21.rkt | 25 |
1 files changed, 10 insertions, 15 deletions
diff --git a/2022/day-21/day-21.rkt b/2022/day-21/day-21.rkt index 612c7f1..60ee4d8 100644 --- a/2022/day-21/day-21.rkt +++ b/2022/day-21/day-21.rkt @@ -1,7 +1,6 @@ #lang racket (require advent-of-code - threading (only-in relation ->number ->symbol)) (struct monkey (name op) #:transparent) @@ -20,9 +19,7 @@ (for/hash ([m raw-monkeys] #:do [(match-define (monkey name op) (parse-monkey m))]) (values name op))) -;; part 1 -(define (evaluate-monkey m-name) - (match-define (op f name1 name2) (hash-ref monkey-table m-name)) +(define (parse f name1 name2) (match f ['constant name1] ['+ (+ (evaluate-monkey name1) (evaluate-monkey name2))] @@ -30,6 +27,11 @@ ['* (* (evaluate-monkey name1) (evaluate-monkey name2))] ['/ (/ (evaluate-monkey name1) (evaluate-monkey name2))])) +;; part 1 +(define (evaluate-monkey m-name) + (match-define (op f name1 name2) (hash-ref monkey-table m-name)) + (parse f name1 name2)) + (evaluate-monkey "root") ;; part 2 @@ -45,19 +47,12 @@ ['* (* (evaluate-monkey* name1 guess) (evaluate-monkey* name2 guess))] ['/ (/ (evaluate-monkey* name1 guess) (evaluate-monkey* name2 guess))])) -;; part 2 +;; the branch that doesn't depend on humn +(define result-2 (evaluate-monkey branch-2)) + ;; I plugged in numbers for guess to find a suitable starting range and settled on the first one ;; that I found that got me within a million (for/first ([guess (in-naturals 3059361690000)] - #:do [(define result-1 (evaluate-monkey* branch-1 guess)) - (define result-2 (evaluate-monkey* branch-2 guess)) - (println (~a "Guess: " - guess - " result 1: " - (~r (exact->inexact result-1) #:notation 'exponential) - " result 2: " - (~r (exact->inexact result-2) #:notation 'exponential) - " diff: " - (~r (exact->inexact (- result-1 result-2)) #:notation 'exponential)))] + #:do [(define result-1 (evaluate-monkey* branch-1 guess))] #:when (= result-1 result-2)) guess) |