parent
12c88f0db1
commit
4e315527d7
1 changed files with 61 additions and 0 deletions
@ -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…
Reference in new issue