;;03:39 ;;04:07 Solved ;;05:24 Painful refactorins (ql:quickload '(fiveam arrows transducers)) (defparameter eg-input "0 3 6 9 12 15 1 3 6 10 15 21 10 13 16 21 30 45") (defun row-reducer (row) (mapcar #'- (cdr row) row)) (defun terminal-p (row) (every #'= (cdr row) row)) (defun get-coefs (row &optional (acc 0)) (if (terminal-p row) (+ (car (last row)) acc) (get-coefs (row-reducer row) (+ (car (last row)) acc)))) (defun parse-line (line) (mapcar #'parse-integer (uiop:split-string line))) (defun solver (lines order) (reduce #'+ lines :key (alexandria:compose #'get-coefs order #'parse-line))) (fiveam:test solutions (fiveam:is (= 114 (solver (uiop:split-string eg-input :separator '(#\Newline)) #'identity))) (fiveam:is (= 2105961943 (solver (uiop:read-file-lines "input") #'identity))) (fiveam:is (= 2 (solver (uiop:split-string eg-input :separator '(#\Newline)) #'nreverse))) (fiveam:is (= 1019 (solver (uiop:read-file-lines "input") #'nreverse))))