--- /dev/null
+(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)