Ain't pretty, but it works

master
Jacopo De Simoi 3 months ago
parent cc8928d457
commit c4ef3f5c79
  1. 55
      p1/p1.org

@ -0,0 +1,55 @@
#+title: Solution to p1
First load the data as a list of positive or negative numbers
#+begin_src emacs-lisp :results none
(with-temp-buffer
(insert-file-contents "input")
(advent/replace-multiple-regex-buffer
'(("L" . "-")
("R" . "")))
(goto-char (point-min))
(insert "(setq data '(")
(goto-char (point-max))
(insert "))")
(eval-buffer))
#+end_src
Then add the rotations starting from the initial offset and count the
number of 0's mod 100; that is what we need for part 1
#+begin_src emacs-lisp
(length (--filter (= 0 it) (--map (mod it 100) (-running-sum (append '(50) data)))))
#+end_src
#+RESULTS:
: 962
For part 2, This ain't pretty, but it works:
#+begin_src emacs-lisp
(defun advent/consecutive-pairs (list)
(-zip-pair list (cdr list)))
(+
(-sum (--map (abs (- (car it) (cdr it)))
(advent/consecutive-pairs
(--map (floor it 100) (-running-sum (append '(50) data))))))
(length
(--filter (and (eq (car it) 0) (< (cdr it) 0))
(-zip-pair
(cdr (--map (mod it 100) (-running-sum (append '(50) data))))
data)))
(* -1 (length
(--filter (and (eq (car it) 0) (< (cdr it) 0))
(-zip-pair
(cdr (--map (mod it 100) (-running-sum (append '(50) data))))
(cdr data))))))
#+end_src
#+RESULTS:
: 5782
#+begin_src emacs-lisp
(floor -5 100)
#+end_src
*
Loading…
Cancel
Save