full aoc5-2
This commit is contained in:
parent
243347ce10
commit
7983a35b24
4 changed files with 225 additions and 88 deletions
258
src/aoc5-2.lisp
258
src/aoc5-2.lisp
|
|
@ -1,63 +1,46 @@
|
|||
;; #!/bin/sbcl --script
|
||||
(defun seed-list (seed-string)
|
||||
(let ((temp-string "") (source-parsed nil) (temp-source 0) (temp-range 0) (index 0) (return-list '()))
|
||||
(let ((temp-string "") (return-list '()) (base 0) (base-parsed nil) (range 0))
|
||||
(loop for c across seed-string
|
||||
do
|
||||
(if(char= c #\Space)
|
||||
(cond ((not source-parsed)
|
||||
(setf temp-source (parse-integer temp-string) )
|
||||
(setf temp-string "")
|
||||
(setf source-parsed t))
|
||||
(t (setf temp-range (parse-integer temp-string))
|
||||
(setf temp-string "")
|
||||
;(setf index temp-range)
|
||||
(loop while (< index temp-range)
|
||||
do
|
||||
(push (+ temp-source index) return-list)
|
||||
(incf index)
|
||||
)
|
||||
(setf index 0)
|
||||
(setf source-parsed nil)))
|
||||
(if(not base-parsed)
|
||||
(progn
|
||||
(setf base (parse-integer temp-string))
|
||||
(setf return-list (append return-list (list base) ))
|
||||
(setf base-parsed t)
|
||||
(setf temp-string ""))
|
||||
(progn
|
||||
(setf range (parse-integer temp-string))
|
||||
(setf return-list (append return-list (list (+ base (- range 1)) )))
|
||||
(setf base-parsed nil)
|
||||
(setf temp-string "")))
|
||||
(setf temp-string (format nil "~a~c" temp-string c)))
|
||||
finally
|
||||
(setf temp-range (parse-integer temp-string))
|
||||
(loop while (< index temp-range)
|
||||
do
|
||||
(push (+ temp-source index) return-list)
|
||||
(incf index)))
|
||||
(format T "~%~A" return-list)
|
||||
(setf range (parse-integer temp-string))
|
||||
(setf return-list (append return-list (list (+ base (- range 1)) ))))
|
||||
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))
|
||||
|
||||
(defun parse-file (file
|
||||
|
||||
|
||||
(with-open-file (file "aoc5input.txt")
|
||||
(let( (digit-line nil) (temp-first-line "") (temp-string "") (manipulated-line "") (code '()) (numbers '()) (translated '()))
|
||||
(let( (lowest -1) (digit-line nil) (dest-parsed nil) (temp-first-line "") (range "") (temp-string "")
|
||||
(manipulated-line "") (dest-exploded '()) (source-exploded '()) (yet-to-translate '()) (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)
|
||||
(setf yet-to-translate (seed-list manipulated-line))
|
||||
(print yet-to-translate)
|
||||
(print translated)
|
||||
(print "----")
|
||||
(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))))
|
||||
(print (append yet-to-translate translated))
|
||||
(print "----")
|
||||
(setf yet-to-translate (append yet-to-translate translated))
|
||||
(setf translated '()))
|
||||
(loop for c across line
|
||||
do
|
||||
(if(digit-char-p c)
|
||||
|
|
@ -66,26 +49,183 @@
|
|||
(setf temp-string (format nil "~a~c" temp-string c)))
|
||||
(if digit-line
|
||||
(progn
|
||||
(push (parse-integer temp-string) code)
|
||||
(if dest-parsed
|
||||
(push (parse-integer temp-string) source-exploded)
|
||||
(progn
|
||||
(setf dest-parsed t)
|
||||
(push (parse-integer temp-string) dest-exploded)))
|
||||
(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 "")
|
||||
;;RANGES
|
||||
;;(format T "~%~a" temp-string)
|
||||
;;(print "newline")
|
||||
(setf range (parse-integer temp-string))
|
||||
(setf source-exploded (append source-exploded (list (+ (first source-exploded) (- range 1)))))
|
||||
(setf dest-exploded (append dest-exploded (list (+ (first dest-exploded) (- range 1)))))
|
||||
;;DANGER ZONE
|
||||
(let( (unqualified '() ) (done '()) (source-base (nth 0 source-exploded)) (source-end (nth 1 source-exploded))
|
||||
(dest-base (nth 0 dest-exploded)) (dest-end (nth 1 dest-exploded)) (len (list-length yet-to-translate)) )
|
||||
(loop with index = 0
|
||||
with current-base = 0
|
||||
with current-end = 0
|
||||
while (< index len)
|
||||
do
|
||||
(setf current-base (nth index yet-to-translate))
|
||||
(setf current-end (nth (+ index 1) yet-to-translate))
|
||||
;;(format T "~%~a ~a ~a ~a" "Current base:" current-base "Current end:" current-end)
|
||||
;;(format T "~%~a ~a ~a ~a" "Source base: " source-base "Source end: " source-end)
|
||||
;;(format T "~%~a ~a ~a ~a" "Dest base: " dest-base "Dest end: " dest-end)
|
||||
(if(or(and(<= current-base source-end) (>= current-base source-base)) (and(>= current-end source-base) (<= current-end source-end))
|
||||
(and(<= source-end current-end) (>= source-base current-base)) )
|
||||
(progn
|
||||
;;(print "based")
|
||||
(if (> current-end source-end)
|
||||
(progn
|
||||
(setf unqualified (append unqualified (list (+ source-end 1) current-end)))
|
||||
(setf done (append done (list dest-end ))))
|
||||
(setf done (append done (list (- dest-end (- source-end current-end))) )))
|
||||
(if (< current-base source-base)
|
||||
(progn
|
||||
(setf unqualified (append unqualified (list current-base (- source-base 1) )))
|
||||
(push dest-base done))
|
||||
(push (+ dest-base (- current-base source-base)) done))
|
||||
;;(format T "~%~a ~A" "Done:" done)
|
||||
(setf translated (append translated done))
|
||||
(setf done '()))
|
||||
(progn
|
||||
;;(print "unbased")
|
||||
(setf unqualified (append unqualified (list current-base current-end) ))))
|
||||
;;(format T "~%~a ~A ~a ~A" "Run unqualified:" unqualified "Translated:" translated)
|
||||
(setf index (+ index 2)))
|
||||
(setf yet-to-translate unqualified) )
|
||||
;;CLEANUP
|
||||
;;(format T "~%~a ~A" "SE:" source-exploded)
|
||||
;;(format T "~%~a ~A" "DE:" dest-exploded)
|
||||
;;(format T "~%~a ~A ~a ~A" "Translated:" translated "Yet to translate:" yet-to-translate)
|
||||
(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))))
|
||||
(setf dest-parsed nil)
|
||||
(setf temp-string "")
|
||||
(setf source-exploded '())
|
||||
(setf dest-exploded '()) )
|
||||
))
|
||||
|
||||
(format T "~%~a ~A" "final: " (append yet-to-translate translated))
|
||||
(print (list-length (append yet-to-translate translated)))
|
||||
(dolist (item (append yet-to-translate translated))
|
||||
(when (or (= lowest -1) (< item lowest))
|
||||
(setf lowest item)))
|
||||
(print lowest)))
|
||||
|
||||
|
||||
|
||||
|
||||
;; ;; #!/bin/sbcl --script
|
||||
;; (defun seed-list (seed-string file-content)
|
||||
;; (let ((temp-string "") (lowest -1) (base 0) (base-parsed nil) (range 0))
|
||||
;; (loop for c across seed-string
|
||||
;; do
|
||||
;; (if(char= c #\Space)
|
||||
;; (if(not base-parsed)
|
||||
;; (progn
|
||||
;; (setf base (parse-integer temp-string))
|
||||
;; (setf base-parsed t)
|
||||
;; (setf temp-string ""))
|
||||
;; (progn
|
||||
;; (setf range (parse-integer temp-string))
|
||||
;; (loop with current-index = 0
|
||||
;; with return-value = 0
|
||||
;; while (< current-index range)
|
||||
;; do
|
||||
;; (format T "~%~a ~d" "FS:" (+ base current-index))
|
||||
;; (setf return-value (transform-value (+ base current-index) file-content))
|
||||
;; ;(format T "~%~a ~d-~d-~d-~d ~a ~d" "Seed-List:" base range current-index (+ base current-index) "Retval:" return-value)
|
||||
;; (if (equalp -1 lowest)
|
||||
;; (setf lowest return-value)
|
||||
;; (when(< return-value lowest)
|
||||
;; (setf lowest return-value)))
|
||||
;; (incf current-index))
|
||||
;; (setf base-parsed nil)
|
||||
;; (setf temp-string "")))
|
||||
;; (setf temp-string (format nil "~a~c" temp-string c)))
|
||||
;; finally
|
||||
;; (setf range (parse-integer temp-string))
|
||||
;; (loop with current-index = 0
|
||||
;; with return-value = 0
|
||||
;; while (< current-index range)
|
||||
;; do
|
||||
;; (format T "~%~a ~d ~a ~d" "FS:" (+ base current-index) "Index:" current-index)
|
||||
;; (setf return-value (transform-value (+ base current-index) file-content))
|
||||
;; ;(format T "~%~a ~d-~d-~d-~d ~a ~d" "Seed-List:" base range current-index (+ base current-index) "Retval:" return-value)
|
||||
;; (if (equalp lowest -1)
|
||||
;; (setf lowest return-value)
|
||||
;; (when(< return-value lowest)
|
||||
;; (setf lowest return-value)))
|
||||
;; (incf current-index))
|
||||
;; )
|
||||
;; lowest))
|
||||
|
||||
;; (defun transform-value (seed file-content)
|
||||
;; (let( (digit-line nil) (stream "") (final-seed 0) (temp-string "") (code '()) (translated nil))
|
||||
;; (setf final-seed seed)
|
||||
;; (setf stream (make-string-input-stream file-content))
|
||||
;; (loop for line = (read-line stream nil)
|
||||
;; while line
|
||||
;; do
|
||||
;; ;(print line)
|
||||
;; (when (equalp 0 (length line))
|
||||
;; (setf translated nil))
|
||||
;; (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)
|
||||
|
||||
;; (when (not translated)
|
||||
;; (let( (temp-translate 0) )
|
||||
;; (setf temp-translate (parse-map final-seed (nth 1 code) (nth 0 (last code)) (first code)))
|
||||
;; ;(format T "~%~a ~d" "Translated to:" final-seed)
|
||||
;; (when(not(equalp temp-translate final-seed))
|
||||
;; (setf final-seed temp-translate)
|
||||
;; (setf translated t))))
|
||||
|
||||
;; (setf temp-string "")
|
||||
;; (setf digit-line nil)
|
||||
;; (setf code '())) )
|
||||
|
||||
;; )
|
||||
;; final-seed))
|
||||
|
||||
;; (defun parse-map (seed source dest range)
|
||||
;; ;(format T "~%~a ~d-~d-~d-~d" "Parse-map:" seed source dest range)
|
||||
;; (if(and(>= seed source) (<= seed (+ source range)))
|
||||
;; (progn
|
||||
;; (+ dest (- seed source)))
|
||||
;; seed))
|
||||
|
||||
;; (with-open-file (file "aoc5input.txt")
|
||||
;; (let( (file-content "") (manipulated-line "") )
|
||||
;; ;;Prep work
|
||||
;; (setf file-content (read-line file nil))
|
||||
;; (setf manipulated-line (subseq file-content (+ 2 (position #\: file-content :test #'equalp)) (length file-content) ))
|
||||
;; (setf file-content "")
|
||||
;; (read-line file nil)
|
||||
|
||||
;; (loop for line = (read-line file nil)
|
||||
;; while line
|
||||
;; do
|
||||
;; (if(not(string= file-content ""))
|
||||
;; (setf file-content (format nil "~a~%" file-content)))
|
||||
;; (setf file-content (format nil "~a~a" file-content line))
|
||||
;; )
|
||||
;; ;(print manipulated-line)
|
||||
;; (print (seed-list manipulated-line file-content)) ))
|
||||
|
|
|
|||
|
|
@ -25,7 +25,6 @@
|
|||
|
||||
(with-open-file (file "aoc6input.txt")
|
||||
(let( (file-lines '()) (time-list '()) (distance-list '()) (result 1) )
|
||||
|
||||
(loop for line = (read-line file nil)
|
||||
while line
|
||||
do
|
||||
|
|
@ -39,7 +38,5 @@
|
|||
do
|
||||
;(print (num-ways-to-win (nth index time-list) (nth index distance-list)))
|
||||
(setf result (* result (num-ways-to-win (nth index time-list) (nth index distance-list))))
|
||||
(incf index)
|
||||
)
|
||||
(print result)
|
||||
))
|
||||
(incf index))
|
||||
(print result)))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue