You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

67 lines
1.6 KiB

#+title: Solution to p6
First load the data as a list of cons cells (start . end)
#+begin_src emacs-lisp :results none
(with-temp-buffer
(insert-file-contents "input")
(advent/replace-multiple-regex-buffer
'(
("^" . "(")
("$" . ")")
))
(goto-char (point-min))
(insert "(setq data '(")
(goto-char (point-max))
(insert "))")
(eval-buffer))
#+end_src
This is for part 1. Quite straightforward
#+begin_src emacs-lisp
(-sum (-map #'eval (apply #'-zip-lists (-rotate 1 data))))
#+end_src
#+RESULTS:
: 4412382293768
For part 2, we need a different approach. let's transpose the whole buffer
#+begin_src emacs-lisp :results none
(with-temp-buffer
(insert-file-contents "input")
(goto-char (point-max))
(beginning-of-line)
(kill-line)
(backward-delete-char 1)
(goto-char (point-min))
(yank) (insert "\n")
(advent/replace-multiple-regex-buffer
'(
("^" . "\"")
("$" . "\"")
))
(goto-char (point-min))
(insert "(setq data '(")
(goto-char (point-max))
(insert "))")
(eval-buffer)
(with-temp-buffer
(apply #'insert (--map (apply 'string it) (apply #'-zip-lists (-map #'advent/split-string-into-char-list data))))
(advent/replace-multiple-regex-buffer
'(("\\([*+]\\)" . ") (\\1 "))
)
(goto-char (point-max))
(insert ")))")
(goto-char (point-min))
(insert "(setq data2 '(")
(delete-char 1)
(eval-buffer)))
#+end_src
Then do the math
#+begin_src emacs-lisp
(-sum (-map #'eval data2))
#+end_src
#+RESULTS:
: 7858808482092