day 24, interpreter working

This commit is contained in:
2021-12-24 15:25:41 +01:00
parent 5fce73d69e
commit bcb4358a5c
2 changed files with 314 additions and 0 deletions

View File

@@ -0,0 +1,62 @@
(define (load-instructions filename)
(call-with-input-file
filename
(lambda (file)
(let loop [(instructions '())]
(let [(instruction (get-datum file))]
(cond
[(eof-object? instruction)
(reverse instructions)]
[(symbol=? instruction 'inp)
(loop (cons (list instruction
(get-datum file)) instructions))]
[else
(loop (cons (list instruction
(get-datum file)
(get-datum file)) instructions))]))))))
(define (digits-from-number n)
(let loop [(n n) (digits '())]
(if (= n 0)
digits
(loop (div n 10) (cons (mod n 10) digits)))))
(define (interpret-with-input instructions input)
(let [(enviro '((x 0) (y 0) (z 0) (w 0)
(inp (lambda (n)
(let [(digit (car input))]
(set! input (cdr input))
digit)))
(add +)
(mul *)
(eql (lambda (a b) (if (= a b) 1 0)))))
(input (digits-from-number input))]
(eval (list 'let*
; base environment with input
(cons (list 'input (cons 'list input)) enviro)
; code adapted to be able to modify environment
(cons 'begin (map
(lambda (i)
(list 'set! (cadr i) i))
instructions))
; return value
'(list x y z w)))))
(define (trace instructions input)
(let loop [(already '())
(instructions instructions)]
(unless (null? instructions)
(printf "~20a: ~a~%"
(car instructions)
(interpret-with-input (cons (car instructions)
(reverse already))
input))
(loop (cons (car instructions) already)
(cdr instructions)))))
(define (biggest-valid-MONAD instructions)
0) ; no idea what x, y, z and w mean...
(let [(instructions (load-instructions "input"))]
(printf "part 1: ~% Biggest valid MONAD: ~a~%"
(biggest-valid-MONAD instructions)))

View File

@@ -0,0 +1,252 @@
inp w
mul x 0
add x z
mod x 26
div z 1
add x 12
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 15
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 12
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 15
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -9
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 26
add x -7
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 15
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 2
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 11
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 15
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 10
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x -15
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 2
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 0
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 1
add x 12
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 26
add x -4
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 15
mul y x
add z y
inp w
mul x 0
add x z
mod x 26
div z 26
add x 0
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 15
mul y x
add z y