diff --git a/p4/p4.org b/p4/p4.org index 9e5b081..0ac5fa2 100644 --- a/p4/p4.org +++ b/p4/p4.org @@ -50,27 +50,39 @@ This is for part 1; easy : 1464 Now for part two, we create a new data-char at each removal step -I am not particularly happy style-wise, but that is it for today +and count how many rolls have been removed #+begin_src emacs-lisp - (defun tensor (a b) - (-map (lambda (x) (--map (list it x) a)) b)) - (setq initial-roll-number (length (advent/coordinates-of ?@ data-char)) current-roll-number (1+ initial-roll-number)) (while (> current-roll-number (setq current-roll-number (length (advent/coordinates-of ?@ data-char)))) (setq data-char - (-map (lambda (row) - (--map (if (and (= ?@ (advent/char-at it data-char)) - (<= 4 (rolls-adjacent it data-char))) - ?@ ?.) - row)) - (tensor (-iterate #'1+ 0 width) - (-iterate #'1+ 0 height))))) + (--2map-indexed (if (and (= ?@ it) + (<= 4 (rolls-adjacent it-multi-index data-char))) + ?@ ?.) + data-char))) (- initial-roll-number current-roll-number) #+end_src #+RESULTS: : 8409 + +#+begin_src emacs-lisp + (defun -2map (fun li) + (--map (-map fun it) li)) + + (defmacro --2map (form list) + `(-2map (lambda (it) ,form) ,list)) + + (defun -2map-indexed (fun li) + (-map-indexed (lambda (i row) + (-map-indexed (lambda (j it) + (funcall fun i j it)) + row)) + li)) + + (defmacro --2map-indexed (form li) + `(-2map-indexed (lambda (it-index-1 it-index-2 it) ,form) ,li)) +#+end_src