diff --git a/p7/p7.org b/p7/p7.org new file mode 100644 index 0000000..ee82220 --- /dev/null +++ b/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