(ql:quickload '(fiveam uiop)) (defun distance-1 (a b) (apply #'+ (mapcar (lambda (e1 e2) (abs (- e1 e2))) a b))) (defun surface (cubes) (loop for a in cubes sum (- 6 (loop for b in cubes count (= 1 (distance-1 a b)))))) (defun parse-coords (filename) (mapcar (lambda (l) (mapcar #'parse-integer (uiop:split-string l :separator ","))) (uiop:read-file-lines filename))) (fiveam:test solutions (fiveam:is (= 64 (surface (parse-coords "eg-in")))) (fiveam:is (= 4474 (surface (parse-coords "input")))))