|
|
|
@ -1,6 +1,6 @@ |
|
|
|
#+title: solution to p17 |
|
|
|
#+title: solution to p17 |
|
|
|
|
|
|
|
|
|
|
|
Load program |
|
|
|
Load program |
|
|
|
#+begin_src emacs-lisp |
|
|
|
#+begin_src emacs-lisp |
|
|
|
(require 'dash) |
|
|
|
(require 'dash) |
|
|
|
|
|
|
|
|
|
|
|
@ -16,13 +16,12 @@ Load program |
|
|
|
(replace-regexp-from-top "," " ") |
|
|
|
(replace-regexp-from-top "," " ") |
|
|
|
(replace-regexp-from-top "Program: \\(.*\\)$" "(setq program '(\\1))") |
|
|
|
(replace-regexp-from-top "Program: \\(.*\\)$" "(setq program '(\\1))") |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(eval-buffer)) |
|
|
|
(eval-buffer)) |
|
|
|
|
|
|
|
|
|
|
|
#+end_src |
|
|
|
#+end_src |
|
|
|
|
|
|
|
|
|
|
|
#+RESULTS: |
|
|
|
#+RESULTS: |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Convert the opcodes into instructions |
|
|
|
#+begin_src emacs-lisp |
|
|
|
#+begin_src emacs-lisp |
|
|
|
(let ((opcode-alist '( (0 . adv) |
|
|
|
(let ((opcode-alist '( (0 . adv) |
|
|
|
(1 . bxl) |
|
|
|
(1 . bxl) |
|
|
|
@ -45,14 +44,15 @@ Load program |
|
|
|
| out | 5 | |
|
|
|
| out | 5 | |
|
|
|
| jnz | 0 | |
|
|
|
| jnz | 0 | |
|
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Now define the instructions and run, for part 1 |
|
|
|
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
(defun combo (c) |
|
|
|
(defun combo (c) |
|
|
|
(let ((combo-alist `( (4 . ,A) |
|
|
|
(let ((combo-alist `( (4 . ,A) |
|
|
|
(5 . ,B) |
|
|
|
(5 . ,B) |
|
|
|
(6 . ,C)))) |
|
|
|
(6 . ,C)))) |
|
|
|
(if (< c 4) c |
|
|
|
(if (< c 4) c |
|
|
|
(cdr (assoc c combo-alist))))) |
|
|
|
(cdr (assoc c combo-alist))))) |
|
|
|
|
|
|
|
|
|
|
|
(defun aux-adv (c) |
|
|
|
(defun aux-adv (c) |
|
|
|
(/ A (expt 2 (combo c)))) |
|
|
|
(/ A (expt 2 (combo c)))) |
|
|
|
@ -74,10 +74,8 @@ Load program |
|
|
|
|
|
|
|
|
|
|
|
(defun out (c) |
|
|
|
(defun out (c) |
|
|
|
(let ((out-c (mod (combo c) 8))) |
|
|
|
(let ((out-c (mod (combo c) 8))) |
|
|
|
(print out-c) |
|
|
|
|
|
|
|
(if so (setq so (concat so (format ",%d" out-c))) |
|
|
|
(if so (setq so (concat so (format ",%d" out-c))) |
|
|
|
(setq so (format "%d" out-c)) |
|
|
|
(setq so (format "%d" out-c))))) |
|
|
|
))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(defun bxc (l) |
|
|
|
(defun bxc (l) |
|
|
|
(setq B (logxor B C))) |
|
|
|
(setq B (logxor B C))) |
|
|
|
@ -86,115 +84,16 @@ Load program |
|
|
|
(unless (eq A 0) |
|
|
|
(unless (eq A 0) |
|
|
|
(setq ip (- (/ l 2) 1)))) |
|
|
|
(setq ip (- (/ l 2) 1)))) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(defun exec (pr) |
|
|
|
(defun exec (pr) |
|
|
|
(setq so nil |
|
|
|
(setq so nil |
|
|
|
ip 0 |
|
|
|
ip 0 |
|
|
|
stack-trace nil) |
|
|
|
stack-trace nil) |
|
|
|
|
|
|
|
|
|
|
|
(while (nth ip pr) |
|
|
|
(while (nth ip pr) |
|
|
|
(push (list A B C ip (nth ip pr)) stack-trace) |
|
|
|
(push (list A B C ip (nth ip pr)) stack-trace) |
|
|
|
(eval (nth ip pr)) |
|
|
|
(eval (nth ip pr)) |
|
|
|
(setq ip (1+ ip))) |
|
|
|
(setq ip (1+ ip))) |
|
|
|
so |
|
|
|
so) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
;boot |
|
|
|
|
|
|
|
(exec proggo) |
|
|
|
(exec proggo) |
|
|
|
stack-trace |
|
|
|
|
|
|
|
#+end_src |
|
|
|
#+end_src |
|
|
|
|
|
|
|
|
|
|
|
#+RESULTS: |
|
|
|
|
|
|
|
| 0 | 1 | 0 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 0 | 1 | 0 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 0 | 1 | 0 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 2 | 1 | 0 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 2 | 7 | 0 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 2 | 7 | 21 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 2 | 2 | 21 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 2 | 19 | 21 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 2 | 19 | 21 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 2 | 19 | 21 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 2 | 6 | 21 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 21 | 6 | 21 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 21 | 0 | 21 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 21 | 0 | 10 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 21 | 5 | 10 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 21 | 8 | 10 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 21 | 8 | 10 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 21 | 8 | 10 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 21 | 2 | 10 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 169 | 2 | 10 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 169 | 4 | 10 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 169 | 4 | 10 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 169 | 1 | 10 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 169 | 11 | 10 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 169 | 11 | 10 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 169 | 11 | 10 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 169 | 1 | 10 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 1354 | 1 | 10 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 1354 | 7 | 10 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 1354 | 7 | 677 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 1354 | 2 | 677 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 1354 | 679 | 677 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 1354 | 679 | 677 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 1354 | 679 | 677 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 1354 | 2 | 677 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 10833 | 2 | 677 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 10833 | 4 | 677 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 10833 | 4 | 86669 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 10833 | 1 | 86669 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 10833 | 86667 | 86669 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 10833 | 86667 | 86669 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 10833 | 86667 | 86669 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 10833 | 6 | 86669 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 86669 | 6 | 86669 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 86669 | 0 | 86669 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 86669 | 0 | 21667 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 86669 | 5 | 21667 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 86669 | 21664 | 21667 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 86669 | 21664 | 21667 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 86669 | 21664 | 21667 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 86669 | 3 | 21667 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 693352 | 3 | 21667 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 693352 | 5 | 21667 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 693352 | 5 | 86669 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 693352 | 0 | 86669 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 693352 | 86669 | 86669 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 693352 | 86669 | 86669 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 693352 | 86669 | 86669 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 693352 | 0 | 86669 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 5546819 | 0 | 86669 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 5546819 | 6 | 86669 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 5546819 | 6 | 22187278 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 5546819 | 3 | 22187278 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 5546819 | 22187273 | 22187278 | 0 | (bst 4) | |
|
|
|
|
|
|
|
| 5546819 | 22187273 | 22187278 | 7 | (jnz 0) | |
|
|
|
|
|
|
|
| 5546819 | 22187273 | 22187278 | 6 | (out 5) | |
|
|
|
|
|
|
|
| 5546819 | 7 | 22187278 | 5 | (bxc 1) | |
|
|
|
|
|
|
|
| 44374556 | 7 | 22187278 | 4 | (adv 3) | |
|
|
|
|
|
|
|
| 44374556 | 1 | 22187278 | 3 | (bxl 6) | |
|
|
|
|
|
|
|
| 44374556 | 1 | 0 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 44374556 | 4 | 0 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 44374556 | 0 | 0 | 0 | (bst 4) | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#+begin_src emacs-lisp |
|
|
|
|
|
|
|
stack-trace |
|
|
|
|
|
|
|
#+end_src |
|
|
|
|
|
|
|
1 |
|
|
|
|
|
|
|
#+RESULTS: |
|
|
|
|
|
|
|
| 44374556 | nil | 0 | 2 | (cdv 5) | |
|
|
|
|
|
|
|
| 44374556 | 4 | 0 | 1 | (bxl 5) | |
|
|
|
|
|
|
|
| 44374556 | 0 | 0 | 0 | (bst 4) | |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
so |
|
|
|
|
|
|
|
"1,0,4,6,7,3,5,2,1,0" |
|
|
|
|
|
|
|
(setq A 739) |
|
|
|
|
|
|
|
(combo 4) |
|
|
|
|
|
|
|
(adv 1) |
|
|
|
|
|
|
|
(/ A (expt 2 (combo 5))) |
|
|
|
|
|
|
|
stack-trace |
|
|
|
|
|
|
|
((0 0 0 2 (jnz 0)) (0 0 0 1 (out 4)) (1 0 0 0 (adv 1)) (1 0 0 2 (jnz 0)) (1 0 0 1 (out 4)) (2 0 0 0 (adv 1)) (2 0 0 2 (jnz 0)) (2 0 0 1 (out 4)) (5 0 0 0 (adv 1)) (5 0 0 2 (jnz 0)) (5 0 0 1 (out 4)) (11 0 0 0 (adv 1)) ...) |
|
|
|
|
|
|
|
so |
|
|
|
|
|
|
|
"1,1,1,1,1,1,1,1,1,1" |
|
|
|
|
|
|
|
|