X-Git-Url: http://git.jkinsey.net/?p=adventofcode2020.git;a=blobdiff_plain;f=src%2Fday03.lisp;fp=src%2Fday03.lisp;h=6cd0743ad8fd8c78e66002019a4d06dea1ebcc07;hp=0000000000000000000000000000000000000000;hb=37dc4d4e793d79845b35147d59401b7f3cbc5898;hpb=e69214f6f0191786d2e782af3f79831b44bb5178 diff --git a/src/day03.lisp b/src/day03.lisp new file mode 100644 index 0000000..6cd0743 --- /dev/null +++ b/src/day03.lisp @@ -0,0 +1,57 @@ +(in-package #:adventofcode2020) + +(defun tree-collisions (slope tree-map) + (destructuring-bind (rise run) slope + (loop with terrain-width = (-> tree-map first length) + for i upfrom 0 by run + for j upfrom 0 + for terrain-line in tree-map + when (->> rise (mod j) (= 0)) + counting (->> terrain-width + (mod i) + (char terrain-line) + (char= #\#))))) + +(day 03 input + (let ((tree-map (list-from input))) + (part1 (tree-collisions '(1 3) tree-map)) + (part2 (->> '((1 1) (1 3) (1 5) (1 7) (2 1)) + (mapcar (fn* (tree-collisions _ tree-map))) + (reduce #'*))))) + +(def-suite day03) +(in-suite day03) + +(test single-collision-check + (is (equal + 7 + (tree-collisions '(1 3) '("..##......." + "#...#...#.." + ".#....#..#." + "..#.#...#.#" + ".#...##..#." + "..#.##....." + ".#.#.#....#" + ".#........#" + "#.##...#..." + "#...##....#" + ".#..#...#.#"))))) + + +(test multiple-collision-check + (is (equal + '(2 7 3 4 2) + (mapcar (fn* (tree-collisions _ '("..##......." + "#...#...#.." + ".#....#..#." + "..#.#...#.#" + ".#...##..#." + "..#.##....." + ".#.#.#....#" + ".#........#" + "#.##...#..." + "#...##....#" + ".#..#...#.#"))) + '((1 1) (1 3) (1 5) (1 7) (2 1)))))) + +(run! 'day03)