day 24, interpreter working
This commit is contained in:
62
24-arithmetic-logic-unit/code.scm
Normal file
62
24-arithmetic-logic-unit/code.scm
Normal 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)))
|
||||
252
24-arithmetic-logic-unit/input
Normal file
252
24-arithmetic-logic-unit/input
Normal 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
|
||||
Reference in New Issue
Block a user