|
|
|
|
@ -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))) |
|
|
|
|
(--2map-indexed (if (and (= ?@ it) |
|
|
|
|
(<= 4 (rolls-adjacent it-multi-index data-char))) |
|
|
|
|
?@ ?.) |
|
|
|
|
row)) |
|
|
|
|
(tensor (-iterate #'1+ 0 width) |
|
|
|
|
(-iterate #'1+ 0 height))))) |
|
|
|
|
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 |
|
|
|
|
|