From 985aa61374bfc4fe180c8ff94b6ed77b78f17ae6 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Fri, 24 Dec 2021 11:25:43 -0800 Subject: [PATCH] Day 24: Done manually lol. --- input/24-manual.txt | 49 +++++++++++++++++++++++++++++++++------------ src/24.rkt | 45 +++++++++++++++++++++++------------------ 2 files changed, 61 insertions(+), 33 deletions(-) diff --git a/input/24-manual.txt b/input/24-manual.txt index 28a5a9a..3c34fd5 100644 --- a/input/24-manual.txt +++ b/input/24-manual.txt @@ -365,16 +365,39 @@ z = (w14 + 5) * x + (25 * x + 1) * (z / 26) z = w1 + 12 -z = (z % 26 + 10) == w2 ? z : (w2 + 9) + 26 * z -z = (z % 26 + 13) == w3 ? z : (w3 + 8) + 26 * z -z = (z % 26 - 8) == w4 ? z : (w4 + 3) + 26 * (z / 26) -z = (z % 26 + 11) == w5 ? z : (w5 + 0) + 26 * z -z = (z % 26 + 11) == w6 ? z : (w6 + 11) + 26 * z -z = (z % 26 + 14) == w7 ? z : (w7 + 10) + 26 * z -z = (z % 26 - 11) == w8 ? z : (w8 + 13) + 26 * (z / 26) -z = (z % 26 + 14) == w9 ? z : (w9 + 3) + 26 * z -z = (z % 26 - 1) == w10 ? z : (w10 + 10) + 26 * (z / 26) -z = (z % 26 - 8) == w11 ? z : (w11 + 10) + 26 * (z / 26) -z = (z % 26 - 5) == w12 ? z : (w12 + 14) + 26 * (z / 26) -z = (z % 26 - 16) == w13 ? z : (w13 + 6) + 26 * (z / 26) -z = (z % 26 - 6) == w14 ? z : (w14 + 5) + 26 * (z / 26) \ No newline at end of file +z = (w2 + 9) + 26 * z +z = (w3 + 8) + 26 * z +(z % 26 - 8) == w4 +z = z / 26 +z = (w5 + 0) + 26 * z +z = (w6 + 11) + 26 * z +z = (w7 + 10) + 26 * z +(z % 26 - 11) == w8 +z = z / 26 +z = (w9 + 3) + 26 * z +(z % 26 - 1) == w10 +z = z / 26 +(z % 26 - 8) == w11 +z = z / 26 +(z % 26 - 5) == w12 +z = z / 26 +(z % 26 - 16) == w13 +z = z / 26 +(z % 26 - 6) == w14 +z = z / 26 + +w3 + 8 - 8 == w4 +w7 + 10 - 11 == w8 +w9 + 3 - 1 == w10 +w6 + 11 - 8 == w11 +w5 + 0 - 5 == w12 +w2 + 9 - 16 == w13 +w1 + 12 - 6 == w14 + +w3 == w4 +w7 - 1 == w8 +w10 - 2 == w9 +w11 - 3 == w6 +w5 - 5 == w12 +w2 - 7 == w13 +w14 - 6 = w1 \ No newline at end of file diff --git a/src/24.rkt b/src/24.rkt index d1204be..56a48d0 100644 --- a/src/24.rkt +++ b/src/24.rkt @@ -2,6 +2,7 @@ (require "../lib.rkt") +#; (define input (for/list ([line (problem-input 24)]) (match (string-words line) @@ -12,6 +13,7 @@ (or (string->number val) (string->symbol val)))]))) +#; (define (monad model) (define (get state val) (if (number? val) val (hash-ref state val))) @@ -56,26 +58,29 @@ (rest instrs))]))) (monad model (hash 'w 0 'x 0 'y 0 'z 0) input)) -(define As '(14 10 13 -8 11 11 14 -11 14 -1 -8 -5 -16 -6)) -(define Bs '(12 9 8 3 0 11 10 13 3 10 10 14 6 5)) - -(define (monad* model) - (for/fold ([z 0]) - ([w model] - [A As] - [B Bs]) - (define x (if (= w (- (remainder z 26) A)) 0 1)) - (+ (* x (+ w B)) - (* (add1 (* x 25)) - (quotient z (if (positive? A) 1 26)))))) +#| w3 == w4 + | w7 - 1 == w8 + | w10 - 2 == w9 + | w11 - 3 == w6 + | w5 - 5 == w12 + | w2 - 7 == w13 + | w14 - 6 == w1 + |# (define part1 - (let loop ([model 99999999999999]) - (define model* (number->digits model)) - (if (member 0 model*) - (loop (sub1 model)) - (if (zero? (monad* model*)) - model - (loop (sub1 model)))))) + (let* ([w2 9] [w3 9] [w4 9] [w5 9] [w7 9] [w10 9] [w11 9] [w14 9] + [w13 (- w2 7)] [w12 (- w5 5)] [w8 (- w7 1)] [w9 (- w10 2)] + [w6 (- w11 3)] [w1 (- w14 6)]) + (string->number + (format "~a~a~a~a~a~a~a~a~a~a~a~a~a~a" + w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14)))) -(show-solution #f #f) \ No newline at end of file +(define part2 + (let* ([w1 1] [w3 1] [w4 1] [w6 1] [w8 1] [w9 1] [w12 1] [w13 1] + [w14 (+ w1 6)] [w11 (+ w6 3)] [w7 (+ w8 1)] [w10 (+ w9 2)] + [w5 (+ w12 5)] [w2 (+ w13 7)]) + (string->number + (format "~a~a~a~a~a~a~a~a~a~a~a~a~a~a" + w1 w2 w3 w4 w5 w6 w7 w8 w9 w10 w11 w12 w13 w14)))) + +(show-solution part1 part2) \ No newline at end of file