;; Advent of Code 2019 - Day 1
(require 'dash)

;; Puzzle 1:

(defvar day-1/input
  '(83285 96868 121640 51455 128067 128390 141809 52325 68310 140707 124520 149678
          87961 52040 133133 52203 117483 85643 84414 86558 65402 122692 88565 61895
          126271 128802 140363 109764 53600 114391 98973 124467 99574 69140 144856
          56809 149944 138738 128823 82776 77557 51994 74322 64716 114506 124074
          73096 97066 96731 149307 135626 121413 69575 98581 50570 60754 94843 72165
          146504 53290 63491 50936 79644 119081 70218 85849 133228 114550 131943
          67288 68499 80512 148872 99264 119723 68295 90348 146534 52661 99146 95993
          130363 78956 126736 82065 77227 129950 97946 132345 107137 79623 148477
          88928 118911 75277 97162 80664 149742 88983 74518))

(defun calculate-fuel (mass)
  (- (/ mass 3) 2))

(message "Solution to day1/1: %d" (apply #'+ (-map #'calculate-fuel day-1/input)))

;; Puzzle 2:
(defun calculate-recursive-fuel (mass)
  (let ((fuel (calculate-fuel mass)))
    (if (< fuel 0) 0
      (+ fuel (calculate-recursive-fuel fuel)))))

(message "Solution to day1/2: %d" (apply #'+ (-map #'calculate-recursive-fuel day-1/input)))