aboutsummaryrefslogtreecommitdiff
path: root/2022/day-21
diff options
context:
space:
mode:
authorHunky Jimpjorps <thechairman@thechairman.info>2022-12-21 01:13:05 -0500
committerHunky Jimpjorps <thechairman@thechairman.info>2022-12-21 01:13:05 -0500
commit6ac92474ce6cb7ef853ddce86dadfb136069e931 (patch)
tree3281a92804f9170570602320fefc549bd1fe68a4 /2022/day-21
parent34f0d5602be6ec9629fe94f6a5d70c08028dcf57 (diff)
downloadgleam_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.rkt25
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)