X-Git-Url: http://git.jkinsey.net/?p=adventofcode2020.git;a=blobdiff_plain;f=src%2Futilities.lisp;h=ce9aa6d39ce67b27c0608dda35c3adf23e5e18b9;hp=c677e964c2cda5fd874d39b7c06b09586a0013c7;hb=HEAD;hpb=3ef62a9d5cf95c218e80455021e69d3bf5bf1541 diff --git a/src/utilities.lisp b/src/utilities.lisp index c677e96..ce9aa6d 100644 --- a/src/utilities.lisp +++ b/src/utilities.lisp @@ -6,4 +6,43 @@ (split "\\n" str)) (defun int-list-from (str) - (mapcar #'parse-integer (split "\\n" str))) + (mapcar #'parse-integer (list-from str))) + +(defun list-list-from (str) + (split-sequence "" (list-from str) :test #'string=)) + +(defun cartesian-product (A B &rest C) + (let ((helper (lambda (X Y) + (if Y (loop for x in X + nconc (loop for y in Y + collecting (append x (list y)))) + X))) + (wrap-A (mapcar #'list A))) + (reduce helper C :initial-value (funcall helper wrap-A B)))) + +(defun manhattan-distance (a b) + (destructuring-bind ((ax ay) (bx by)) (list a b) + (+ (abs (- ax bx)) + (abs (- ay by))))) + +(def-suite util) +(in-suite util) + +(test cart-prod-2 + (is (equal + '((a a) (a b) (b a) (b b)) + (cartesian-product '(a b) '(a b))))) + +(test cart-prod-3 + (is (equal + '((a a a) (a a b) (a b a) (a b b) + (b a a) (b a b) (b b a) (b b b)) + (cartesian-product '(a b) '(a b) '(a b))))) + +(test cart-prod-4 + (is (equal + '((a a a a) (a a a b) (a a b a) (a a b b) (a b a a) (a b a b) (a b b a) (a b b b) + (b a a a) (b a a b) (b a b a) (b a b b) (b b a a) (b b a b) (b b b a) (b b b b)) + (cartesian-product '(a b) '(a b) '(a b) '(a b))))) + +