diff --git a/24-arithmetic-logic-unit/code.scm b/24-arithmetic-logic-unit/code.scm new file mode 100644 index 0000000..89bfe4f --- /dev/null +++ b/24-arithmetic-logic-unit/code.scm @@ -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))) diff --git a/24-arithmetic-logic-unit/input b/24-arithmetic-logic-unit/input new file mode 100644 index 0000000..1184da5 --- /dev/null +++ b/24-arithmetic-logic-unit/input @@ -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