diff options
| author | Syndamia <kamen@syndamia.com> | 2022-12-08 16:08:58 +0200 |
|---|---|---|
| committer | Syndamia <kamen@syndamia.com> | 2022-12-08 16:08:58 +0200 |
| commit | 46b53fcf72f28d8a7bbbbd9d347232efa6c4de64 (patch) | |
| tree | 59e41edd2df80167e62910d1341953c6779ab15c /2022/Day08/part-two.cl | |
| parent | f63f48184eda1ea426e702f2288c2e02f7584323 (diff) | |
| download | advent-of-code-46b53fcf72f28d8a7bbbbd9d347232efa6c4de64.tar advent-of-code-46b53fcf72f28d8a7bbbbd9d347232efa6c4de64.tar.gz advent-of-code-46b53fcf72f28d8a7bbbbd9d347232efa6c4de64.zip | |
[2022/D08] Solved both tasks from today
Diffstat (limited to '2022/Day08/part-two.cl')
| -rw-r--r-- | 2022/Day08/part-two.cl | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/2022/Day08/part-two.cl b/2022/Day08/part-two.cl new file mode 100644 index 0000000..f20ffe5 --- /dev/null +++ b/2022/Day08/part-two.cl @@ -0,0 +1,51 @@ + +;;; https://gitlab.com/Syndamia/senzill +(require :senzill) +(use-package :senzill.math) +(use-package :senzill.collections) +(use-package :senzill.io) + +(ask-for-stream (prog-input) + (let ((forest '())) + (doread-lines (inpt :read-line-options (prog-input NIL)) + (push-back (map 'list + (lambda (x) (cons x 1)) ; Each tree is a (cons) pair of (<TREE_HEIGHT> . <SCENIC_SCORE>) + (integer-to-list (parse-integer inpt) + :min-length (length (first forest)))) ; Doesn't handle if very first digit(s) is zero + forest)) + + (defun loop-on-row (row) + (loop for col on row + maximize (car (first col)) into max-height + while (cdr col) + do + (*= (cdr (first col)) + ;;; Counts seen trees on the right of the current tree + (loop for seen on (cdr col) + count T into result + while (and col (> (car (first col)) (car (first seen)))) + finally (return result))) + finally (setf (cdr (first col)) 0))) ; Last tree doesn't see any trees + + ;;; Checks every row + (loop for row in forest + do + ;; Iterate from left to right + (loop-on-row row) + ;; Iterate from right to left + (loop-on-row (reverse row))) + + ;;; Checks every column + (loop for i from 0 to (- (length (first forest)) 1) + for col = (loop for row in forest + collect (nth i row)) + do + ;; Iterate top to bottom + (loop-on-row col) + ;; Iterate bottom to top + (loop-on-row (reverse col))) + + (loop for row in forest + maximize (loop for tree in row + maximize (cdr tree)) into result + finally (print result)))) |
