p17 part 1 done

main
Jacopo De Simoi 11 months ago
parent 9ee07d26ae
commit 7ec2d09720
  1. 5
      p17/input-test
  2. 200
      p17/p17.org

@ -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…
Cancel
Save