You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1.7 KiB

Solution to p7

Yay, another 2D problem

  (with-temp-buffer
    (insert-file-contents "input")
    (advent/replace-multiple-regex-buffer
     '(("^\\(.*\\)$" . "\"\\1\" ")))
    (goto-char (point-min))
    (insert "(setq data '(")
    (goto-char (point-max))
    (insert "))")
    (eval-buffer))

  (setq data-char (-map #'advent/split-string-into-char-list data)
        width (length (car data-char))
        height (length data-char))

This is for part 1;



    (defun position-valid-p (pos)
      (and (and (>= (car pos) 0) (< (car pos) width))
           (and (>= (cadr pos) 0) (< (cadr pos) height))))

  (advent/char-at '(-1 0) data-char)

  (defun tachyon-step (el)
    (if (not (position-valid-p el)) (list el)
      (let ((down (advent/neighbour el '(0 1))))
        (if (or (not (position-valid-p down))
  	      (not (eq ?^ (advent/char-at down data-char))))
  	  (list down)
  	(push down splits)
  	(--map (advent/neighbour el it) '((-1 0) (1 0)))))))
  (setq tachyons (advent/coordinates-of ?S data-char))
  (setq splits nil)
  (length (--fix (-distinct (-mapcat 'tachyon-step it)) tachyons))
  (length (-distinct splits))
1507
  (defun tachyon-step-freq (el)
      (--map (cons it (cdr el)) (tachyon-step (car el))))

  (setq tachyons (cons (car (advent/coordinates-of ?S data-char)) 1))

  (defun compress (li)
    (--map (cons it (-sum (-map #'cdr (-filter (lambda (x) (equal it (car x))) li)))) (-distinct (-map #'car li))))

  (-sum (-map #'cdr (--fix (compress (-mapcat 'tachyon-step-freq it)) (list tachyons))))
1537373473728