full aoc2
This commit is contained in:
parent
cbe01ffb4b
commit
d23a6524fb
6 changed files with 279 additions and 3 deletions
80
src/aoc2.lisp
Normal file
80
src/aoc2.lisp
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
;; #!/bin/sbcl --script
|
||||
|
||||
(with-open-file (file "aoc2input.txt")
|
||||
(let((result 0) (game 1)
|
||||
(validEntry t)
|
||||
;(firstMatch nil)(lastMatch nil)
|
||||
(lineLen 0)
|
||||
(manipulatedLine "")
|
||||
(showings'())
|
||||
(num "") (color "") (copy "")
|
||||
(max (list (cons "red" 12) (cons "green" 13) (cons "blue" 14) ))
|
||||
)
|
||||
(loop for line = (read-line file nil)
|
||||
while line do
|
||||
(setf lineLen (length line))
|
||||
;(setf manipulatedLine (remove #\: (substitute #\: #\Space (subseq line (position #\: line :test #'equalp) lineLen) ) ))
|
||||
(setf manipulatedLine (subseq line (+ 2 (position #\: line :test #'equalp)) lineLen ))
|
||||
(loop for showing = (if(position #\; manipulatedLine :test #'equalp)
|
||||
(subseq manipulatedLine 0 (position #\; manipulatedLine :test #'equalp))
|
||||
(setf showing ""))
|
||||
until (string= showing "")
|
||||
do
|
||||
(push showing showings)
|
||||
;(print showing)
|
||||
;(if (position #\; manipulatedLine :test #'equalp)
|
||||
(if(position #\; manipulatedLine :test #'equalp)
|
||||
(setf manipulatedLine (subseq manipulatedLine (+ 2 (position #\; manipulatedLine :test #'equalp)) (length manipulatedLine) ))
|
||||
)
|
||||
|
||||
;(setf manipulatedLine "")
|
||||
;(print manipulatedLine)
|
||||
finally
|
||||
(push manipulatedLine showings)
|
||||
(dolist (item showings)
|
||||
(format T "~%\"~a\"" item))
|
||||
)
|
||||
|
||||
(dolist (item showings)
|
||||
(setf copy item)
|
||||
(loop for showing = (if(position #\, copy :test #'equalp)
|
||||
(subseq copy 0 (position #\, copy :test #'equalp))
|
||||
(setf showing ""))
|
||||
until (string= showing "")
|
||||
do
|
||||
(format T "~%~a ~a~%" "Starting loop with:" copy)
|
||||
;(print (subseq copy 0 (position #\, copy :test #'equalp)))
|
||||
;(print showing)
|
||||
(setf num (subseq showing 0 (position #\Space showing :test #'equalp)))
|
||||
(setf color (subseq showing (+ 1 (position #\Space showing :test #'equalp)) (length showing) ))
|
||||
(format T "~a ~a\+~a~%" "Segmentation:" num color)
|
||||
(if (> (parse-integer num) (parse-integer(write-to-string(cdr(find color max :key 'car :test #'equal)))))
|
||||
(setf validEntry nil))
|
||||
(setf copy (subseq copy (+ 2 (position #\, copy :test #'equalp)) (length copy) ))
|
||||
;; (if(position #\, showing :test #'equalp)
|
||||
;; (setf copy (subseq copy (+ 2 (position #\, copy :test #'equalp)) (length copy) ))
|
||||
;; )
|
||||
(format T "~%~a ~a~%" "New copy:" copy)
|
||||
|
||||
|
||||
finally
|
||||
(setf num (subseq copy 0 (position #\Space copy :test #'equalp)))
|
||||
(setf color (subseq copy (+ 1 (position #\Space copy :test #'equalp)) (length copy)))
|
||||
(if (> (parse-integer num) (parse-integer(write-to-string(cdr(find color max :key 'car :test #'equal)))))
|
||||
(setf validEntry nil))
|
||||
(format T "~%~a~a\-~a\-~a~%" "Final:" copy num color)
|
||||
|
||||
)
|
||||
)
|
||||
(format T "~%~a~%" "finit")
|
||||
;(push "finit" showings)
|
||||
(if validEntry
|
||||
(setf result (+ result game)))
|
||||
(incf game)
|
||||
(setf showings '())
|
||||
(setf validEntry t)
|
||||
;(setf manipulatedLine "")
|
||||
)
|
||||
(format T "~%~a ~a~%" "Result:" result)
|
||||
)
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue