From 1565b3b9cfc73e6967d545b2594d202860619c65 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Fri, 24 Dec 2021 02:03:42 -0800 Subject: [PATCH] Day 24: It's not done at all lmao --- input/24-manual.txt | 380 ++++++++++++++++++++++++++++++++++++++++++++ input/24.txt | 252 +++++++++++++++++++++++++++++ src/24.rkt | 81 ++++++++++ 3 files changed, 713 insertions(+) create mode 100644 input/24-manual.txt create mode 100644 input/24.txt create mode 100644 src/24.rkt diff --git a/input/24-manual.txt b/input/24-manual.txt new file mode 100644 index 0000000..28a5a9a --- /dev/null +++ b/input/24-manual.txt @@ -0,0 +1,380 @@ +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y + +w <- in +x = (z % 26 + 14) == w ? 0 : 1 +z = (w + 12) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 10 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 9 +mul y x +add z y + +w <- in +x = (z % 26 + 10) == w ? 0 : 1 +z = (w + 9) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 13 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 8 +mul y x +add z y + +w <- in +x = (z % 26 + 13) == w ? 0 : 1 +z = (w + 8) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -8 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 3 +mul y x +add z y + +w <- in +x = (z % 26 - 8) == w ? 0 : 1 +z = (w + 3) * x + (25 * x + 1) * (z / 26) + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 0 +mul y x +add z y + +w <- in +x = (z % 26 + 11) == w ? 0 : 1 +z = (w + 0) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y + +w <- in +x = (z % 26 + 11) == w ? 0 : 1 +z = (w + 11) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y + +w <- in +x = (z % 26 + 14) == w ? 0 : 1 +z = (w + 10) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 13 +mul y x +add z y + +w <- in +x = (z % 26 - 11) == w ? 0 : 1 +z = (w + 13) * x + (25 * x + 1) * (z / 26) + +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 3 +mul y x +add z y + +w <- in +x = (z % 26 + 14) == w ? 0 : 1 +z = (w + 3) * x + (25 * x + 1) * z + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -1 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y + +w <- in +x = (z % 26 - 1) == w ? 0 : 1 +z = (w + 10) * x + (25 * x + 1) * (z / 26) + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -8 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y + +w <- in +x = (z % 26 - 8) == w ? 0 : 1 +z = (w + 10) * x + (25 * x + 1) * (z / 26) + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -5 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 14 +mul y x +add z y + +w <- in +x = (z % 26 - 5) == w ? 0 : 1 +z = (w + 14) * x + (25 * x + 1) * (z / 26) + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -16 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 6 +mul y x +add z y + +w <- in +x = (z % 26 - 16) == w ? 0 : 1 +z = (w + 6) * x + (25 * x + 1) * (z / 26) + +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -6 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 5 +mul y x +add z y + +w <- in +x = (z % 26 - 6) == w ? 0 : 1 +z = (w + 5) * x + (25 * x + 1) * (z / 26) + + +x = (z % 26 + 14) == w1 ? 0 : 1 +z = (w1 + 12) * x + (25 * x + 1) * z + +x = (z % 26 + 10) == w2 ? 0 : 1 +z = (w2 + 9) * x + (25 * x + 1) * z + +x = (z % 26 + 13) == w3 ? 0 : 1 +z = (w3 + 8) * x + (25 * x + 1) * z + +x = (z % 26 - 8) == w4 ? 0 : 1 +z = (w4 + 3) * x + (25 * x + 1) * (z / 26) + +x = (z % 26 + 11) == w5 ? 0 : 1 +z = (w5 + 0) * x + (25 * x + 1) * z + +x = (z % 26 + 11) == w6 ? 0 : 1 +z = (w6 + 11) * x + (25 * x + 1) * z + +x = (z % 26 + 14) == w7 ? 0 : 1 +z = (w7 + 10) * x + (25 * x + 1) * z + +x = (z % 26 - 11) == w8 ? 0 : 1 +z = (w8 + 13) * x + (25 * x + 1) * (z / 26) + +x = (z % 26 + 14) == w9 ? 0 : 1 +z = (w9 + 3) * x + (25 * x + 1) * z + +x = (z % 26 - 1) == w10 ? 0 : 1 +z = (w10 + 10) * x + (25 * x + 1) * (z / 26) + +x = (z % 26 - 8) == w11 ? 0 : 1 +z = (w11 + 10) * x + (25 * x + 1) * (z / 26) + +x = (z % 26 - 5) == w12 ? 0 : 1 +z = (w12 + 14) * x + (25 * x + 1) * (z / 26) + +x = (z % 26 - 16) == w13 ? 0 : 1 +z = (w13 + 6) * x + (25 * x + 1) * (z / 26) + +x = (z % 26 - 6) == w14 ? 0 : 1 +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 diff --git a/input/24.txt b/input/24.txt new file mode 100644 index 0000000..8bd2e7a --- /dev/null +++ b/input/24.txt @@ -0,0 +1,252 @@ +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 12 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 10 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 9 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 13 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 8 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -8 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 3 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 0 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 11 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -11 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 13 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 1 +add x 14 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 3 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -1 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -8 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 10 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -5 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 14 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -16 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 6 +mul y x +add z y +inp w +mul x 0 +add x z +mod x 26 +div z 26 +add x -6 +eql x w +eql x 0 +mul y 0 +add y 25 +mul y x +add y 1 +mul z y +mul y 0 +add y w +add y 5 +mul y x +add z y diff --git a/src/24.rkt b/src/24.rkt new file mode 100644 index 0000000..d1204be --- /dev/null +++ b/src/24.rkt @@ -0,0 +1,81 @@ +#lang racket + +(require "../lib.rkt") + +(define input + (for/list ([line (problem-input 24)]) + (match (string-words line) + [`(,instr ,var) (list (string->symbol instr) (string->symbol var))] + [`(,instr ,var ,val) + (list (string->symbol instr) + (string->symbol var) + (or (string->number val) + (string->symbol val)))]))) + +(define (monad model) + (define (get state val) + (if (number? val) val (hash-ref state val))) + (define (monad model state instrs) + (if (empty? instrs) + (hash-ref state 'z) + (match (first instrs) + [`(inp ,var) + (monad (rest model) + (hash-set state var (first model)) + (rest instrs))] + [`(add ,var ,val) + (monad model + (hash-set state var + (+ (hash-ref state var) + (get state val))) + (rest instrs))] + [`(mul ,var ,val) + (monad model + (hash-set state var + (* (hash-ref state var) + (get state val))) + (rest instrs))] + [`(div ,var ,val) + (monad model + (hash-set state var + (quotient (hash-ref state var) + (get state val))) + (rest instrs))] + [`(mod ,var ,val) + (monad model + (hash-set state var + (remainder (hash-ref state var) + (get state val))) + (rest instrs))] + [`(eql ,var ,val) + (monad model + (hash-set state var + (if (= (hash-ref state var) + (get state val)) + 1 0)) + (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)))))) + +(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)))))) + +(show-solution #f #f) \ No newline at end of file