mirror of
https://github.com/correl/advent-of-code.git
synced 2024-11-25 03:00:04 +00:00
104 lines
10 KiB
Org Mode
104 lines
10 KiB
Org Mode
#+TITLE: Advent of Code
|
|
#+STARTUP: indent
|
|
#+OPTIONS: num:nil ^:nil d:nil
|
|
#+PROPERTY: header-args :cache yes
|
|
#+DRAWERS: HIDDEN
|
|
|
|
* Day 1: Not Quite Lisp
|
|
|
|
Santa was hoping for a white Christmas, but his weather machine's
|
|
"snow" function is powered by stars, and he's fresh out! To save
|
|
Christmas, he needs you to collect *fifty stars* by December 25th.
|
|
|
|
Collect stars by helping Santa solve puzzles. Two puzzles will be made
|
|
available on each day in the advent calendar; the second puzzle is
|
|
unlocked when you complete the first. Each puzzle grants *one star*.
|
|
Good luck!
|
|
|
|
Here's an easy puzzle to warm you up.
|
|
|
|
Santa is trying to deliver presents in a large apartment building, but
|
|
he can't find the right floor - the directions he got are a little
|
|
confusing. He starts on the ground floor (floor =0=) and then follows
|
|
the instructions one character at a time.
|
|
|
|
An opening parenthesis, =(=, means he should go up one floor, and a
|
|
closing parenthesis, =)=, means he should go down one floor.
|
|
|
|
The apartment building is very tall, and the basement is very deep; he
|
|
will never find the top or bottom floors.
|
|
|
|
For example:
|
|
|
|
- =(())= and =()()= both result in floor 0.
|
|
- =(((= and =(()(()(= both result in floor 3.
|
|
- =))(((((= also results in floor 3.
|
|
- =())= and =))(= both result in floor -1 (the first basement level).
|
|
- =)))= and =)())())= both result in floor -3.
|
|
|
|
To what floor do the instructions take Santa?
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
:HIDDEN:
|
|
#+name: 1-input
|
|
#+BEGIN_EXAMPLE
|
|
((((()(()(((((((()))(((()((((()())(())()(((()((((((()((()(()(((()(()((())))()((()()())))))))))()((((((())((()))(((((()(((((((((()()))((()(())()((())((()(()))((()))()))()(((((()(((()()))()())((()((((())()())()((((())()(()(()(((()(())(()(())(((((((())()()(((())(()(()(()(())))(()((((())((()))(((()(()()(((((()()(()(((()(((((())()))()((()(()))()((()((((())((((())(()(((())()()(()()()()()(())((((())((())(()()))()((((())))((((()())()((((())((()())((())(())(((((()((((()(((()((((())(()(((()()))()))((((((()((())()())))(((()(()))(()()(()(((()(()))((()()()())((()()()(((())())()())())())((()))(()(()))(((((()(()(())((()(())(())()((((()())()))((((())(())((())())((((()(((())(())((()()((((()((((((()(())()()(()(()()((((()))(())()())()))(())))(())))())()()(())(()))()((()(()(())()()))(()())))))(()))(()()))(())(((((()(()(()()((())()())))))((())())((())(()(())((()))(())(((()((((((((()()()(()))()()(((()))()((()()(())(())())()(()(())))(((((()(())(())(()))))())()))(()))()(()(((((((()((((())))())())())())()((((((((((((((()()((((((()()()())())()())())())(())(())))())((()())((()(()))))))()))))))))))))))))())((())((())()()))))))(((()((()(()()))((())(()()))()()())))(())))))))(()(((())))())()())))()()(())()))()(()))())((()()))))(()))))()))(()()(())))))))()(((()))))()(()))(())())))))()))((()))((()))())(())))))))))((((())()))()))()))())(())()()(())))())))(()())()))((()()(())))(())((((((()(())((()(((()(()()(())))()))))))()))()(()((()))()(()))(()(((())((((())())(())(()))))))))())))))))())())))))())))))()()(((())()(()))))))))())))))(())()()()))()))()))(()(())()()())())))))))())()(()(()))))()()()))))())(()))))()()))))()())))))(((())()()))(()))))))))))()()))))()()()))))(()())())()()())()(()))))()(()))(())))))))(((((())(())())()()))()()))(())))))()(()))))(())(()()))()())()))()))()))()))))())()()))())())))(()))(()))))))())()(((())()))))))))()))()())))())))())))()))))))))))()()))(()()))))))(())()(()))))())(()))))(()))))(()())))))())())()()))))())()))))))))(()))))()))))))()(()())))))))()))())))())))())))())))))))())(()()))))))(()())())))()())()))))))))))))))())))()(())))()))())()()(())(()()))(())))())()())(()(()(()))))())))))))))))())(()))()))()))))(())()())()())))))))))))()()))))))))))))())())))))(()())))))))))))())(())))()))))))))())())(()))()))(())))()))()()(())()))))))()((((())()))())())))))()))()))))((()())()))))())))(())))))))))))))))))()))))()()())()))()()))))())()))((()())))())))(()))(()())))))))()))()))))(())))))))(())))))())()()(()))())()))()()))))())()()))))())()))())))))))(()))))()())()))))))))(()))())))(()))()))))(())()))())())(())())())))))))((((())))))()))()))()())()(())))()))()))()())(()())()()(()())()))))())())))))(()))()))))())(()()(())))))(())()()((())())))))(())(())))))))())))))))))()(())))))))()())())())()(()))))))))(()))))))))())()()))()(()))))))()))))))())))))))(())))()()(())()())))))(((())))()((())()))())))(()()))())(())())))()(((()())))))()(()()())))()()(()()(()()))())()(()()()))())()()))()())(()))))())))))())))(())()()))))(()))))(())(()))(())))))()()))()))))())()))()()(())())))((()))())()))))))()()))))((()(()))))()()))))))())))))())(()((()())))))))))))()())())))()))(()))))))(()))(())()())))(()))))))))())()()()()))))(()())))))))((())))()))(()))(())(())()())()))))))))(())))())))(()))()()))(()()))(()))())))()(())))())((()((()(())))((())))()))))((((())())()())))(())))()))))))())(()()((())))())()(()())))))(()())()))())))))))((())())))))))(()(()))())()()(()()(((()(((()())))))()))))))()(())(()()((()()(())()()))())()())()))()())())())))))))(((())))))))()()))))))(((())()))(()()))(()()))))(()(()()((((())()())((()()))))(()(())))))()((()()()())()()((()((()()))(()))(((()()()))(((())))()(((())()))))))((()(())())))(()())(((((()(()))(()((()))(()())()))))(()(()))()(()))(())(((())(()()))))()()))(((()))))(()()()()))())))((()()()(())()))()))))()()))()))))))((((((()()()))))())((()()(((()))))(()(())(()()())())())))()(((()()))(())((())))(()))(()()()())((())())())(()))))()))()((()(())()(()()(())(()))(())()))(())(()))))(())(())())(()()(()((()()((())))((()))()((())))(((()()()()((((()))(()()))()()()(((())((())())(()()(()()()))()((())(())()))())(((()()(())))()((()()())()())(()(())())(((())(())())((())(())()(((()()))(())))((())(()())())(())((()()()((((((())))((()(((((())()))()))(())(()()))()))(())()()))(())((()()())()()(()))())()((())))()((()()())((((()())((())())())((()((()))()))((())((()()(()((()()(((())(()()))))((()((())()(((())(()((())())((())(()((((((())())()(()())()(())(((())((((((()(())(()((()()()((()()(()()()())))()()(((((()()))()((((((()))()(()(()(()(((()())((()))())()((()))(())))()))()()))())()()))())((((())(()(()))(((((((())(((()(((((()(((()()((((())(((())())))(()()()(()(()))()))((((((()))((()(((()(())((()((((()((((((())(((((())))(((()(()))))(((()(((())()((())(()((()))(((()()(((())((((()(()(((((()))(((()(((((((()(()()()(()(()(()()())(())(((((()(())())()())(()(()(()))()(()()()())(()()(()((()))()((())())()(()))((())(()))()(()))()(((()(()(()((((((()()()()())()(((((()()(((()()()((()(((((()))((((((((()()()(((((()))))))(()()()(())(()))(()()))))(())()))(((((()(((((()()(()(()())(((()))((((()((()(()(()((()(()((())))()(((()((()))((()))(((((((((()((()((()(())))()((((()((()()))((())(((()(((((()()(()(()()((()(()()()(((((((())())()())))))((((()()(()))()))(()((())()(()(((((((((()()(((()(()())(()((()())((())())((((()(((()(((()((((()((()((((()(()((((((())((((((((((((()()(()()((((((((((((((()((()()))()((((((((((((())((((()(()())((()(()(()))()(((((()()(((()()))()())(())((()(((((()((())(((((()((()(((((()))()()((((())()((((())(((((((((()(())(()(())))())(()((())(((())(())(())())(()(()(())()()((()((())()(((()(((((()(())))()(((()((())))((()()()(((()(((()((()(()(())(()((()())(()(()(((()(((((((((())(()((((()()))(()((((()()()()(((()((((((((()(()()((((((()(()()(()((()((((((((((()()(((((((()())(())))(((()()))(((((()((()()())(()()((((())((()((((()))))(())((()(()()(((()(()(((()((((()(((((()))())())(()((())()))(((()())((())((())((((()((()((((((())(()((((()()))((((((())()(()))((()(((())((((((((((()()(((((()(((((()((()()()((((())))(()))()((()(())()()((()((((((((((()((())(())(((((()(()(()()))((((()((((()()((()(((()(((((((((()(()((()((()))((((((()(((())()()((()(((((((()())))()()(()((()((()()(((()(()()()()((((()((())((((()(((((((((()(((()()(((()(()(((()(((()((())()(()((()(()(()(()))()(((()))(()((((()((())((((())((((((())(()))(()((((())((()(()((((((((()()((((((()(()(()()()(())((()((()()(((()(((((((()()((()(((((((()))(((((()(((()(()()()(()(((()((()()((())(()(((((((((()(()((()((((((()()((())()))(((((()((())()())()(((((((((((()))((((()()()()())(()()(()(()()))()))(()))(()(((()()))())(()(()))()()((())(()())()())()(()))()))(()()(()((((((())((()(((((((((((()(())()((()(()((()((()(()((()((((((((((()()())((())()(())))((())()())()(((((()(()())((((()((()(())(()))(((())()((()))(((((())(()))()()(()))(((())((((()((((()(())))(((((((()))))())()())(())((())()(()()((()(()))()(()()(()()((()())((())((()()))((((()))()()))(()()(())()()(((((()(())((()((((()))()))(()())())(((()()(()()))(())))))(()))((())(((((()((((()))()((((()))()((())(((())))(((()())))((()(()()((
|
|
#+END_EXAMPLE
|
|
:END:
|
|
|
|
#+name: 1-solution
|
|
#+BEGIN_SRC emacs-lisp :var input=1-input :exports both
|
|
(defun day1/parse-directions (directions)
|
|
(seq-map
|
|
(lambda (char)
|
|
(cond ((eq char ?\() 1)
|
|
((eq char ?\)) -1)
|
|
(t 0)))
|
|
directions))
|
|
|
|
(seq-reduce #'+
|
|
(day1/parse-directions input)
|
|
0)
|
|
#+END_SRC
|
|
|
|
#+RESULTS[966acea0b884f9a83f09aae9b3c00803a516e3ca]: 1-solution
|
|
: 74
|
|
|
|
** Part 2
|
|
Now, given the same instructions, find the position of the first
|
|
character that causes him to enter the basement (floor =-1=). The
|
|
first character in the instructions has position =1=, the second
|
|
character has position =2=, and so on.
|
|
|
|
For example:
|
|
|
|
- =)= causes him to enter the basement at character position =1=.
|
|
- =()())= causes him to enter the basement at character position =5=.
|
|
What is the position of the character that causes Santa to first enter the basement?
|
|
|
|
----------------------------------------------------------------------
|
|
|
|
#+name: 1.2-solution
|
|
#+BEGIN_SRC emacs-lisp :var input=1-input :exports both
|
|
(defun day1/steps-until (predicate reduce-fn sequence initial-value)
|
|
(car (seq-reduce
|
|
(lambda (acc next)
|
|
(let ((counter (car acc))
|
|
(value (cdr acc)))
|
|
(if (funcall predicate value) acc
|
|
(cons (+ 1 counter)
|
|
(funcall reduce-fn value next)))))
|
|
sequence
|
|
(cons 0 initial-value))))
|
|
|
|
(day1/steps-until
|
|
(lambda (floor) (= floor -1))
|
|
#'+
|
|
(day1/parse-directions input)
|
|
0)
|
|
#+END_SRC
|
|
|
|
#+RESULTS[048e5b88e35ca21b8be15e5cffaa117c4e1eca45]: 1.2-solution
|
|
: 1795
|
|
|