advent of code, days 1-3
and so, i've finally thrown together some advent of code stuff!
https://gist.github.com/Archenoth/4256a377c186b702e046f57130ae8ee9
i started pretty late, but i decided pretty quickly that I'm probably going to bias towards using clojure for these challenges, and so far everything has been solvable pretty easily with loop and recur!
re: advent of code, day 1
https://gist.github.com/Archenoth/4256a377c186b702e046f57130ae8ee9#-day-1-sonar-sweep-
there wasn't anything particularly tricky about this day; i just basically added to the accumulator whenever the two numbers differed in the right way
(loop [[num & rest] input
increases 0]
(if-not rest
increases
(recur rest (if (< num (first rest)) (+ 1 increases) increases))))
part 2 was a little more interesting because i broke out the ##Inf constant to avoid the addition from happening in the first run. also destructuring made it a cakewalk to grab any number of numbers for the window~
(loop [[a b c & _ :as all] input
last-sum ##Inf
increases 0]
(if-not c
increases
(let [sum (+ a b c)]
(if (< last-sum sum)
(recur (rest all) sum (+ increases 1))
(recur (rest all) sum increases)))))
re: advent of code, day 2
https://gist.github.com/Archenoth/4256a377c186b702e046f57130ae8ee9#-day-2-dive-
part one was literally just a case in a loop, not a lot interesting to say about that!
(loop [[[dir dist] & rem] input
horiz 0
depth 0]
(if-not dir
(* horiz depth)
(case dir
"forward" (recur rem (+ horiz dist) depth)
"down" (recur rem horiz (+ depth dist))
"up" (recur rem horiz (- depth dist)))))
part two was just a slightly different recur, so there's not a lot to say about that either
(loop [[[dir dist] & rem] input
aim 0
horiz 0
depth 0]
(if-not dir
(* horiz depth)
(case dir
"forward" (recur rem aim (+ horiz dist) (+ depth (* aim dist)))
"down" (recur rem (+ aim dist) horiz depth)
"up" (recur rem (- aim dist) horiz depth))))
also, this was when i decided to use clojure to read in the data itself too, since it seems like passing larger datasets in my version of ob-clojure seems to blow the class size limit since it just plops the entire data structure into a let
i fixed how ob-clojure handles passed-in lists, but i haven't yet fixed how it loads larger datasets (though i still need to sign the fsf papers if i want to contrib it back upstream anyway, which is kind of a hassle :s)
i'm probably not going to continue putting in the actual code into posts like this, but for the first three it seemed okay enough~
oh, also, i wrote these on my phone lol