aoc2025

Advent of Code solutions for 2025 in Common Lisp
Log | Files | Refs | README

01.lisp (963B)


      1 (defun day1-part1 (input-file)
      2 	(with-open-file (s input-file)
      3 		(let ((dial 50)
      4 			  (zeroes 0))
      5 				(do ((line (read-line s nil) (read-line s nil)))
      6 					((equal line nil) zeroes)
      7 					(let* ((n (parse-integer (subseq line 1)))
      8 						  (is-r (equal "R" (subseq line 0 1)))
      9 						  (op (if is-r #'+ #'-)))
     10 						(setf dial (mod (funcall op dial n) 100))
     11 						(if (equal 0 dial)
     12 							(setf zeroes (1+ zeroes))))))))
     13 
     14 ; We'll go for a naive approach early in the game, just count in steps of one and check the zeroes.
     15 (defun day1-part2 (input-file)
     16 	(with-open-file (s input-file)
     17 		(let ((dial 50)
     18 			  (zeroes 0))
     19 				(do ((line (read-line s nil) (read-line s nil)))
     20 					((equal line nil) zeroes)
     21 					(let* ((n (parse-integer (subseq line 1)))
     22 						  (is-r (equal "R" (subseq line 0 1)))
     23 						  (op (if is-r #'+ #'-)))
     24 						(dotimes (i n)
     25 							(setf dial (mod (funcall op dial 1) 100))
     26 							(if (equal 0 dial)
     27 								(setf zeroes (1+ zeroes)))))))))