diff --git a/p10/p10.org b/p10/p10.org index 4e2e504..42b5191 100644 --- a/p10/p10.org +++ b/p10/p10.org @@ -2,17 +2,18 @@ Load the file into a list of lines #+begin_src emacs-lisp -(with-temp-buffer - (insert-file-contents "input-test") - (goto-char (point-min)) - (replace-regexp "^" "\"") - (goto-char (point-min)) - (replace-regexp "$" "\"") - (goto-char (point-min)) - (insert "(setq data '(") - (goto-char (point-max)) - (insert "))") - (eval-buffer)) +(require 'dash) + (with-temp-buffer + (insert-file-contents "input") + (goto-char (point-min)) + (replace-regexp "^" "\"") + (goto-char (point-min)) + (replace-regexp "$" "\"") + (goto-char (point-min)) + (insert "(setq data '(") + (goto-char (point-max)) + (insert "))") + (eval-buffer)) #+end_src #+RESULTS: @@ -21,12 +22,12 @@ and split into a list of list of chars #+begin_src emacs-lisp (setq data-heights (-map (lambda (str) (--map (- (string-to-char it) ?0) (split-string str "\\|.+" t))) data) - height (length data-chars) - width (length (car data-chars))) + height (length data-heights) + width (length (car data-heights))) #+end_src #+RESULTS: -: 8 +: 41 #+begin_src emacs-lisp (defun acceptable-p (p) @@ -49,22 +50,225 @@ and split into a list of list of chars this yields the coordinates of the 0s #+begin_src emacs-lisp -(-map #'cadr - (--filter (eq (car it) 0) - (-mapcat #'identity - (-map-indexed (lambda (y l) (-map-indexed (lambda (x el) (list el (list x y))) l)) data-chars)))) + (setq trail-heads (-map #'cadr + (--filter (eq (car it) 0) + (-mapcat #'identity + (-map-indexed (lambda (y l) (-map-indexed (lambda (x el) (list el (list x y))) l)) data-heights))))) #+end_src #+RESULTS: -| 2 | 0 | -| 4 | 0 | -| 4 | 2 | -| 6 | 4 | -| 2 | 5 | -| 5 | 5 | -| 0 | 6 | -| 6 | 6 | -| 1 | 7 | - -(neighbours '(0 1)) -(height '(2 1)) +| 2 | 0 | +| 14 | 0 | +| 17 | 0 | +| 22 | 0 | +| 33 | 0 | +| 35 | 0 | +| 12 | 1 | +| 18 | 1 | +| 32 | 1 | +| 1 | 2 | +| 3 | 2 | +| 35 | 2 | +| 6 | 3 | +| 14 | 3 | +| 19 | 3 | +| 24 | 3 | +| 26 | 3 | +| 37 | 3 | +| 7 | 4 | +| 14 | 4 | +| 20 | 4 | +| 21 | 4 | +| 23 | 4 | +| 28 | 4 | +| 30 | 4 | +| 36 | 4 | +| 38 | 4 | +| 0 | 5 | +| 24 | 5 | +| 29 | 5 | +| 33 | 5 | +| 7 | 6 | +| 9 | 6 | +| 14 | 6 | +| 19 | 6 | +| 25 | 6 | +| 26 | 6 | +| 28 | 6 | +| 38 | 6 | +| 39 | 6 | +| 2 | 7 | +| 6 | 7 | +| 4 | 8 | +| 17 | 8 | +| 27 | 8 | +| 35 | 8 | +| 40 | 8 | +| 8 | 9 | +| 12 | 9 | +| 20 | 9 | +| 39 | 9 | +| 8 | 10 | +| 9 | 10 | +| 27 | 10 | +| 31 | 10 | +| 33 | 10 | +| 0 | 11 | +| 12 | 11 | +| 24 | 11 | +| 39 | 11 | +| 0 | 12 | +| 1 | 12 | +| 4 | 12 | +| 8 | 12 | +| 10 | 12 | +| 13 | 12 | +| 25 | 12 | +| 14 | 13 | +| 22 | 13 | +| 27 | 13 | +| 37 | 13 | +| 10 | 14 | +| 13 | 14 | +| 15 | 14 | +| 33 | 14 | +| 36 | 14 | +| 5 | 15 | +| 17 | 15 | +| 21 | 15 | +| 32 | 15 | +| 16 | 16 | +| 20 | 16 | +| 31 | 16 | +| 38 | 16 | +| 8 | 17 | +| 9 | 17 | +| 19 | 17 | +| 0 | 18 | +| 7 | 18 | +| 17 | 18 | +| 19 | 18 | +| 28 | 18 | +| 34 | 18 | +| 10 | 19 | +| 17 | 19 | +| 23 | 19 | +| 30 | 19 | +| 32 | 19 | +| 33 | 19 | +| 2 | 20 | +| 7 | 20 | +| 13 | 20 | +| 39 | 20 | +| 5 | 21 | +| 6 | 21 | +| 19 | 21 | +| 30 | 21 | +| 0 | 22 | +| 7 | 22 | +| 16 | 22 | +| 22 | 22 | +| 24 | 22 | +| 29 | 22 | +| 30 | 22 | +| 35 | 22 | +| 37 | 22 | +| 12 | 23 | +| 22 | 23 | +| 29 | 23 | +| 32 | 23 | +| 22 | 24 | +| 23 | 24 | +| 38 | 24 | +| 3 | 25 | +| 10 | 25 | +| 21 | 25 | +| 26 | 25 | +| 31 | 25 | +| 36 | 25 | +| 39 | 25 | +| 40 | 26 | +| 6 | 27 | +| 11 | 27 | +| 16 | 27 | +| 23 | 27 | +| 28 | 27 | +| 31 | 27 | +| 33 | 27 | +| 39 | 27 | +| 8 | 28 | +| 18 | 28 | +| 0 | 29 | +| 1 | 29 | +| 3 | 29 | +| 11 | 29 | +| 37 | 29 | +| 2 | 30 | +| 19 | 30 | +| 21 | 30 | +| 31 | 30 | +| 8 | 31 | +| 15 | 31 | +| 26 | 31 | +| 27 | 31 | +| 4 | 32 | +| 5 | 32 | +| 7 | 32 | +| 11 | 32 | +| 12 | 32 | +| 29 | 32 | +| 38 | 32 | +| 13 | 33 | +| 24 | 33 | +| 40 | 33 | +| 5 | 34 | +| 7 | 34 | +| 20 | 34 | +| 32 | 34 | +| 13 | 35 | +| 15 | 35 | +| 21 | 35 | +| 29 | 35 | +| 34 | 35 | +| 37 | 35 | +| 39 | 35 | +| 40 | 35 | +| 26 | 36 | +| 29 | 36 | +| 33 | 36 | +| 39 | 36 | +| 10 | 37 | +| 13 | 37 | +| 15 | 37 | +| 17 | 37 | +| 38 | 37 | +| 1 | 38 | +| 25 | 38 | +| 2 | 39 | +| 39 | 39 | +| 1 | 40 | +| 2 | 40 | +| 4 | 40 | +| 14 | 40 | +| 22 | 40 | +| 23 | 40 | +| 24 | 40 | +#+begin_src emacs-lisp + (defun tails (p h) + (when (eq (height p) h) + (if (eq h 9) (list p) + (--mapcat (tails it (+ 1 h)) (neighbours p))))) + (defun score (p) + (length (-distinct (tails p 0)))) + (defun rating (p) + (length (tails p 0))) + + (-reduce #'+ (-map #'score trail-heads)) + (-reduce #'+ (-map #'rating trail-heads)) +#+end_src + +#+RESULTS: +: 1186 + + +