From 0a78796a56e1595e8ac9ca795bf3b773612e280c Mon Sep 17 00:00:00 2001 From: Jacopo De Simoi Date: Mon, 21 Apr 2025 13:53:40 -0400 Subject: [PATCH] [p17] mmmh --- p17/p17.org | 52 ++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 48 insertions(+), 4 deletions(-) diff --git a/p17/p17.org b/p17/p17.org index b3c5b73..7a741b3 100644 --- a/p17/p17.org +++ b/p17/p17.org @@ -9,7 +9,7 @@ Load program (replace-regexp a b)) (with-temp-buffer - (insert-file-contents "input-test") + (insert-file-contents "input") (replace-regexp-from-top "Register \\(.\\): \\(.*\\)$" "(setq \\1 \\2)") (replace-regexp-from-top "\\(.\\),\\(.\\)" "(\\1 \\2)") @@ -33,8 +33,13 @@ Convert the opcodes into instructions #+end_src #+RESULTS: -| adv | 1 | -| out | 4 | +| bst | 4 | +| bxl | 5 | +| cdv | 5 | +| bxl | 6 | +| adv | 3 | +| bxc | 1 | +| out | 5 | | jnz | 0 | @@ -91,4 +96,43 @@ Now define the instructions and run, for part 1 #+end_src #+RESULTS: - : 4,6,3,5,6,3,5,2,1,0 + : 1,5,0,3,7,3,0,3,1 + +now for part 2 we create the initial value 3 bits at a time + #+begin_src emacs-lisp + (defun prep-reg (data) + (apply #'+ (--map-indexed (ash it (* 3 it-index)) data)) ) + + (defun setup-registers (data) + (setq A (prep-reg data) + B 0 + C 0)) + + (defun exec (pr data) + (let ((so nil) + (ip 0) + (stack-trace nil)) + + (setup-registers data) + + (while (nth ip pr) + (eval (nth ip pr)) + (setq ip (1+ ip))) + + (reverse so))) + + (setq data (list nil) + target (-flatten program)) + + (defun grow-data (data) + (--mapcat (-map (lambda (i) (append it (list i))) (-iota 8)) data) + ) + + (defun good-data (data) + (--filter (-is-prefix-p (exec proggo it) target) ) (grow-data data)) + + (-iterate #'good-data data (length target)) + (good-data '((1))) + (exec proggo '(1 2)) + target + #+end_src