1
0
Fork 0

Day 24: It's not done at all lmao

This commit is contained in:
Jonathan Chan 2021-12-24 02:03:42 -08:00 committed by Jonathan Chan
parent ff35584f73
commit 5327774a1f
3 changed files with 713 additions and 0 deletions

380
input/24-manual.txt Normal file
View File

@ -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)

252
input/24.txt Normal file
View File

@ -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

81
src/24.rkt Normal file
View File

@ -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)