;; #!/bin/sbcl --script (defun seed-list (seed-string) (let ((temp-string "") (return-list '())) (loop for c across seed-string do (if(char= c #\Space) (progn (push (parse-integer temp-string) return-list) (setf temp-string "")) (setf temp-string (format nil "~a~c" temp-string c))) finally (push (parse-integer temp-string) return-list)) return-list)) (defun parse-map (seed source dest range) (format T "~%~d-~d-~d-~d" seed source dest range) (if(and(>= seed source) (<= seed (+ source range))) (progn (+ dest (- seed source))) seed)) (with-open-file (file "aoc5input.txt") (let( (digit-line nil) (temp-first-line "") (temp-string "") (manipulated-line "") (code '()) (numbers '()) (translated '())) ;;Prep work (setf temp-first-line (read-line file nil)) (setf manipulated-line (subseq temp-first-line (+ 2 (position #\: temp-first-line :test #'equalp)) (length temp-first-line) )) (setf numbers (seed-list manipulated-line)) (dolist (item numbers) (push nil translated)) (print numbers) (print translated) (read-line file nil) (loop for line = (read-line file nil) while line do (when (equalp 0 (length line)) (let((current-index 0)) (print "hola") (dolist (item translated) (setf (nth current-index translated) nil) (incf current-index)))) (loop for c across line do (if(digit-char-p c) (progn (setf digit-line t) (setf temp-string (format nil "~a~c" temp-string c))) (if digit-line (progn (push (parse-integer temp-string) code) (setf temp-string "")))) finally (when digit-line (push (parse-integer temp-string) code) (print code) (let((current-index 0) (translation 0)) (dolist (item numbers) (when (not (nth current-index translated)) (setf translation (parse-map item (nth 1 code) (nth 0 (last code)) (first code))) (when (not (equal item translation)) (setf (nth current-index translated) t) (setf (nth current-index numbers) translation) (setf translation 0))) (incf current-index))) (setf temp-string "") (setf digit-line nil) (setf code '())) )) (format T "~%~a ~A" "Result: " numbers) (let( (lowest (first numbers))) (dolist (item numbers) (when (< item lowest) (setf lowest item))) (print lowest))))