[p4] use -2map for mapping over 2d lists.

master
Jacopo De Simoi 3 months ago
parent a4768f7521
commit f138918c2a
  1. 32
      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)))
(--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

Loading…
Cancel
Save