Add day 01
[adventofcode2020.git] / src / day01.lisp
diff --git a/src/day01.lisp b/src/day01.lisp
new file mode 100644 (file)
index 0000000..adb36e6
--- /dev/null
@@ -0,0 +1,29 @@
+(in-package #:adventofcode2020)
+
+(defun calculate-expenses (&rest reports)
+  (let ((prod (apply #'cartesian-product reports)))
+    (loop for tuple in prod
+          when (= (apply #'+ tuple) 2020)
+          return (apply #'* tuple))))
+
+(day 01 input
+  (let ((report (int-list-from input)))
+    (part1 (calculate-expenses report report))
+    (part2 (calculate-expenses report report report))))
+
+(def-suite day01)
+(in-suite day01)
+
+(test simple-expenses
+  (is (equal
+        514579
+        (let ((report '(1721 979 366 299 675 1456)))
+          (calculate-expenses report report)))))
+
+(test complex-expenses
+  (is (equal
+        241861950
+        (let ((report '(1721 979 366 299 675 1456)))
+          (calculate-expenses report report report)))))
+
+(run! 'day01)