(list 1 2 3) ;;; input - one number per line, different intentories separated by empty new line ;; need to find what - how much does have the intventory with maximal sum ;; so, do i have a function that takes in one string? ;; i guess it would be better to read input from the separate file ;; would also probably be better to read file line a time (defvar current-sum 0) (defvar current-max -1) (with-open-file (in "day1-input.txt") (loop for line = (read-line in nil nil) while line ;; (if (eq line = "") (print "got empty line")) ;; collect line ;; do (format t "got line ~A~%" line) ;;; yay, this is somewhat what i want ;; if (string-equal line "") do (format t "got empty line ~A~% in if" line) ;; else do (format t "else branch for nonempty line ~A~%" line) if (string-equal line "") do (progn ;; current inventory ended, ;; check whether it's new max and null accum (if (< current-max current-sum) (setq current-max current-sum) ) (setq current-sum 0)) else do (setq current-sum (+ current-sum (parse-integer line))) )) current-max ; i got a right answer ;; yay, now i can write a stateful function that gets one line at a time ;; ;; what i could probably do is have ;; if clauses directly in the loop ;; and additional variables defined and updated in the loop as well (setq my-int (parse-integer "10497")) my-int ;; let's wrap this into single function, i suppose (defun calc-max-inventory-calories (filename) (setq current-sum 0) (setq current-max -1) (with-open-file (in filename) (loop for line = (read-line in nil nil) while line if (string-equal line "") do (progn ;; current inventory ended, ;; check whether it's new max and null accum (if (< current-max current-sum) (setq current-max current-sum) ) (setq current-sum 0)) else do (setq current-sum (+ current-sum (parse-integer line))) )) current-max) ;; (in "day1-input.txt") (calc-max-inventory-calories "day1-input.txt")