day 1 first simple task

trying out the loop and reading of the files
This commit is contained in:
efim 2022-12-01 13:48:22 +00:00
parent 48c351c983
commit 0116b13088
2 changed files with 2316 additions and 0 deletions

2251
day1-input.txt Normal file

File diff suppressed because it is too large Load Diff

65
day1.lisp Normal file
View File

@ -0,0 +1,65 @@
(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")