parent
9ee07d26ae
commit
7ec2d09720
2 changed files with 205 additions and 0 deletions
@ -0,0 +1,5 @@ |
||||
Register A: 729 |
||||
Register B: 0 |
||||
Register C: 0 |
||||
|
||||
Program: 0,1,5,4,3,0x |
||||
@ -0,0 +1,200 @@ |
||||
#+title: solution to p17 |
||||
|
||||
Load program |
||||
#+begin_src emacs-lisp |
||||
(require 'dash) |
||||
|
||||
(defun replace-regexp-from-top (a b) |
||||
(goto-char (point-min)) |
||||
(replace-regexp a b)) |
||||
|
||||
(with-temp-buffer |
||||
(insert-file-contents "input") |
||||
(replace-regexp-from-top "Register \\(.\\): \\(.*\\)$" "(setq \\1 \\2)") |
||||
|
||||
(replace-regexp-from-top "\\(.\\),\\(.\\)" "(\\1 \\2)") |
||||
(replace-regexp-from-top "," " ") |
||||
(replace-regexp-from-top "Program: \\(.*\\)$" "(setq program '(\\1))") |
||||
|
||||
|
||||
(eval-buffer)) |
||||
|
||||
#+end_src |
||||
|
||||
#+RESULTS: |
||||
|
||||
#+begin_src emacs-lisp |
||||
(let ((opcode-alist '( (0 . adv) |
||||
(1 . bxl) |
||||
(2 . bst) |
||||
(3 . jnz) |
||||
(4 . bxc) |
||||
(5 . out) |
||||
(6 . bdv) |
||||
(7 . cdv)))) |
||||
(setq proggo (--map (cons (cdr (assoc (car it) opcode-alist)) (cdr it)) program))) |
||||
#+end_src |
||||
|
||||
#+RESULTS: |
||||
| bst | 4 | |
||||
| bxl | 5 | |
||||
| cdv | 5 | |
||||
| bxl | 6 | |
||||
| adv | 3 | |
||||
| bxc | 1 | |
||||
| out | 5 | |
||||
| jnz | 0 | |
||||
|
||||
#+begin_src emacs-lisp |
||||
|
||||
(defun combo (c) |
||||
(let ((combo-alist `( (4 . ,A) |
||||
(5 . ,B) |
||||
(6 . ,C)))) |
||||
(if (< c 4) c |
||||
(cdr (assoc c combo-alist))))) |
||||
|
||||
(defun aux-adv (c) |
||||
(/ A (expt 2 (combo c)))) |
||||
|
||||
(defun adv (c) |
||||
(setq A (aux-adv c))) |
||||
|
||||
(defun bdv (c) |
||||
(setq B (aux-adv c))) |
||||
|
||||
(defun cdv (c) |
||||
(setq C (aux-adv c))) |
||||
|
||||
(defun bxl (l) |
||||
(setq B (logxor l B))) |
||||
|
||||
(defun bst (c) |
||||
(setq B (mod (combo c) 8))) |
||||
|
||||
(defun out (c) |
||||
(let ((out-c (mod (combo c) 8))) |
||||
(print out-c) |
||||
(if so (setq so (concat so (format ",%d" out-c))) |
||||
(setq so (format "%d" out-c)) |
||||
))) |
||||
|
||||
(defun bxc (l) |
||||
(setq B (logxor B C))) |
||||
|
||||
(defun jnz (l) |
||||
(unless (eq A 0) |
||||
(setq ip (- (/ l 2) 1)))) |
||||
|
||||
|
||||
(defun exec (pr) |
||||
(setq so nil |
||||
ip 0 |
||||
stack-trace nil) |
||||
|
||||
(while (nth ip pr) |
||||
(push (list A B C ip (nth ip pr)) stack-trace) |
||||
(eval (nth ip pr)) |
||||
(setq ip (1+ ip))) |
||||
so |
||||
) |
||||
|
||||
;boot |
||||
(exec proggo) |
||||
stack-trace |
||||
#+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" |
||||
Loading…
Reference in new issue