Commit | Line | Data |
---|---|---|
37dc4d4e JK |
1 | (in-package #:adventofcode2020) |
2 | ||
3 | (defun tree-collisions (slope tree-map) | |
4 | (destructuring-bind (rise run) slope | |
5 | (loop with terrain-width = (-> tree-map first length) | |
6 | for i upfrom 0 by run | |
7 | for j upfrom 0 | |
8 | for terrain-line in tree-map | |
9 | when (->> rise (mod j) (= 0)) | |
10 | counting (->> terrain-width | |
11 | (mod i) | |
12 | (char terrain-line) | |
13 | (char= #\#))))) | |
14 | ||
15 | (day 03 input | |
16 | (let ((tree-map (list-from input))) | |
17 | (part1 (tree-collisions '(1 3) tree-map)) | |
18 | (part2 (->> '((1 1) (1 3) (1 5) (1 7) (2 1)) | |
19 | (mapcar (fn* (tree-collisions _ tree-map))) | |
20 | (reduce #'*))))) | |
21 | ||
22 | (def-suite day03) | |
23 | (in-suite day03) | |
24 | ||
25 | (test single-collision-check | |
26 | (is (equal | |
27 | 7 | |
28 | (tree-collisions '(1 3) '("..##......." | |
29 | "#...#...#.." | |
30 | ".#....#..#." | |
31 | "..#.#...#.#" | |
32 | ".#...##..#." | |
33 | "..#.##....." | |
34 | ".#.#.#....#" | |
35 | ".#........#" | |
36 | "#.##...#..." | |
37 | "#...##....#" | |
38 | ".#..#...#.#"))))) | |
39 | ||
40 | ||
41 | (test multiple-collision-check | |
42 | (is (equal | |
43 | '(2 7 3 4 2) | |
44 | (mapcar (fn* (tree-collisions _ '("..##......." | |
45 | "#...#...#.." | |
46 | ".#....#..#." | |
47 | "..#.#...#.#" | |
48 | ".#...##..#." | |
49 | "..#.##....." | |
50 | ".#.#.#....#" | |
51 | ".#........#" | |
52 | "#.##...#..." | |
53 | "#...##....#" | |
54 | ".#..#...#.#"))) | |
55 | '((1 1) (1 3) (1 5) (1 7) (2 1)))))) | |
56 | ||
57 | (run! 'day03) |