[p7] done both parts

but i want to try a different approach
master
Jacopo De Simoi 6 months ago
parent 12c88f0db1
commit 4e315527d7
  1. 61
      p7/p7.org

@ -0,0 +1,61 @@
#+title: Solution to p7
Yay, another 2D problem
#+begin_src emacs-lisp :results none
(with-temp-buffer
(insert-file-contents "input")
(advent/replace-multiple-regex-buffer
'(("^\\(.*\\)$" . "\"\\1\" ")))
(goto-char (point-min))
(insert "(setq data '(")
(goto-char (point-max))
(insert "))")
(eval-buffer))
(setq data-char (-map #'advent/split-string-into-char-list data)
width (length (car data-char))
height (length data-char))
#+end_src
This is for part 1;
#+begin_src emacs-lisp
(defun position-valid-p (pos)
(and (and (>= (car pos) 0) (< (car pos) width))
(and (>= (cadr pos) 0) (< (cadr pos) height))))
(advent/char-at '(-1 0) data-char)
(defun tachyon-step (el)
(if (not (position-valid-p el)) (list el)
(let ((down (advent/neighbour el '(0 1))))
(if (or (not (position-valid-p down))
(not (eq ?^ (advent/char-at down data-char))))
(list down)
(push down splits)
(--map (advent/neighbour el it) '((-1 0) (1 0)))))))
(setq tachyons (advent/coordinates-of ?S data-char))
(setq splits nil)
(length (--fix (-distinct (-mapcat 'tachyon-step it)) tachyons))
(length (-distinct splits))
#+end_src
#+RESULTS:
: 1507
#+begin_src emacs-lisp
(defun tachyon-step-freq (el)
(--map (cons it (cdr el)) (tachyon-step (car el))))
(setq tachyons (cons (car (advent/coordinates-of ?S data-char)) 1))
(defun compress (li)
(--map (cons it (-sum (-map #'cdr (-filter (lambda (x) (equal it (car x))) li)))) (-distinct (-map #'car li))))
(-sum (-map #'cdr (--fix (compress (-mapcat 'tachyon-step-freq it)) (list tachyons))))
#+end_src
#+RESULTS:
: 1537373473728
Loading…
Cancel
Save