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