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