Compare commits

...

5 commits

Author SHA1 Message Date
0360704f69 wip 10-2 2024-01-07 17:55:43 +01:00
e59c30eb53 aoc10-1 2024-01-07 17:55:43 +01:00
cebe6b645f full aoc11 2024-01-07 17:55:43 +01:00
78baf9a52d full aoc8 2024-01-07 17:55:38 +01:00
7983a35b24 full aoc5-2 2024-01-07 17:55:32 +01:00
16 changed files with 2121 additions and 88 deletions

194
src/aoc10-2.lisp Normal file
View file

@ -0,0 +1,194 @@
(defun locate-starting-pos (string line-number)
(loop with starting-pos = nil
for c across string
for char-position from 0
do
(when (char= c #\S)
(setf starting-pos (cons char-position line-number)))
finally
(return starting-pos)))
(defun input-parsing (path)
(with-open-file (file path)
(let( (starting-pos nil) (line-length 0)
(node-array nil) (input-array (make-array 0 :adjustable t)) )
(loop with initial-line = (read-line file nil)
initially
;;(print initial-line)
(setf line-length (length initial-line))
(let( (size (+ 1 (length input-array))) )
(adjust-array input-array size) (decf size)
(setf (aref input-array size) (format nil "~a" initial-line)))
;;(setf input-string (format nil "~a~a" input-string line))
(setf starting-pos (locate-starting-pos initial-line 0))
for line = (read-line file nil)
for line-count from 1
while line
do
;;(print line)
;;(setf input-string (format nil "~a~a" input-string line))
(let( (size (+ 1 (length input-array))) )
(adjust-array input-array size) (decf size)
(setf (aref input-array size) (format nil "~a" line)))
(when (not starting-pos)
(setf starting-pos (locate-starting-pos line line-count)))
;;(setf node-array (make-array '(line-length line-count) :initial-element nil))
finally
(print line-length)
(print line-count)
(setf node-array (make-array (list line-count line-length) :initial-element nil))
(setf (aref node-array (cdr starting-pos) (car starting-pos)) t)
(return (values input-array node-array starting-pos))
))))
(defun determine-paths (input-array starting-pos)
(let ( (current-char nil) (paths-list (list 0 0 0 0)))
;;N
(when (not (equal (cdr starting-pos) 0))
(setf current-char (char (aref input-array (- (cdr starting-pos) 1)) (car starting-pos)))
(when (equal (nth 2 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 0 paths-list) 1)))
;;W
(when (not (equal (car starting-pos) 0))
(setf current-char (char (aref input-array (cdr starting-pos)) (- (car starting-pos) 1)))
(when (equal (nth 3 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 1 paths-list) 1)))
;;S
(when (not (equal (cdr starting-pos) (- (array-dimension input-array 0) 1)))
(setf current-char (char (aref input-array (+ (cdr starting-pos) 1)) (car starting-pos)))
(when (equal (nth 0 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 2 paths-list) 1)))
;;E
(when (not (equal (car starting-pos) (- (length (aref input-array 0)) 1)))
(setf current-char (char (aref input-array (cdr starting-pos)) (+ (car starting-pos) 1)))
(when (equal (nth 1 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 3 paths-list) 1)))
paths-list
))
(defun paths-list-to-starting-coords (paths-list starting-pos)
(loop for item in paths-list
for item-count from 0
with first-position = nil
with second-position = nil
while item
do
(when (not (zerop item))
(cond ((equal item-count 0) (setf first-position
(cons (car starting-pos) (- (cdr starting-pos) 1))))
((equal item-count 1) (if (not first-position)
(setf first-position
(cons (- (car starting-pos) 1) (cdr starting-pos) ))
(setf second-position
(cons (- (car starting-pos) 1) (cdr starting-pos) ))))
((equal item-count 2) (if (not first-position)
(setf first-position
(cons (car starting-pos) (+ (cdr starting-pos) 1)) )
(setf second-position
(cons (car starting-pos) (+ (cdr starting-pos) 1)) )))
(t (setf second-position
(cons (+ (car starting-pos) 1) (cdr starting-pos) )))))
finally
;;(print first-position)
;;(print second-position)
(return (values first-position second-position))))
(defun calculate-next-move (current-char current-position previous-position)
(let( (east-choice (cons (+ (car current-position) 1) (cdr current-position)))
(south-choice (cons (car current-position) (+ (cdr current-position) 1)))
(west-choice (cons (- (car current-position) 1) (cdr current-position)))
(north-choice (cons (car current-position) (- (cdr current-position) 1))) )
(format T "~%~a ~A~A" "nexmove from:" current-position previous-position)
;;(print current-position)
;;(print (car current-position))
;;(print north-choice)
;;(print west-choice)
(cond ((char= #\| current-char) (if (equal north-choice previous-position)
south-choice
north-choice))
((char= #\- current-char) (if (equal east-choice previous-position)
west-choice
east-choice))
((char= #\L current-char) (if (equal north-choice previous-position)
east-choice
north-choice))
((char= #\J current-char) (if (equal north-choice previous-position)
west-choice
north-choice))
((char= #\7 current-char) (if (equal south-choice previous-position)
west-choice
south-choice))
((char= #\F current-char) (if (equal south-choice previous-position)
east-choice
south-choice)))))
(defun steps-to-farthest-point (input-array node-array paths-list starting-pos)
;; (print "---")
(let( (circle-closed nil) (current-coords (list)) (previous-coords (list starting-pos starting-pos)))
(multiple-value-bind (first-position second-position)
(paths-list-to-starting-coords paths-list starting-pos)
(push first-position current-coords)
(push second-position current-coords)
(setf (aref node-array (cdr first-position) (car first-position)) t)
(setf (aref node-array (cdr second-position) (car second-position)) t)
;;(print node-array)
(print "----we gamin")
;;(print current-coords)
;;(print (calculate-next-move
(loop for steps from 1
while (not circle-closed)
do
(loop with current-char = nil
with temp-coords = nil
for index from 0
while (< index 2)
do
(setf current-char
(char (aref input-array (cdr (nth index current-coords)))
(car (nth index current-coords))) )
;;(print current-char)
;;(print
(setf temp-coords (calculate-next-move current-char (nth index current-coords)
(nth index previous-coords)))
(setf (nth index previous-coords) (nth index current-coords))
(setf (nth index current-coords) temp-coords)
(if (not (aref node-array (cdr (nth index current-coords))
(car (nth index current-coords))))
(setf (aref node-array (cdr (nth index current-coords))
(car (nth index current-coords)))t)
(setf circle-closed t))
;;(print node-array)
;;(print current-coords)
)
finally
(print "--")
(print node-array)
(print steps)
)
;;(format T "~%~A~A" first-position second-position)
)))
;; (let( (input-array nil) (node-array nil) )
(defparameter *starting-orientation-hash* (make-hash-table :test #'equalp :size 7))
;;N-w-S-E
(setf (gethash #\| *starting-orientation-hash*) '(1 0 1 0))
(setf (gethash #\- *starting-orientation-hash*) '(0 1 0 1))
(setf (gethash #\L *starting-orientation-hash*) '(1 0 0 1))
(setf (gethash #\J *starting-orientation-hash*) '(1 1 0 0))
(setf (gethash #\7 *starting-orientation-hash*) '(0 1 1 0))
(setf (gethash #\F *starting-orientation-hash*) '(0 0 1 1))
(setf (gethash #\. *starting-orientation-hash*) '(0 0 0 0))
;;(print (gethash #\| *starting-orientation-hash*))
;;(multiple-value-bind (input-array node-array starting-pos) (input-parsing "aoc10test.txt") (format T "~%~A~%~A~%~A~A" input-array node-array starting-pos (determine-paths input-array starting-pos)))
(multiple-value-bind (input-array node-array starting-pos) (input-parsing "aoc10test.txt")
(format T "~%~A~%~A~%~A~%~A~%~a~%" input-array node-array starting-pos (determine-paths input-array starting-pos) "-----") (steps-to-farthest-point input-array node-array (determine-paths input-array starting-pos) starting-pos))
;;)

192
src/aoc10.lisp Normal file
View file

@ -0,0 +1,192 @@
(defun locate-starting-pos (string line-number)
(loop with starting-pos = nil
for c across string
for char-position from 0
do
(when (char= c #\S)
(setf starting-pos (cons char-position line-number)))
finally
(return starting-pos)))
(defun input-parsing (path)
(with-open-file (file path)
(let( (starting-pos nil) (line-length 0)
(node-array nil) (input-array (make-array 0 :adjustable t)) )
(loop with initial-line = (read-line file nil)
initially
;;(print initial-line)
(setf line-length (length initial-line))
(let( (size (+ 1 (length input-array))) )
(adjust-array input-array size) (decf size)
(setf (aref input-array size) (format nil "~a" initial-line)))
;;(setf input-string (format nil "~a~a" input-string line))
(setf starting-pos (locate-starting-pos initial-line 0))
for line = (read-line file nil)
for line-count from 1
while line
do
;;(print line)
;;(setf input-string (format nil "~a~a" input-string line))
(let( (size (+ 1 (length input-array))) )
(adjust-array input-array size) (decf size)
(setf (aref input-array size) (format nil "~a" line)))
(when (not starting-pos)
(setf starting-pos (locate-starting-pos line line-count)))
;;(setf node-array (make-array '(line-length line-count) :initial-element nil))
finally
;;(print line-length)
;;(print line-count)
(setf node-array (make-array (list line-count line-length) :initial-element nil))
(setf (aref node-array (cdr starting-pos) (car starting-pos)) t)
(return (values input-array node-array starting-pos))
))))
(defun determine-paths (input-array starting-pos)
(let ( (current-char nil) (paths-list (list 0 0 0 0)))
;;N
(when (not (equal (cdr starting-pos) 0))
(setf current-char (char (aref input-array (- (cdr starting-pos) 1)) (car starting-pos)))
(when (equal (nth 2 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 0 paths-list) 1)))
;;W
(when (not (equal (car starting-pos) 0))
(setf current-char (char (aref input-array (cdr starting-pos)) (- (car starting-pos) 1)))
(when (equal (nth 3 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 1 paths-list) 1)))
;;S
(when (not (equal (cdr starting-pos) (- (array-dimension input-array 0) 1)))
(setf current-char (char (aref input-array (+ (cdr starting-pos) 1)) (car starting-pos)))
(when (equal (nth 0 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 2 paths-list) 1)))
;;E
(when (not (equal (car starting-pos) (- (length (aref input-array 0)) 1)))
(setf current-char (char (aref input-array (cdr starting-pos)) (+ (car starting-pos) 1)))
(when (equal (nth 1 (gethash current-char *starting-orientation-hash*)) 1)
(setf (nth 3 paths-list) 1)))
paths-list
))
(defun paths-list-to-starting-coords (paths-list starting-pos)
(loop for item in paths-list
for item-count from 0
with first-position = nil
with second-position = nil
while item
do
(when (not (zerop item))
(cond ((equal item-count 0) (setf first-position
(cons (car starting-pos) (- (cdr starting-pos) 1))))
((equal item-count 1) (if (not first-position)
(setf first-position
(cons (- (car starting-pos) 1) (cdr starting-pos) ))
(setf second-position
(cons (- (car starting-pos) 1) (cdr starting-pos) ))))
((equal item-count 2) (if (not first-position)
(setf first-position
(cons (car starting-pos) (+ (cdr starting-pos) 1)) )
(setf second-position
(cons (car starting-pos) (+ (cdr starting-pos) 1)) )))
(t (setf second-position
(cons (+ (car starting-pos) 1) (cdr starting-pos) )))))
finally
;;(print first-position)
;;(print second-position)
(return (values first-position second-position))))
(defun calculate-next-move (current-char current-position previous-position)
(let( (east-choice (cons (+ (car current-position) 1) (cdr current-position)))
(south-choice (cons (car current-position) (+ (cdr current-position) 1)))
(west-choice (cons (- (car current-position) 1) (cdr current-position)))
(north-choice (cons (car current-position) (- (cdr current-position) 1))) )
(format T "~%~a ~A~A" "nexmove from:" current-position previous-position)
;;(print current-position)
;;(print (car current-position))
;;(print north-choice)
;;(print west-choice)
(cond ((char= #\| current-char) (if (equal north-choice previous-position)
south-choice
north-choice))
((char= #\- current-char) (if (equal east-choice previous-position)
west-choice
east-choice))
((char= #\L current-char) (if (equal north-choice previous-position)
east-choice
north-choice))
((char= #\J current-char) (if (equal north-choice previous-position)
west-choice
north-choice))
((char= #\7 current-char) (if (equal south-choice previous-position)
west-choice
south-choice))
((char= #\F current-char) (if (equal south-choice previous-position)
east-choice
south-choice)))))
(defun steps-to-farthest-point (input-array node-array paths-list starting-pos)
;; (print "---")
(let( (circle-closed nil) (current-coords (list)) (previous-coords (list starting-pos starting-pos)))
(multiple-value-bind (first-position second-position)
(paths-list-to-starting-coords paths-list starting-pos)
(push first-position current-coords)
(push second-position current-coords)
(setf (aref node-array (cdr first-position) (car first-position)) t)
(setf (aref node-array (cdr second-position) (car second-position)) t)
;;(print node-array)
(print "----we gamin")
;;(print current-coords)
;;(print (calculate-next-move
(loop for steps from 1
while (not circle-closed)
do
(loop with current-char = nil
with temp-coords = nil
for index from 0
while (< index 2)
do
(setf current-char
(char (aref input-array (cdr (nth index current-coords)))
(car (nth index current-coords))) )
;;(print current-char)
;;(print
(setf temp-coords (calculate-next-move current-char (nth index current-coords)
(nth index previous-coords)))
(setf (nth index previous-coords) (nth index current-coords))
(setf (nth index current-coords) temp-coords)
(if (not (aref node-array (cdr (nth index current-coords))
(car (nth index current-coords))))
(setf (aref node-array (cdr (nth index current-coords))
(car (nth index current-coords)))t)
(setf circle-closed t))
;;(print node-array)
;;(print current-coords)
)
finally
(print steps)
)
;;(format T "~%~A~A" first-position second-position)
)))
;; (let( (input-array nil) (node-array nil) )
(defparameter *starting-orientation-hash* (make-hash-table :test #'equalp :size 7))
;;N-w-S-E
(setf (gethash #\| *starting-orientation-hash*) '(1 0 1 0))
(setf (gethash #\- *starting-orientation-hash*) '(0 1 0 1))
(setf (gethash #\L *starting-orientation-hash*) '(1 0 0 1))
(setf (gethash #\J *starting-orientation-hash*) '(1 1 0 0))
(setf (gethash #\7 *starting-orientation-hash*) '(0 1 1 0))
(setf (gethash #\F *starting-orientation-hash*) '(0 0 1 1))
(setf (gethash #\. *starting-orientation-hash*) '(0 0 0 0))
;;(print (gethash #\| *starting-orientation-hash*))
;;(multiple-value-bind (input-array node-array starting-pos) (input-parsing "aoc10test.txt") (format T "~%~A~%~A~%~A~A" input-array node-array starting-pos (determine-paths input-array starting-pos)))
(multiple-value-bind (input-array node-array starting-pos) (input-parsing "aoc10input.txt")
(format T "~%~A~%~A~%~A~%~A~%~a~%" input-array node-array starting-pos (determine-paths input-array starting-pos) "-----") (steps-to-farthest-point input-array node-array (determine-paths input-array starting-pos) starting-pos))
;;)

140
src/aoc10input.txt Normal file
View file

@ -0,0 +1,140 @@
7.FF7777.|77.-L-77.|F-7-.L77|7F|7-|-JF77FFF777.7FL--F-F..F.-7-F7-J.FFF7JFF7-J7....FFJFL.|-L7F--|-L7L-|-|-|.F77F7F-|7---L-.7-.F-7F|-L77...-.-
J7L-||LL7L|7-J.|.|7LL-|.F7|FJ7----J-7-|LLJ|JJ||LJL|L|-|.|J.LL-|F7|JFFJL7LFF7|J7-L|LJ-||FL-FLJ7L-7JFLFJ.-FL.||F|7.LJ|7J.L.77JFF.L-7J.LL--7--.
.77L|7-|L-L7J.L7FJ.||F|F|-F-JJ.|..|LL-L.JJ|L-7JL|FL-|-J7J-FF|L||FFJF|77|LLL7.F7JLF7.L-|JJF7..F.F|F|-J.L-LL|-|7L-|-F|J7-L-F|-777|L|F7-L-77FJ7
-777||LJ.|J|.--F7.7-LL|---JJ7.F-J-|JLF|-L--|7|.-JL7F7LL----FF7.F|JL|LJ-J7.FL7-.7F||7.|.L7F77F7F77F77LF7F7LL.-JF|.F||777.|F..||FF-JFJ7..L-|JJ
F|F77F--7JL|7JFF--L..FJJ7FJFFF-77||F7FL-|LF--|LJ.|-J-7J|LJFLJL7|L7---JJ.--FJL.J7FJ|.L--F---7|LJL-JL7-J|JL.|F.F|FLJ7|F7FL7L|7FLJ-J7..FF.|J.L7
FLJJFL|L7-FL--FLJ7L7-L|J|-7F-|FL-|JJFJJ7F7-J.F--F-JL-|-L7F-7FJ|LL--JL7F|J7|F|.LFJFJ...|L7F7|L-7F---JJF|7.FLJ7J||.L-JJLL7JL7--JLLLF7.J|L-7F.7
F|L-7F7-|-JLLJ|F|L.L7LF-LL7L-L7-FL77L-L-J|.FL.7.LJ-F-JJFJJ7|JF|-J|.-JFF---L|7.FL7|77.FF|LJ|L7.|L-7.L|FF7-7L|--J77.LJJJF|J.L7FF7-|.-7|--LLF-J
FJFLJ-J-L7-L-F|7|LLJ--|F-F--F|LJL-JJLF7|F7-||F--FJJ|7L77-|F--F|J-|F|7FL7J.|JFF7-||-F-7F7F7|FJFJF-J-.|J||7||FJFLJ-7FLJ.JL-7L-7||LL-FF7--..L7|
FJL-LJ7|F|.L.L||J|J.|L|J.JFFLJ...|L..-|J|L-J-J.|.|-L|7.7L-|7F7|JFL|77FFJJFF7FJL-J|-L7||LJLJL-JFJF|7LJJ|JF-7.F7FJLFF7FFJF--7JJ|J..F7LL-J-LJLJ
J7-FL---7|7FL.L7FF7|-LL-7J-J7-|-|7JF7-JJLFJLJLF.F|77LJ-F--J77L-JF-7|FJ||FFJ|L-7F7|F7||L--7F7F-JLF77FLFJFF7-FJ|7.F7L7--7|FFJ7.77..L|F|7L7JLL.
L|.L7..||-J7LF7LL-7.FFJLJJJ-77|FL|FF--|-|JFJLF7F-7-7J..L|7LLJ.|.L7L7F7J|JL7|F7||LJ|LJL7F7LJ||F7FJ|J7.|.FJ||L7|LFJL-7--F|-|7LLL|-7.L7J|FL.LJ7
..L-7FFFJ-JLF.JJ-FF7|J|.J--J|L-7.LJLFLJJFF7|F|||FJ.||.F7LJJ.FF.7||FJ||F7J||||LJL7|L--7LJL7FJLJ||FJ-F-JFL7|F7||FJF--J-FJL7L77FF|.|FL-----J..J
FF|7|FF|-F7|F7..F|.F7JLF.F|-FJJJFJLF.|LF-J|-FJLJL--77FF7L|-F|J7.FJ|FJLJ|F7||L-7FJFFF7L-7FJL--7LJL-7F7LLF|||LJ|L7||F7-J77|JL77|JF--7|7-FFJL-L
FFJJ7-LLJ|F|J|J-7JFLF--F7LF.7J7L||7L-J-L7FJ|L--7F--J.F||7|.FF-F7L7|L7F7LJ|||F-JL-7FJL7FJL7-F7L7F--J||77FJLJF-JFJL7|L7JLLL.|L7J.J7J-L--LL7FFJ
LFJ.7-J|77LF-J..|7.F7JF7FFF--77LF-7-|JLFJ|J-L|FJL--7F7||F|-F-7|L7||FJ|L-7||||F--7|L-7||F7|FJL7|L-7F||F7L7F7L-7L-7||FJF|LLF7-7--7|7F.L7L||7.7
F|LL|..L-|FLL-7.|F7|L7|L7-|F-JF7L7|F7JF|FJJFF7L7F--J||||F7.L7|L7LJ|L-JF-JLJ|||F7LJF7||LJ|||F-J|F-JFJ||L7LJL-7L--J|||FF7LF-77.|L-7||.F|7FJFLJ
-77J.F|.F-J7.|7.|JF|FJL7|FJL7J|L7|||L7FJ|F7FJ|FJL-7FJ|||||FFJL-JF-JLFFJF--7LJLJL7FJ||L7FJ||L7FJ|F7L7||FJF7F7L---7||L-JL-JFJ7-J-77.|-F-7L-F-J
.F-7--7FLJ-J7JLFF7||L7FJ|L7FJFJFJ||L7LJFJ|LJFJL-7FJ|FJ||||FJF7F7L-7F7L-JF7|F----JL7||FJL7|L7LJFJ|L-JLJ|||LJ|JF-7|||F-----J7||-F|JFFJ|7LFFLJ7
F7|F7|F7J|.|J|.FJL7L7||FJFJL7|FJFJL7L-7L7L-7|F-7|L7||FJ|||L-J|||F-J||F--JLJL----7FJLJL7-||FJF7L7|F-7F7L7|F7L7|FJ|LJL-7F77|-|JF|LF7J.L|.FLJLL
JJJ|.-7JF|-7FJ-L-7L-J||L7|F-J|L7L7FJF7L7L7FJ|L7|L7LJ||FJ||F7.||LJF7||L----7F----JL---7|FJ||FJL-J|L7LJL-JLJ|FJ||FJF---J|L-7.L.FFF|J..F-FJ.F-L
J-L---7F|LF.||F-7L--7|L7|||F7|FJFJL7||FJFJL7L7||L|F-J|L7||||FJL7|||||.F7F7||F-7F7F-7-|||FJ|L--7FJFJ|F-7F7FJ|FJ||FJF77FJF7|..F-J.L-|77..|FL7|
.L-J.FJLF777.FL7L---JL-J||||LJ|FJF-J||L7|F7|FJ|L7|L-7|FJ|||||F-JFJLJ|FJLJ||||FJ||L7|FJLJL7|F-7|L7L7FJFJ||L7|L7LJL-JL-JFJLJ--.J.7JJLJLL.LF||F
FF77-L.F|.F-7F7L7F-----7||||F-JL7|F7||FJ||||L-JFJ|F-J||L|LJ|||F7|F--JL--7|||||FJL7||L7F--J||L||FJFJL7L7||FJL7L-7F--7F7L-7.LFJ.FLL7J||L-.-L-|
..FF.|-LF---FJL7LJF-7F-JLJLJL7LFJ||||||FJ||L-7FJFJL7FJL7L7FJ|LJ|||F--7F-JLJLJLJF7||L-JL---JL7LJL7|F7|FJ||L-7L7FJL-7LJ|F7L7--J7F--7--J.|.L.||
.|.|F777.L|7L-7|F7|FJ|F7F-7F7L7L7LJ||LJ|.|L7FJ|-L-7LJF-JFJL7L-7|||L7FJL---7F-7FJLJL--7F7F---JF77|||||L-J|F7L7|L7F-JF7LJL-J7.|FL7FJ7JJ7J.|L-7
7JFF7LL-|7LF7-|||LJL7LJLJ.LJ|FJFJF-JL7FJFJFJL7L-7-L-7L-7L7FJ|FJ||L7||F----JL7LJF-7-F7LJ|L-7F7||FJ||||F--J||FJL-J|F7|L-7LF7F7F7-||L7J7F7-|LL-
J77F---FLF-JL-J|L--7|F-7LF--JL7L7L--7|L7L7|F7|F-JF7FJF-JFJ|F7L7|L7LJ|L---7F7L-7L7|FJ|F7|F-J|||||FJ|||L7F7||L--7FJ|LJF-JFJ|||||FJL--7FLJ.J.L|
FLLJ7L7J|L----7L---JLJFJFJF7F7L-JF--JL7L7|||||L-7|||FJF7L7||L7|L7|F-JF--7LJ|F-JFJ|L7||LJ|F7|LJLJ|FJ||FJ||||LF7|L7|F-JF7L7||||LJF7F7|-|77F7-7
7.F.JJ.L--JLJJL-7F---7|FJFJLJL-7FJFF-7L7|||||L7FJ|||L7|L7|||FJ|FJ||F7L-7|F-JL7FJFJ.||L-7||||F---JL7||L-J|||FJLJFJ||F7||FJ||||F-JLJ||J.LFF7-F
|7|F--JJ|JL7.F-7LJF-7||L-JF7F--J|JFJFJFJ||LJL7|L7||L7|L7LJ|||FJL7|||||FJ|L7F-J|FJ7FJL-7|LJLJ|F7FF7|||F-7|||L7F7L7||||||L7||||L---7LJ7--|L--J
JFJ-7J.LF.F-7L7|F7L7||L7F-J|L--7L7L7L7L7|L7F-J|FJ||FJ|FJF-J||L-7|||||FJFJFJL7J|L-7L--7||F---J|L7|LJ|LJFJ||L7||L-J|LJ|||F|LJLJF---JF77.-|77L7
LJ-J|.L-F7L7L-JLJL7|||FJL-7L-7FJFJLL7|FJL7|L7FJL7|||FJL7|F7|L7F|||LJLJFJFJF-JFJF-JFF7||||F7F-JFJ|F-JF7L7||FJ|L7F7L7FJ|L7|F-7FJF7F7|L7J|||J.|
.FF.FFLFJL7L-----7||||L7JFJF-JL7L7F-J|L-7LJFJL-7LJ|||JFJ|||L7L7||L7F--J-L7L-7L7|.F7||||||||L-7L7||7FJ|FJLJL7L7LJ|FJL7|FJ||.LJFJLJ||FJ|F77JL|
FFF-|F7L-7|F7F---JLJ|L7L7L7||F7L7|L-7L7.L7FJF7FJF-J|L7|FJ|L7L7|||FJL7F7F-JF-JFJ|FJ|||||||||F-JFJ|L7|FJL-7F-J.|F-JL7FJ|L-JL--7|F--J|L--JL77FJ
|7J.L|L--JLJ|L-----7L7L7|FJL-JL7||F7|FJF7||.||L7|F7L7|||J|FJ|||||L7FJ||L7FJF7L7||FJ||||||||L-7|-|FJ||F7-|L7F7||F7-|L-JF7F7F7LJL---JF----J-7|
LL-|7L7F---7L--7LF7L7L-JLJF-7F7LJLJLJL7||||FJ|FJ||L7|||L7|L7FJ||L7||FJL-JL7||FJ||L7||||||||F7||FJL7||||FJFJ|||LJL-JF7FJ||LJ|F7F7F-7L---7L-J-
-7F7-|LJJF-JF-7L-JL7L---7FJFJ|L7F7F-7FJ|||||JLJ-||.LJ||L||FJ|FJL7|||L--7F-J|LJFJ|FJ|||LJ||||LJ||F7LJ||LJ7L-JLJF-7F7|LJ||L-7LJ||||FJF7F-JJJ|J
L7|--7J|FJF7|-L-7F7L----JL7L7|FJ|||FJL7|LJ|L--7FJL-7-|L7LJL7|L-7|LJ|F7FJ|F7L-7L7|L7||L7FJ|LJF-JLJ|F-J|F------7L7LJLJLF7L--JF7||LJL7|LJJ.|.F.
L|.|LFJFL7|||F--J||F7F-7F-J7LJL-JLJL-7|L-7L7F7|L7F7L7|FJJF-J|.FJ|F-J||L7|||F7|FJ|FJ|L7|L7L7FJF7F7|L7FJ|F----7L7L7F7F7|L----J||L77FJL-7J-L--7
.|7....7.LJ|||F--JLJLJFJ|F---7JF7JF--J|F7L7LJLJFJ||FJLJF7|F7L7L7|L7FJL-J|||||||FJ|FJ||L7L-JL7|LJ||LLJLLJ7F--JJL7LJ||LJF-7F--JL7L7L---J|L|.L-
F|.-F7-FJJ.LJLJF7F----JFJL--7L-JL7L--7||L7L---7L-J|L-7FJ|||L7|FJ|FJL---7LJ||||||FJL-7L-JF---JL-7|L---7F--JF7LF7|F-J|F7L7|L---7L-JF--7.|L---|
|L7.||7..F7FF--JLJF7F-7L7F-7|F7F7L--7|||-|F---JF--JF7LJFJLJLLJL-J|F--7FJF-J|||||L7F7L-7FJF--7F-J|F7F-J|F--JL-J||L--J||FJ|F7F7L---JF7|FL-|7F-
J7J|JJJ7.-|-L7F7F7|LJFJFJL7LJ|LJL7F7LJLJFJL---7L-7FJ|F7L7F-7F7F--JL-7LJ7|F7|||LJ7|||F7|L7|F-JL-7||LJF7LJF----7|L7F7FJLJ7LJ||L7F7F-JLJJJJ|-|J
|J||JLLF-.L.|LJLJLJF7L7|F-JF7|F--J|L--7-L7F7F-JF-JL7|||FJL7LJLJF-7F7L7F7LJLJ|L7F-J|||||7||L---7||L7FJL7|L---7|L7|||L-----7LJ7|||L7JFJ-L7L-J|
-77FJ..|.F|F-----7J||FJ||F-J||L---JF--JF7LJLJF-JF7FJLJ|L7|L7F--JFJ|L7LJL7F--JFJ|F7|||||FJL7F--J|L7|L-7L-----JL-JLJ|F7F7F7L--7|||FJFF|.LLFJL7
L-J|--F-7FLL--7F7L-JLJFJLJF7LJF7F7FL-7FJL---7L-7|||F77L-JF-J|F--JFJFJF7FJ|F7FJFJ|||||||L--JL-7FJ-LJF7L-----------7||LJLJL---JLJLJ7-LJ.|.JFFJ
.FLJ7|LLF-JF7.LJL7F---JLF7|L--JLJL---J|F----JF7LJ|LJL---7|F7||F-7L7|FJLJLLJ||FJFJ|||||L-7F---JL7F--JL-----7F--7F7||L-------7J.||.7.|77FJ7|JF
FLJ.J7-F|J-||7LF-J|F---7||L---------7FJL-7F--JL-7L7F7F--JLJLJLJFJFJ||F7F--7LJL7||LJLJ|F-JL--7F-JL---7F7F-7|L-7LJLJL--------JJJLF7LJ-F|.F-7|L
-J|-7|F-F-7||F7L--JL7F7LJL--------7FJL7F-JL7F7F7|FJ||L--7F-----JFJFJLJLJF7||F-JL--7F-J|F7F-7LJF-----J|||FJ|F-J7F7F7F7|F-7F7F7JF||FL-F|.7J|L|
|F7-77|FL7LJ|||FF7F7LJL7F--------7||F-JL---J|LJ||L7||F--JL----7FJ7L7F-7FJLJFJF--7FJL7FJ||L7L-7L7F--7FJLJL7LJF-7|||||L7|FJ|LJL--JL7-.7J-7L|7J
F|F7JLF7FJF7LJL-JLJL---J|F-------JLJ|F--7F7FJF7LJFJ||L---7F---JL7F-JL7|L-7.|FJF-JL-7||FJL-JF7L7LJF7LJJF--JF7|FJ||||L7LJL-JF7F----JJ.77JL-.7J
L-JF-FJ|L-JL--7F7F7F7F-7||F7F7F-----JL7FJ|LJFJL-7L7|L7F--JL-7F7FJ|F-7||F7L7|L7L-7F-J|||F7F7|L7|JFJL7F7L--7||||FJLJL-JF7F7FJ|L-7F-7F7F7LLL7F7
|.FJ-L7L7.F7F7LJLJLJ||-||LJ||||F------JL7L-7|F--JFLJ|LJF7F--J||L7|L7||||L-JL7|F-JL-7LJLJLJLJ-|L-JF7LJL7F7||LJLJF--7F-JLJLJJL--J|FJ7LL-.LJ-||
LF||.LL7L-J||||F7F--JL7LJJFJ|||L-------7|F7LJL-7F7-F---J|L7F7|L7||FJ|||L-7F7LJL-7F7|F---7F7F-JF-7|L7F7LJLJ|F---JF7LJF7LF7F7.F7FJL-7LLL-FJ7|7
LL--L7JL--7|||FJ|L-7F7|7F-JFJLJLF---7F-J|||F7F-J|L7L7F-7|FJ||L7||||FJ||F7LJL---7||||L7F7LJLJF7|FJ|-LJ|F---JL----JL--JL-JLJ|FJLJF-7|7.LFF.F--
FFJ.FFF--7||||L7|7FJ|LJFJF-J7F7FJF-7LJF7LJ|||L--JFJFJL7||L-JL7|||LJ|FJLJ|F---7FJ||LJ.LJL-7F7|LJL7|F-7LJF----7F--7F----7F-7LJF-7L7LJ77.FL||F7
LJLF7|L-7LJ|||FJL7L-JF-JFJF--J|L-J.L--JL-7|||F7F7L-JF-JLJF---J||L7FJ|F--JL--7||FJL-7F----J|||F--J|L7L7-L---7|L-7|L--7.LJ7|F7L7L7|L|FL.FL7-LJ
.|.|L--7L-7|||L-7|F7L|F7L7L--7|F7F7F-----JLJLJLJL7F7L7F7|L-7F7||FJL-J|F7F7F7||||F--JL---7FJ||L--7L7L7L-----JL--JL---JF--7|||FJLLJJL|.F7F-JL7
F-.L-7FJFFJ|||.FJLJL7LJL-JLF7|||LJLJF----7LF7F7F7||L7LJL-7JLJLJ|L7LF7||LJ||||LJ|L7JF----J||LJF--JFJ.L7F-----------7F7|F-JLJLJF7JLF.J-7L|.FLF
|LF--JL77L7||L7|F--7|F--7JFJLJLJF7F7|F---JFJLJLJ|||FJF---JJLF7FJFJFJLJL-7|||L-7|FJ-L7F---JF7FJF-7|F7FLJF----------J|||L7F7F7FJL7F77FL7-J7F.L
L-L--7FJF7||L7LJL7-LJL-7L-JF----JLJLJL---7|F-7F-J||L7|F7F77F||L7L7L--7F-J||L7FJ|L-7.LJF---JLJFJFJ|||F--JF---7F-----JLJFJ|||||F-J||FF-LJF|777
FJF--JL-JLJL7L7F7L7F7F7L--7|F------------J|L7|L7|LJFJLJLJL77|L7|FJF--JL-7|L7|L7|F-JFF7|F7F---JJL-J||L-7FJF--J|F-7F7F7FJFJLJLJL--J|7JL|FLJ.77
F-JF-7F-7F-7L7LJL7LJ|||-F7LJL-7F-------7-FJFJ|FJF-7L7F--7FJFJFJLJ7L-7F7FJL7||FJLJLF-J|LJ||F-----7FJL7FJ|FJF7FJL7||||LJ7L7F---7F--JF7.|FJ-7J|
|F7|FJL7LJLL7L7|L|F-J|L-J|F7F-J|F------JFJFJ7LJLL7|-|L7LLJFJFJJL|7|FLJLJJ-||LJJF7|L-7L-7LJL-7F-7LJF7LJFJL7|||F-JLJ|L----JL--7LJF--J|-JJ-F-.L
LJLJL7FJ|F-7L7L7FJ|F7L--7LJLJF7|L--7F7F7|FJF7.F7FJL7L-JF7.|FJ||.F7J7.F|7JF||JJ.S|FJJL-7L7|F7LJ-L--JL--JF7LJLJ|F--7|F-----7F7L--JF7FJ.|.7LL|J
|..F7LJF7|FJ-L7|L7||L7F7L----J||F--J|||LJ|7|L-JLJF-JLF7||FJL--7F77-J------LJ--FJL7JF7FJFJFJL--7F-------JL---7LJF-JLJF---7||L--7FJLJ|7|.F7F7|
LF-JL77||||-F7||||||FJ|L7F-7F7LJL7F7|LJF7L7|F----JJF7|LJLJF7F-J|L7-|7JL|-|JL-.L-7|FJLJFJJL---7|L----------7FJF7L-7F7|F--J|L--7|L-7F77JLJFJJ-
LL--7L7||||FJLJL-JLJL7|FJL7|||7F7LJLJF-JL7LJL--7F-7||L7F--JLJF-JFJJL77LL7|F7.|-FJ|L--7|F-7.F7||F---7F-----JL7|L7FJ|LJL--7|F7FJ|F7LJ|JJ-F-.|7
|LJLL7LJLJ|L------7F-J||F7||||FJ|F---JF-7|F----J|FJ||J|L-----JF7L7-F-JJ|J.F7.-JL7|F--J|L7|FJ|||L--7|L-----7FJL7|L7|F----JLJLJ.LJ|F7|JLFF7FLJ
F|77.L---7L7F-----JL-7|||||LJ|L7|L----JFJ|L-----JL-JL-JF7F--7FJL7L7|FL7|-F.F77F-JLJF-7|-||L7|||F--JL------JL--J|FJ||.F------7F7JLJLJ.FJJFJJ|
F7F7F7F7FL7||F7F7F7F7LJLJ|L-7L-J|F--7F-JFJF7F-----7F7F7||L-7LJ-L|FJJ--JJ-|.||-L-7F7|FJL-J|FJLJLJF-7F--7F----7F-JL-JL-JF--7F-J||7J7FJ-J|F7L77
|LJLJLJL--JLJ|||||LJ|F7F7L7FL--7|L-7LJF7L-JLJF7F7-LJLJLJ|F7L-7JJLJJL7F|J7JFJL-7LLJLJL---7|L--7F7L7LJF-J|7F7FJL-7F-----JF7LJF-JL77F|7JFJL|F--
L7F---7F7F7F7|LJLJJFJ|LJL7L---7||F7L--JL-----JLJL-7F---7|||F-JF7J-|L--.L-.|F-7|F77F--7F7|L--7||L-JF7L-7|FJLJF7JLJF7LF--JL7FJF--J7-JF7J.LLJLL
LLJF7L||||||||F----JFJ.F7L---7|||||F----------7F-7LJF--J||LJF-77LFL-7F77FLLJFJLJL7L-7LJLJF-7LJ|JF-JL--J|L7F7|L---JL-JF---J|FJJFF7|F||77L|.F.
F--JL-J|||LJ||L7F7F7|F-JL----JLJLJLJF--------7||FJF7L-7FJL--JFJ7-||JLJFF|JLFJF--7L--JF7F7|FJF7L7L7F----JJLJLJF----7F7L----JL7JFJ|-F|L777F7|7
L7F7F-7|LJF-J|FJ|||||L-7F---7F7F-7F7|F-------JLJL7||F-JL7F7F-JJ..F7-F.|-JJ.L7L7|L7F-7|LJLJL7||FJ7LJF7F7F----7L7F7LLJ|F7F-7F7L7|FJ-FJFJ.FJ|FJ
|LJ||FJL-7L-7|L7|LJLJF7LJFF-J||L7LJLJL----------7LJLJ|LFJ|LJL|.F-||--|J-LLLJL-JF-J|LLJ-F7F7LJLJF---JLJ|L---7L7LJL--7||LJJLJL-J|L-7L7||7LLL|.
7LFJ|L7F-JF7LJFJ|F---JL---JF-JL-JF--7F-7F7F7F7F-JF---7-L7|F7F7F7|||.|||JF7LFF--JF-JF---JLJ|F7F7L-----7L7JF-J7|F7F-7|LJF-7F----JF7|FJL-7J.LLL
L|L-JJLJF7||F7L-JL---7F7F--JF7F7-L-7|L7LJLJLJ|L--JF--JF7LJ|||||L7|L-7L7FJ7LLL---JF7L-----7||||L7F---7L7L-JF-7|||L7|L-7L7LJF----JLJ|F--JFF-J|
FJ|LF---JLJ|||F7F7LF-J|LJF--JLJL---JL7L7F7F77L---7L7F7||F7||||L7||F-JF-77L|.LF---JL7F----JLJ|L7|L--7|FJF--JFJLJ|FJL--JFJF-JF7F7-|FJL--7FF--7
FJ|LL--7F-7LJ||||L7L--JF-JF7F---7F-7FL-J|LJL---7|L7LJLJ||||LJ|FJLJ||FJFJ7-|-FL----7|L---7F-7L-JL---J|L7|F-7L--7LJF7F-7L7|FFJ||L7FJF-7FJ-J.|-
|F|7F-7LJ.L7FJ||L7|F7F7L--J||F--J|FL7F-7|F-----JF7L----J||L7FJL7F-JFJFJF-7F7FF7|F-JL----JL7L-7F7F--7L-J|L7L---JF7|||FJFJ|FJFJ|FJ|FJLLJJ-|7J|
LFF7L7L---7|L-JL-JLJLJ|F--7LJL--7|F-J|FJ||F--7F-JL7F--7F||-||F7|L7L|FJ-|FJ|L-JL7L--7F-7F--JLFJ|||F-JF-7|-L-----J||||L7L7|L7|FJL7|||F7J7FLF-7
-FJL-JF7F7LJF-7F7F7F--JL-7L--7F7LJL--JL-JLJF7||F--J|F-JFJL-J||||FJFJ|F7|L7L--7FJ7F7LJLLJF7LFJFJLJL7FJFJ|F-------J|||FJFJL-JLJF7||L-JL777.|-|
LL--7FJLJL7FJJLJLJ|L7F-7.|F-7||L---------7FJ|||L--7|L-7L--7FJ|||L7L7LJ||FJF7FJ|F7|L7F7F7|L-JFJLF7.LJFJFJL---7F7F7||||FJF7F-7FJ|LJF--7L7J-F-.
|FJ7LJ.F-7LJF--7F7L7|L7L7LJFJLJF---7F--7-LJFLJ|F--J|F-JF7FJL-JLJFJFJF-J|L7|||FJ||L7LJ||LJF7FJF7||F--JFJF--7FJ|||LJLJLJFJLJFJ|FJF7L-7|FJJJ.L-
7JLF|F-L7L7FJF7LJL-JL7L7|F7L--7L7F7LJF-JF--7-FJL7F7|L-7||L7F----JFL7|F7|FJ||||FJ|.|F-JL--JLJ||LJ|L---JLL-7|L-JLJF7F--7L-7LL7||FJ|F7|LJJ..77|
||.7L7.LL7LJFJL-7F7F7L7||||F--JFJ|L-7L--JF-JFJF7|||L-7|||FJL--7F--7|||||L7|LJLJFJFJL---7F---7L-7L-----7F-JL-----JLJF7L7FJF-J||L7LJLJJ.F-..L7
FJ.JFF--7L-7|F--J|||L7LJLJLJF--J.L-7|F7F-JF-JFJ||||F7|||||F---J|F-J|LJLJFJL---7L7L7F---JL-7FJF7L-----7|L--------7JFJL7LJLL-7|L7L----7--|--J|
JF7LFL-7L--J||F7FJ||FJF-7F-7|F7F---JLJ|L-7|F7L7LJ|||||||||L7F-7|L7-L7F--JF-7F7|FJFJL7F7F--JL7|L7.F7F-JL--------7L-JF7L--7F7||FJF----JJ7J|F-J
F||FFJFL7F7FJLJ||.LJL-J|LJFLJ||L-----7|F-J||L7L7FJ||LJLJLJFJ|FJ|FJF7|L7F7L7||||L7L7FJ||L---7||FJFJ|L---7F7FF--7L---JL--7LJ|LJL7L7F|LJL7.|.L.
--JJ-J|LLJ||F--JL7F----------JL------J|L--JL7L7LJFJL-7F--7|FJL7||FJLJFJ|L7|||||FJFJ|FJL-7F-JLJL-JFJF7F-J|L-JF7L------7|L-7L-7|L7|--7LFJFLLF7
J-J||LL7LFLJL--7FJ|F7F7F-----7F-----7FL---7FJFL--JF7FJL7JLJL-7LJLJF--JFJFJ|||||L-JFJ|F--JL------7L-JLJF-JF--JL-------JF7|L7FJF7LJJ7|-|-7J|L7
L|LJ7FL-.L.|F-7LJ7LJ||||F----JL7F---JF7F7LLJF-7F-7||L-7L---7|L7F-7L--7L7|FJ|||L-7FJFJL77F-------JF----JF7L-7F7F7F7F---JL7.LJFJL---77-L7-7-7J
F|7F7F|-L.FFL7L7|F7-LJLJL-7F7F-JL----JLJL--7|FJ|FJ||F7|F---JF7LJL|F--JFJ|L7||L7-|L7L-7L7L--7F---7L7F---JL-7LJ||||||F----JF-7L7F---J|LL|7|-LJ
L7-JJ||JLF7JLL7|FJL-7F7F7|LJ||F-7F----7F7F7||L-JL7|LJLJL7F-7||F7FJL7F7L7L7|||FJFJFJF-JFJF-7LJLF-JFJL7F-7F7L--J|||LJL-77F7|FJFJL-7J.F7JF7|.LJ
-7.|..|..|F-F-J|L7F7LJLJL7F7LJL7||F--7LJ||||L-7F-JL--7F-J|FJ|||LJF-J||J|FJ|LJ|JL7L7|F-JFL7|LF7|F-JJL||7LJL----JLJF7F7L-JLJL-JF--JJ7J|JLL-7||
|.|J.77L.F7FJF7L7LJL----7LJL7FFJ|LJF7L-7LJ||F-J|F7FF7||F-JL7|||F7|F-JL-JL-JF-JF-JFJ|L--7FJ|FJ|LJF77FJ|F---------7|LJL---7F7F-J-F7-|L77.7J|||
7J-F-L--FJLJFJL7L7JF7F7JL7F7L-JFJF-JL--J|FJ|L-7LJ|FJLJLJF--J||LJ||L--7F7F--JF7L-7L7|F--JL7|L7|F7|L7L-JL-------7FJL-----7|||L---J|L--L|F7--J-
.JL|7..LL---JF7|FJFJLJL7|LJL-7FJLL----7F7L7|F7|F-JL--7F7L7F7|L7FJ|F-7LJ|L-7FJ|F-JFJ|||F7FJ|FJ|||L7|F7F------7FJL-7F----JLJ|F7F-7L7J7|J|J7FJ7
F-FL7LF---77FJLJL7L---7L---7FJL-7F7F-7LJ|.LJ|||L-77F7LJL7||||FJL7||FJF-JF-JL7LJF-JFJL7||L7|L7||L7|LJ|L-----7|L--7|L-7F---7|||L7|FJJL-FJ7L7|7
LFL-F7L7F7L-JF-7FJF--7L---7LJF-7LJLJLL--JF7FJ||F-JFJL-7F|||LJL7FJLJL7L-7L7F7L-7L7FJF-J|L7|L7||L7||F-JF-----JL-7FJ|F7||F7FJLJ|FJLJJ7|LJ-F--J7
F|JJLL-LJL7F-JFJL-JF7L----JF7|FJF7F--7LF7||L7LJ|F7L7F-JFJ||F--JL-7F-JFFJFJ||F7|FJ|FJF7L7||FJ||FJ|||F7L-------7LJJLJLJ||LJF7LLJF7J7|JJL7L||F-
7|-7.|FLLFJ|F-JF7F-JL7F7F-7|||L7|LJF-JFJ||L7|F7|||FJ|F7L7|||F--7FJL--7L7L7|||||L-JL7|L7|||L7||L7|||||F7F----7L-7F---7|L--JL7F7||7FFJJF-7|-JJ
LJ.LF-|.FL-JL7FJ||F--J|LJ7||||FJ|F-JF7|FJ|FJLJ|||||FJ||7|||||F-JL7F--J7|FJ||||L--7FJL7||||FJ||F||||||||L---7L--J|F-7LJF7F7FJ|LJL-7JJ.|.LJF7.
FJ.7JF--7|F7FJ|FJ||F7FJJF-J|LJL-JL-7|||L7||F7FJ|||||FJ|FJ||||L7F7||F-7FJL7|||L--7||F7|||LJL7|L7|||LJ|||F7F-JLF77|||L7FJLJ|L-JF7F-J.LF7-|-|F|
|F-L|L-7L-JLJFJL7|LJ||F-JF-JF------J|LJ-|||||L7|||||||||FJ|LJFJ|||||J||F-J||L-77LJLJ||LJF--J|FJ|||F-J|||||JF-JL-JL-7|L-7||F--J|L7J7.L|F7-L||
|L|||FL|F7F--J|-LJF-J|L7FJF7|F7F-7F7|.F-J|||L-JLJ||LJFJ|L7L-7|FJLJ||FJ||F7||F7|F----JL-7|F-7|L7|||L-7|LJ|L-JF-7F7F-JL--JFJL--7L-J.L|.L-|--L7
||F7L7L||||7|JF---JF7|FJ|FJLJ||L7LJ|L7L-7||L--7F-JL-7|FJFJF7||L--7LJL7|||||||||L7F7F7F7|LJLLJFJ|||-FJL-7|F7FJ-|||L--7F-7L----J7||-J.FF-|7J--
777JFJ|LJLJJ||L----JLJL-JL7F-J|FJF-JFJF-J|L---JL-7F7||L7|FJ|||F--JF7F||||||LJ|L7||LJ|||L-77F-JFJLJFJF7FJLJ||F7LJL7F-J|FJF7F7.|L-7|.L-J|LF77.
LFL---F|-LJLF------7JF----JL7FJL7L-7|FJF7L------7||||L-J||JLJ|L-7FJL-J||||L-7|FJLJJFJ||F7|FJF7L7F-JFJ|L-7FJLJL--7|L--JL-JLJL7F|JL7.|L|L7LJ-7
||L7|.L.|L7-L7F-7F7L-JF-7F7FJL7FJF7LJL7|L7F7F-7FJ||||F--JL-7FJF-JL-7F7|LJ|F-JLJF7F-JFJ||||L7|L-J|F-J|L7FJL7F-7F7|L-7F---7F-7L7LF-J77L|-LFJ.-
FJLFF7FF|JF--J|-LJL--7|J||||F-J|FJL---JL7||||-LJ7||||L-7F7FJL7L--7FJ||L-7|L----J|L7FJ|LJLJFJ|F--J||F--J|F-JL7LJLJF-JL--7|L7L-J-J.LFJ--7LJFJ.
FJFL-7FFJF|F--JF-----JL7LJ||L-7||F7F7F7FJ|||L---7LJ||F-J||L7|L7F-JL7|L7FJ|F----7|FJL----7F|FJL-7FJFJF7FJL7F7L---7L-----J|FJJ.LF7.L|--FJF|7LJ
F7JLL|7L-JLJF--JF7F7F7FJF-J|F-J|LJLJ||LJ7|||F7F7L-7LJL-7||FJF-J|7F-JL7||FJL---7|||F---7FJFJL--7|L7L7||L-7|||F7F7L------7||JL-7|77FJJL7-7.J7|
LLJJ|||7J.|.L7F-J||||||FJF7|L-7L7F--JL--7||||LJ|F7|F---J|||LL-7L7L7F7|||L7F-7FJ|||L--7LJ||F7F7|L7|FJ||F7||||||||F--7F7FJLJ.|-FL---J.F|7|F7L|
F|7..|J-F-777LJF-J||||||FJLJF7|FJ|F-7F-7||||L-7||LJL7F7FJ||F-7L7L7||LJLJF||7|L7|||F7FJF--J|||||FJ|L7|LJ|||||||||L-7|||L-7F-7|FJJ-L-7|LF-|-.|
||F|-||L|-LLFJ7|F7|LJ||||F--JLJ|L||FJL7||LJL7FJ||F--J||L7LJL7L-JFJ||7F7-FJL7|FJ||LJ|L7L--7|LJLJ|FJFJL-7||LJ||LJ|F7|LJ|F7LJFJJ|.||F|-J-JFF7.|
JF||-|F-J.-.|F-LJ||LFJ|||L7F7F7|FJ|L7FJ|L7F7|L7||L7F7|L7|F--JF7FJJ||FJL-JF7|LJL|L7FJFJF--JL7F--J|FJF7FJ||F-JL-7||||-FJ|L7FJFFLFFJLJ|7L.|JL7|
LL-L--7FL7FFLJ7LLLJ|L7|LJ7LJLJLJL7|FJL7|FJ||L7|||FJ|||FJ|L7F7||L-7LJL-7F7||L-7FJFJL-J-L--7FJ|F7FJL-J||FJ|L7F7FJLJ|L7|FJ-||-L7-LJ-|F|7L7|FLJJ
.FLL7|.LJLJ-|JFJFJ|FLLJJLF-------J|L-7||L-JL7||LJ|FJ||L7L7LJ|||F7L7F--J||||F-JL7L--7F-7-FJL7|||L7F7FJ|L-J||||L-7FJFJLJ7J||.L777F-L7||.F77.LJ
-FJFLJ--7|...L7-L-L7-J.|LL----7F--JFFJ|L7F7FJ|L-7|L7||J|FJF-J||||FJL-7FJ|||L-7-L7F-JL7L-JF7|LJL7LJ|L7L7F--J|L--JL7L---7-LJ..7FFJ..|JJ7|.|F|7
FL-7J|FJ-J7J-F7||.LF7|.|FLF--7||F---JFJJ||LJ7|F7||FJLJFJ|FJF-JLJLJ7F-JL7|||F7L7FJL--7|F-7||L--7L7FJL|FJ|F-7L----7|F7F-J.L|.-JFJ.-7LLJLL-LJ7F
|.||FF|..||L-F.F.--FJ7-FF7L-7LJ|L7F-7L-7|L-7FJ|||||F-7L7|L7|F-----7L-7FJLJ|||FJL-7F7|||FJ|L7F-J7||F-JL7|L7L7F7F7|||||J|77.FJFL||F|-JF-J7FFFF
|-FL.||.F|-.|JL-|LJJ.|FL|L7LL7FJFJ|7|F7|L--JL7||||LJFJL|L7LJ|F-7F7L--JL--7||LJ7F-J|LJ||L7|FJL7-FJ|L7F7||FJ7||LJLJ||||J7L--F7|-FLFFJ|F--F--7|
|-7JF-|L-|.|-F|-.FLL7|J|L7L--J|FJFJFJ||L--7J7|||||F7|FFJFJF-J|.LJ|F-7F-7FJ|L--7|F7L7.LJ-||L7FJ.L-JJ|||||L7FJL--7JLJLJL--J.|FF-F..|7LJF7|F-|J
|F--F7|JFF.L7LL|F-7FJJ-F-JF--7|L7|LL7||F--JF-J|||||||FJFJFJF7|F--J|FJL7|L7L--7||||FJF7J-LJFJL77L7LFJ||||FJL7F7FJJLLJ7L|7||7|||L7-F7J.|LL|-|.
.FLFJ-F7|L7--7.7|.J7J|.L7FJF-J|FJL-7|||L-7J|F-J|||||||FJ|L-J||L7F7|L7FJL7L-7JLJLJ|L-JL-7J.L7FJ77FL|FJLJ|L7LLJLJ77FJ-77.LF-JLF--7-J|JFJ7JF-|7
-F7JL-J7LF-J--7LF.L|77|.LJLL-7|L-7FJLJ|F7L7LJLLLJ||||LJJ7FF-J|FJ|||FJL-7|F7|F7F--JF7F-7|J-LLJ.J-F-||7|-|FJ..L.LL-JF|LFJ|||JL|L--7.7.FJF---JJ
|.J7.|FLF7|L7F|J.F7JLF-7|.FLLLJJLLJJJFJ|L-J7|J|7.LJLJ||LLFL-7||FJLJL7F7||||LJ||F-7|LJJ||J.|LL7LL-JLJJ|L||.|.FJJJ7JF--J|FLJL|||L||FJ-|.L-LF|.
F-JL7FJ7FJLFJ|L7-L7L-7-J--|-.|7FJ7J|7L7L---7J-||-L7|L7..||L7LJLJ7F--J|LJLJ|F7|LJF|L-7-||7-|7J|7.|FLJ|L7LJ--77-7.J.J777|JFJLJF-.F.|JF7|.|F-LJ
77F|7||7.LF7-JLLJL-JF|J|LL|JFFL-7|7|FFJF7F-J--JJ7LJJ7J.F77JF-----JF-7L---7||LJLF-JF7|LLJ7JLJ|L7F|JL||.J|F|..J7LF7FJF|-L-|LF-JJ-|.|-L7-7-FJ.|
|F77-J-77-FJ77F|7.|F|7L||FF7||||LJ-77L7|LJ777-|LL-J||FL-J.|L-7F7F-JF|F--7|LJJFLL-7|LJ.L||.|L||JFL7.JJF|--FJ7.L.|-JFLJ77FJ||.L7||.|L-LJJ.LFL7
F7J|-|LF|-7L-7-FF.LJL77.F|LL|F-7.F7LF7LJ7JFL7.|7F-.LL-JF|-7J.LJ||F--J|F7|L7JLL.|FLJ||.F-LJ7-L--7L|-FLJJ|LLJ|7FF-.F7-|JF-7FL--LL-7|F|J|L7J|-J
||L|F|.LJ7|J|L7JLF7LJ|FLJ|.|.-7L-L-7FJLJ-FJLJF7-|.F|-J-F-.L-7.LLJL--7LJ|L7|LJJF|FJ7|LJ-|7J|7||L|--.|J.--F7F|JFJ7.|JF7J.|--J7F7..JLJ7-|-|--.|
L7LL|FL7L|..L7.LLLJJ--J|.J-JJF777||LJ7L|LL.|--.-JFJ|7LF7.F|F-F-7|JLFJF-J-LJ.LLL77.JJ7.-J|7JL--JLJJ|LFF77|-FJF-.-.||LL--||FLFLJ7J.7J.L7F|.FF7
L|77|JF|7LF-L|F77-|-FLL|.L-J.LL|7J7LFF7L7..L7.-JJF7.FFJ-J-F|7-L-F--L7L-7J|-7|-F||-7LJ7L7L|7-FLFF-7L|.LLJJJJ.|J|.7F|7F-JF7--|.L||F|LJ-FLJFL-7
F|-LJ|FJJF-J|.L|J7J.LJ|J.L|7..|LLFJ7L||-L7|.LLJ.FL|-|J.L|F-|7|.||FF-L--J---JF--7JF7-||JFJLJ.FFLJ.-7LJ-L7.7--F7JLF7L-|F7JLJ..F7L7JLFLLF7FLF|J
F|-|.-JL--7F-7F|FL77|.-.FLF7.L|FFJFL-|J..LJ-FJ7L-.J-7.7-J.LLL-JJJF||.L|LLFL7LF..F7.F|L-7|J|--J|L.|7L|J|F||F7|F7LJ|-LFF-J|7LLJJ7||-J|LLJ7-77.
LL-JJJ.7JL7J.|-.L--77-L|JLFJ7.L-7JL.L|J.--7.L-JJJ.L.L7--LJ-|JJLLFFJJ-LL-7JLL.J-L-.F-7JJFF.L-LJL-77-F--J-L7L-LLL-LLJ.JJ|LF-J--JLFL.7JJLLJ-L.F

10
src/aoc10test.txt Normal file
View file

@ -0,0 +1,10 @@
.F----7F7F7F7F-7....
.|F--7||||||||FJ....
.||.FJ||||||||L7....
FJL7L7LJLJ||LJ.L-7..
L--J.L7...LJS7F-7L7.
....F-J..F7FJ|L7L7L7
....L7.F7||L7|.L7L7|
.....|FJLJ|FJ|F7|.LJ
....FJL-7.||.||||...
....L---J.LJ.LJLJ...

81
src/aoc11-2.lisp Normal file
View file

@ -0,0 +1,81 @@
(defun input-parsing (path)
(with-open-file (file path)
(let( (galaxies (make-array 0 :adjustable t)) )
(loop for line = (read-line file nil)
for current-line from 0
with galaxy-columns = '()
with galaxies-copy = (make-array 0 :adjustable t)
with data-line = nil
with key = ""
with left-value = ""
with right-value = ""
while line
do
(when(zerop current-line)
(dotimes (i (length line))
(push nil galaxy-columns)))
(loop for c across line
with char-position = 0
do
(when (char= c #\#)
(let( (size (+ 1 (length galaxies))) )
(adjust-array galaxies size) (adjust-array galaxies-copy size) (decf size)
(setf (aref galaxies size) (cons current-line char-position))
(setf (aref galaxies-copy size) (cons current-line char-position)))
;;(format T "~% ~d ~A" char-position galaxy-columns)
(setf (nth char-position galaxy-columns) t)
;;(setf (nth i parsed) nil)
(setf data-line t))
(incf char-position)
finally
(if (not data-line)
(setf current-line (+ current-line *replace-value*)))
;;(incf current-line)
(setf data-line nil))
finally
;;(print galaxy-columns)
;;(setf galaxies-copy galaxies)
(loop for occupied-column in galaxy-columns
for x-index from 0
do
(when (not occupied-column)
(loop for index from 0
while (< index (array-total-size galaxies-copy))
;;for galaxy in galaxies
do
;;(print x-index)
;;(print index)
(when (> (cdr (aref galaxies-copy index)) x-index)
;;(print (aref galaxies-copy index))
(setf (cdr (aref galaxies index)) (+ (cdr (aref galaxies index)) *replace-value*)))))))
;;(y . x)
(print galaxies)
galaxies)))
(defun calculate-pairs (galaxies)
(loop for base from 0
with result = 0
while (< base (array-total-size galaxies))
do
(loop for comparee from (+ base 1)
with x-movement = 0
with y-movement = 0
while (< comparee (array-total-size galaxies))
do
;;(print (aref galaxies base))
;;(print (aref galaxies comparee))
(setf y-movement (if(<= (car(aref galaxies base)) (car(aref galaxies comparee)))
(- (car(aref galaxies comparee)) (car(aref galaxies base)))
(- (car(aref galaxies base)) (car(aref galaxies comparee)))))
(setf x-movement (if(<= (cdr(aref galaxies base)) (cdr(aref galaxies comparee)))
(- (cdr(aref galaxies comparee)) (cdr(aref galaxies base)))
(- (cdr(aref galaxies base)) (cdr(aref galaxies comparee)))))
;;(print y-movement)
;;(print x-movement)
(setf result (+ result (+ x-movement y-movement))))
finally
(return result)))
(defparameter *replace-value* 999999)
(print (calculate-pairs (input-parsing "aoc11input.txt")))

120
src/aoc11.lisp Normal file
View file

@ -0,0 +1,120 @@
(defun input-parsing (path)
(with-open-file (file path)
(let( (galaxies (make-array 0 :adjustable t)) )
(loop for line = (read-line file nil)
for current-line from 0
with galaxy-columns = '()
with data-line = nil
with key = ""
with left-value = ""
with right-value = ""
while line
do
(when(zerop current-line)
(dotimes (i (length line))
(push nil galaxy-columns)))
(loop for c across line
with char-position = 0
do
(when (char= c #\#)
(let( (size (+ 1 (length galaxies))) )
(adjust-array galaxies size) (decf size)
(setf (aref galaxies size) (cons current-line char-position )) )
;;(format T "~% ~d ~A" char-position galaxy-columns)
(setf (nth char-position galaxy-columns) t)
;;(setf (nth i parsed) nil)
(setf data-line t))
(incf char-position)
finally
(if (not data-line)
(incf current-line))
;;(incf current-line)
(setf data-line nil))
finally
(loop for occupied-column in galaxy-columns
for x-index from 0
do
(when (not occupied-column)
(loop for index from 0
while (< index (array-total-size galaxies))
;;for galaxy in galaxies
do
(when (> (cdr (aref galaxies index)) x-index)
(setf (cdr (aref galaxies index)) (+ (cdr (aref galaxies index)) 1)))))))
galaxies)))
(defun calculate-pairs (galaxies)
(loop for base from 0
with result = 0
while (< base (array-total-size galaxies))
do
(loop for comparee from (+ base 1)
with x-movement = 0
with y-movement = 0
while (< comparee (array-total-size galaxies))
do
;;(print (aref galaxies base))
;;(print (aref galaxies comparee))
(setf y-movement (if(<= (car(aref galaxies base)) (car(aref galaxies comparee)))
(- (car(aref galaxies comparee)) (car(aref galaxies base)))
(- (car(aref galaxies base)) (car(aref galaxies comparee)))))
(setf x-movement (if(<= (cdr(aref galaxies base)) (cdr(aref galaxies comparee)))
(- (cdr(aref galaxies comparee)) (cdr(aref galaxies base)))
(- (cdr(aref galaxies base)) (cdr(aref galaxies comparee)))))
;;(print y-movement)
;;(print x-movement)
(setf result (+ result (+ x-movement y-movement))))
finally
result))
(print (calculate-pairs (input-parsing "aoc11input.txt")))
;;(print "Hola")
;;(print (aref keys 0))
;; (incf (nth 0 steps-per-key))
;; (if(char= c #\L)
;; (setf (aref keys 0) (cdr(gethash (aref keys 0) route-hash)))
;; (setf (aref keys 0) (cdr(gethash (aref keys 0) route-hash))))
;; ;;(print (aref keys 0))
;; (when(char= (char (aref keys 0) 2) #\Z)
;; (format T "~%~a ~d" "Ayo on key 0 found at: " (nth 0 steps-per-key))
;; (dotimes (i (length keys))
;; ;;(print (+ i 1))
;; ;;(print (length keys))
;; ;;(when (< (+ i 1) (length keys))
;; (when (> i 0)
;; ;;WTF
;; (sb-thread:make-thread (lambda () (hashmap-parse route-hash direction-line (length direction-line) (- i 1) (nth 1 steps-per-key) (nth 0 steps-per-key)) ) )
;; ;;(format T "~%~d" i)
;; )
;; )
;; (loop while (not (every #'null parsed))
;; do
;; ;;(print parsed)
;; (sleep 1))
;; (dotimes (i (length parsed))
;; (if (= i 0)
;; (setf (nth i parsed) nil)
;; (setf (nth i parsed) t)))
;; (loop with i = 1
;; with failure = nil
;; while (and(< i (length keys)) (not failure))
;; do
;; (setf (nth i steps-per-key) (nth 0 steps-per-key))
;; (if(char= (char (aref keys i) 2) #\Z)
;; (progn
;; (incf i) )
;; (setf failure t))
;; finally
;; (if(= i (length keys))
;; (setf goal-to-be-reached t))
;; ))
;; )
;; (print (nth 0 steps-per-key))
;; (setf keys (make-array 0 :adjustable t))
;; (setf parsed '())))
;; )

140
src/aoc11input.txt Normal file
View file

@ -0,0 +1,140 @@
.....................#......#...................#...............#........................................#..................................
...........................................................#.............................................................#..................
.....................................................................#.........#......#...........#.............#...........................
.....................................................#.......................................#..............................................
......#.................................#..........................................................................................#........
....................#.........#.............................................................................#...............................
..#.........................................................#.............................................................................#.
........................................................................................#...........#..................#....................
........#....................................#........................#.........................................................#...........
..............................................................................#................................#............................
..................................................#............#............................................................................
.........................#......#........#................................................#..........................................#......
......#..............................................................................#...............#......................................
...................................................................#........................................................................
....................#...........................#............................................................#..............#.....#.........
..................................#....................#.........................................#......#..............................#....
.#..........................................................................................................................................
........#.....#........................#...........#.............#.....................#....................................................
..........................#.................................#.....................#.........................................................
.............................................................................................................................#.............#
...................................#......................................................#....................#............................
.....................#...................#............#..................#.............................................#...........#........
..............................................................................................#.............................................
....#..........#...............#..........................................................................#.................................
.............................................#..............................................................................................
...................................................................#..............#.................................#.......................
..................#........................................................#................................................................
..#.................................#...................#..............................#.........................................#.......#..
...............................................................#...............#.....................#..........#.........#.................
.........#......................#.............................................................#.............................................
..............#...............................#.............................................................................................
........................................#.................................#............................................................#....
..............................................................................................................#......#......#...............
.........................#..........#.............................................#........#................................................
....................................................................#.....................................#.................................
....#...............#........#...............................#........................#........................................#............
........................................................#...................................................................................
............................................#...........................#......................#.....#......................................
.........................................................................................#.............................................#....
...........#....................#..................................#.................................................#...........#..........
.#..........................................................................................................................................
................#........................#..........#.......................................................................................
........................#........................................................................................#..........................
........................................................................#.........#...................#...................#.................
........................................................#......................................................................#............
.....#.....................................................................................#................................................
...............#...................................#.................#..............................................................#.......
.........#..................#..................................#..................................................#.........................
......................................#.......#....................................#......................................................#.
..........................................................................................................#......................#..........
...#..............#.......................#.....................................................#...........................................
................................#...............................................#..........#................................................
..........................#......................#......................#...................................................................
..................................................................#................................#........................................
......................................................#.................................#.........................#...................#.....
..............#..........................#..................................................................................#...............
......#......................#.................................................................#...........#................................
.............................................................................#..............................................................
.......................#..........................#......................................................................#..........#.......
.#.................................#................................................................#....................................#..
........#......#................................................#...............................................#...........................
..........................................................................#.....#.........................#...........#.....#...............
............................#..............#..........#....................................#................................................
............................................................................................................................................
............#..........#....................................................................................................................
............................................................#.......................#..............#........................................
.....................................#...............................#...................................#..................................
.........#.....................................................................#.....................................#...............#.....#
#.............#.............................................................................................................................
......................................................#....................................#....................................#...........
...................................................................#............................................#...........................
............................................................................................................................................
....................#............................#................................................#......................................#..
.............................#...................................................#..........................................................
.........................................................................#...............#.................#................................
.............#.........#.........#.....#......................#............................................................#................
............................................................................................................................................
.............................................#..........#.....................#..................................#..........................
............................................................................................................................................
...................................#.............#................#.....#.....................................................#.............
....#.....................#..................................#..............................................................................
............................................................................................................................................
#.....................................#...................................................................................#.................
...............................................#......................#.....#...................................#...........................
.........#...................#.....................................................#.................#......................................
.......................#...............................#........................................#..............................#............
...#.....................................#..................................................................#...............................
...................................................#......................................#...........................................#.....
.................#..........................................................................................................................
...................................................................................................................#......#.................
.................................#..............#.....#......................#.................#.........#..................................
#....................................................................#........................................#...........................#.
............................................................................................................................................
.........................#..................................................................................................................
...............................#.......................................................................................#....................
..........#...................................#..................#.....................#....................#...............................
............................................................................#.....#.........................................................
....#............#............................................................................#.......#..........#..........................
..................................................................................................................................#.........
...................................#...........................................#............................................................
.............................#..........................#.................................#........#........................................
..............#....................................................#........................................#.............#...........#.....
...............................................#.............#.......................................................#......................
........#..............................................................#....................................................................
.......................................................................................#........#...........................................
......................#........#.........................#..................#........................#......................#...............
.#.........#.....#..............................................#........................................................................#..
.....................................................#......................................................................................
.........................................#...........................#..............................................#.......................
.............................................................#................................................#................#............
......#.......................................#.......................................#...............#.....................................
....................#.......#............................#................#...........................................................#.....
...........#.....................................................................................................#..........................
..........................................................................................#..............#..................................
..................................................#..........................................................................#..............
...............#............................................#.....................................................................#.........
........................#...........................................#............................#..................#.......................
................................................................................#..............................#.......................#....
......................................#...................................#..............#..............#...................................
..#............................................#..............#...........................................................#.................
.........#........................#...................#.....................................................................................
.............................#..............................................................................................................
....................................................................................#.......................................................
.........................#.............#............................................................#......#......#.........#......#........
...................#...........................................................................#...........................................#
.......#...............................................#.....#........#..........#..........................................................
..............#....................#........................................................................................................
........................................................................................................#.................#...........#.....
..#...............................................................#.........#.......#.......................................................
.........#......................#..........................#.....................................#............#.............................
...................#.................................#.................................................................#....................
....................................#.......................................................................................................
...........................#......................................................................................................#.........
............................................#.................#............#...................#.......#...................#................
............#.....................................#.........................................................................................
...........................................................................................................#......#.........................
.....................................#..............................................#......#................................................
.........................................................................#..............................................#...................
#....................#........#...................................................................#.....................................#...
.....#........................................#.........#........................#..........................................................

10
src/aoc11test.txt Normal file
View file

@ -0,0 +1,10 @@
...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....

View file

@ -1,91 +1,231 @@
;; #!/bin/sbcl --script
(defun seed-list (seed-string)
(let ((temp-string "") (source-parsed nil) (temp-source 0) (temp-range 0) (index 0) (return-list '()))
(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)))
(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)
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
(defun seed-list (seed-string)
(let ((temp-string "") (return-list '()) (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 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 range (parse-integer temp-string))
(setf return-list (append return-list (list (+ base (- range 1)) ))))
return-list))
(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))))
(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 "")
(loop for line = (read-line file nil)
while line
do
(when (equalp 0 (length line))
(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)
(progn
(setf digit-line t)
(setf temp-string (format nil "~a~c" temp-string c)))
(if digit-line
(progn
(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
;;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)) ))

View file

@ -274,4 +274,4 @@ humidity-to-location map:
2575348595 2130499969 195699098
593882556 705484119 648158843
3871554698 3932373353 42274873
2998499327 1650316948 79272282
2998499327 1650316948 79272282

View file

@ -30,4 +30,4 @@ temperature-to-humidity map:
humidity-to-location map:
60 56 37
56 93 4
56 93 4

View file

@ -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)))

162
src/aoc8-2.lisp Normal file
View file

@ -0,0 +1,162 @@
#!/bin/sbcl --script
(defparameter keys (make-array 0 :adjustable t))
(defparameter parsed '())
(defparameter steps-per-key '())
(print (sb-thread:list-all-threads))
(with-open-file (file "aoc8input.txt")
(let( (goal-to-be-reached nil) (direction-line "") (route-hash (make-hash-table :test #'equalp :size 800)))
;;Prep work
(defparameter keys (make-array 0 :adjustable t))
(defparameter parsed '())
(setf direction-line (read-line file nil))
;;(setf direction-line (subseq temp-first-line (+ 2 (position #\: temp-first-line :test #'equalp)) (length temp-first-line) ))
;;(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)
with key = ""
with left-value = ""
with right-value = ""
while line
do
(setf key (subseq line 0 (- (position #\= line :test #'equalp) 1) ))
(setf left-value (subseq line (+ 1 (position #\( line :test #'equalp)) (position #\, line :test #'equalp) ))
(setf right-value (subseq line (+ 2 (position #\, line :test #'equalp)) (position #\) line :test #'equalp) ))
(setf (gethash key route-hash) (cons left-value right-value))
(when(char= #\A (char key 2))
(let( (size (+ 1 (length keys))) )
(adjust-array keys size) (decf size)
(setf (aref keys size) key) )))
(dotimes (i (length keys))
(push 0 steps-per-key)
(push t parsed))
(setf (nth 0 parsed) nil)
;;(print steps-per-key)
;;(print parsed)))
(loop while (not goal-to-be-reached)
do
(loop for c across direction-line
while (not goal-to-be-reached)
do
;;(print "Hola")
;;(print (aref keys 0))
(incf (nth 0 steps-per-key))
(if(char= c #\L)
(setf (aref keys 0) (car(gethash (aref keys 0) route-hash)))
(setf (aref keys 0) (cdr(gethash (aref keys 0) route-hash))))
;;(print (aref keys 0))
(when(char= (char (aref keys 0) 2) #\Z)
;;(format T "~%~a ~d" "Ayo on key 0 found at: " (nth 0 steps-per-key))
(dotimes (i (length keys))
(when (> i 0)
(sb-thread:make-thread (lambda (x hashmap dir strlen steps) (hashmap-parse hashmap dir strlen x steps) ) :arguments (list i route-hash direction-line (length direction-line) (nth i steps-per-key)))))
(loop while (not (every #'null parsed))
do
(print parsed)
(sleep 1))
(print steps-per-key)
(setf goal-to-be-reached t)
(print (apply #'lcm (append steps-per-key (list (length direction-line)))))))))
(print "awaa")
;;(print (nth 0 steps-per-key))
(setf keys (make-array 0 :adjustable t))
(setf parsed '()))
(defun starting-char (strlen steps)
(loop while (>= steps strlen)
do
(setf steps (- steps strlen)))
steps)
(defun hashmap-parse (hashmap direction-string strlen key-position steps)
(let( (current-char (starting-char strlen steps) ) (z-found nil) )
;;(print steps)
(loop while (not z-found)
do
(incf steps)
;;(format T "~%~c" direction-char)
;;(print current-char)
(if(char= (char direction-string current-char) #\L)
(setf (aref keys key-position) (car(gethash (aref keys key-position) hashmap)))
(setf (aref keys key-position) (cdr(gethash (aref keys key-position) hashmap))))
(incf current-char)
(when(= current-char strlen)
(setf current-char 0))
(when(char= (char (aref keys key-position) 2) #\Z)
(setf z-found t)
(setf (nth key-position parsed) nil)
(setf (nth key-position steps-per-key) steps)))))
;; (defvar *directions*)
;; (defvar *ndirections*)
;; (defvar *map* (make-hash-table :test #'equal))
;; ;;(setf *print-circle* t)
;; (defun parse-file (path)
;; (with-open-file (file path)
;; (loop
;; :with first-line = (read-line file nil)
;; :with second-line = (read-line file nil)
;; :initially
;; ;; Parse first line
;; (setf *directions* (coerce first-line 'list))
;; ;; Turn directions into a cyclical list
;; (setf *ndirections* (length *directions*))
;; (setf (cdr (last *directions*)) *directions*)
;; :for line = (read-line file nil)
;; :while line
;; :for key = (subseq line 0 3)
;; :for left = (subseq line 7 10)
;; :for right = (subseq line 12 15)
;; :do
;; (setf (gethash key *map*) (cons left right)))))
;; (defun part-1 ()
;; (loop :for direction = (car p)
;; :for current-node = "AAA" :then (if (char= #\L direction) (car paths) (cdr paths))
;; :for p = *directions* :then (cdr p)
;; :for paths = (gethash current-node *map*)
;; :for n :from 0
;; :until (string= current-node "ZZZ")
;; ;; :do (format t "Step ~S:~%~tCurrent node: ~S~%~tLast direction: ~S~% Possible paths: ~S~%" n current-node direction paths)
;; :finally
;; (print n)))
;; (defun part-2 ()
;; (loop :with initial-keys = (loop :for key :being :the :hash-keys :of *map* :if (char= (char key 2) #\A) :collect key)
;; :with distance-maps = (loop :for key :in initial-keys :collect (make-hash-table :test #'equal))
;; :for key :in initial-keys
;; :for distance-map :in distance-maps
;; :do
;; (setf (gethash key distance-map) 0)
;; (explore-map distance-map key 1)
;; :finally
;; (return (apply #'lcm (append (mapcar #'cdar (mapcar #'distance-to-z distance-maps)) (list *ndirections*))))
;; ;;(return distance-maps)
;; ))
;; (defun distance-to-z (distance-map)
;; (loop :with z-keys = (loop :for key :being :the :hash-keys :of distance-map :if (char= (char key 2) #\Z) :collect key)
;; :for key :in z-keys
;; :collect (cons key (gethash key distance-map))))
;; (defun explore-map (distance-map node distance)
;; (let ((options (gethash node *map*)))
;; (when (> (gethash (car options) distance-map 9999) distance)
;; ;; We found a shorter path
;; (setf (gethash (car options) distance-map) distance)
;; (explore-map distance-map (car options) (1+ distance)))
;; (when (> (gethash (cdr options) distance-map 9999) distance)
;; ;; We found a shorter path
;; (setf (gethash (cdr options) distance-map) distance)
;; (explore-map distance-map (cdr options) (1+ distance)))
;; ))

40
src/aoc8.lisp Normal file
View file

@ -0,0 +1,40 @@
;; #!/bin/sbcl --script
(with-open-file (file "aoc8input.txt")
(let( (key "AAA") (steps 0) (goal-to-be-reached nil) (direction-line "") (route-hash (make-hash-table :test #'equalp :size 800)) )
;;Prep work
(setf direction-line (read-line file nil))
;;(setf direction-line (subseq temp-first-line (+ 2 (position #\: temp-first-line :test #'equalp)) (length temp-first-line) ))
;;(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)
with key = ""
with left-value = ""
with right-value = ""
with cell = nil
while line
do
(setf key (subseq line 0 (- (position #\= line :test #'equalp) 1) ))
(setf left-value (subseq line (+ 1 (position #\( line :test #'equalp)) (position #\, line :test #'equalp) ))
(setf right-value (subseq line (+ 2 (position #\, line :test #'equalp)) (position #\) line :test #'equalp) ))
(setf (gethash key route-hash) (cons left-value right-value))
)
(loop for key being the hash-keys of route-hash
using (hash-value value)
do (format t "~%The value associated with the key ~a is ~A" key value))
(loop while (not goal-to-be-reached)
do
(loop for c across direction-line
while (not goal-to-be-reached)
do
(print key)
(incf steps)
(if(char= c #\L)
(setf key (car(gethash key route-hash)))
(setf key (cdr(gethash key route-hash))))
(if (string= key "ZZZ") (setf goal-to-be-reached t)) ))
(print steps)))

796
src/aoc8input.txt Normal file
View file

@ -0,0 +1,796 @@
LRRLRLRRRLLRLRRRLRLLRLRLRRLRLRRLRRLRLRLLRRRLRRLLRRRLRRLRRRLRRLRLRLLRRLRLRRLLRRRLLLRRRLLLRRLRLRRLRLLRRRLRRLRRRLRRLLRRRLRRRLRRRLRLRRLRLRRRLRRRLRRLRLRRLLRRRLRRLLRRLRRLRLRLRRRLRLLRRRLRRLRRRLLRRLLLLLRRRLRRLLLRRRLRRRLRRLRLLLLLRLRRRLRRRLRLRRLLLLRLRRRLLRRRLRRRLRLRLRRLRRLRRLRLRLLLRLRRLRRLRRRLRRRLLRRRR
RBX = (TMF, KTP)
RBP = (MKS, MKS)
CGR = (XDR, VDX)
KBX = (DGP, JKM)
BNJ = (NJC, QRL)
BXQ = (DKX, CJQ)
NDX = (PHJ, TRQ)
KFQ = (KXN, GBQ)
LRF = (CTS, MTT)
RTN = (VMK, JTK)
QKP = (FDS, SFG)
BVB = (BHS, VRQ)
NBT = (BPJ, DFF)
HQM = (QMV, XVG)
XMR = (RKH, NJQ)
PHC = (XHP, DKM)
HTX = (BXK, BQP)
TPJ = (TNQ, QDX)
RDJ = (KHB, MFG)
XTF = (PPR, FHG)
DVA = (DBM, MVD)
HFP = (CXV, VCD)
HPS = (GTD, NBL)
LBK = (FVN, LHX)
KKS = (FKM, LHN)
FJV = (LVN, PLP)
MLH = (SFR, RJK)
SVQ = (RCS, FFD)
PTB = (TMC, QCR)
RFL = (RXP, VRL)
PTH = (XTS, GFG)
QNM = (TJR, MHX)
BJT = (PJG, SHG)
JJD = (FMJ, QVV)
GMX = (CLD, QRM)
DGZ = (BSL, BRS)
BVM = (SFC, JGD)
GNQ = (PLP, LVN)
XPG = (VLH, BCM)
PND = (RXV, VGM)
RNV = (GVL, MTB)
JSG = (QVP, XCX)
QHP = (KQG, BML)
XBK = (NPP, CRN)
QRL = (RQH, BGH)
HDJ = (VRQ, BHS)
XPD = (HSB, LRC)
KJK = (XCV, MDG)
NJB = (RKL, SHQ)
MCQ = (XFT, MRQ)
QRC = (XVS, CSN)
FCT = (DFF, BPJ)
MTF = (PQT, CNQ)
RXG = (QVP, XCX)
MVZ = (QRC, GHJ)
RKL = (QQM, BFT)
VRT = (GMJ, BDK)
BNS = (HQV, HPS)
JSQ = (HTC, PGD)
BHB = (VGQ, BTM)
NLP = (RKB, XQB)
FGF = (CVK, VRT)
FPM = (GDS, LTG)
BCX = (NDX, GSL)
GVL = (VCX, PSP)
KRM = (MHK, JCX)
GLJ = (XNX, RKP)
LBV = (FDC, TPJ)
GSP = (KMC, LQR)
TFR = (HXJ, MFJ)
DLX = (FNK, GLJ)
DKX = (XSR, LHP)
SVR = (KPX, QTM)
JMT = (GXV, RTX)
XSX = (HHD, HHD)
RJF = (BRH, HGP)
BDK = (TGX, HKP)
TFF = (DSX, DSX)
TJR = (BKB, LCB)
BDQ = (CLD, QRM)
NTC = (BQL, BQL)
CVS = (RQC, FFV)
BML = (VNT, JRH)
CBK = (TGB, RTN)
HQV = (GTD, NBL)
PDT = (SRQ, MLD)
RXV = (KJK, FCD)
XTS = (SCG, KQJ)
PXG = (LKG, MTQ)
PCX = (FKJ, FCV)
HKR = (LMK, BJR)
CKK = (XSX, XSX)
TNP = (TDH, JPR)
PCH = (RBP, PQH)
KHB = (RQR, BXQ)
CJZ = (CNC, HJX)
JPN = (FRP, QTB)
RKP = (NKH, FQC)
BDP = (GCM, VKT)
HQX = (TQF, NJB)
PFV = (FPM, VNP)
NFQ = (GFX, GXH)
STX = (MCQ, DNS)
CKX = (CFS, BNS)
NRJ = (SBG, TLK)
DHS = (VBH, VMT)
TVL = (BPQ, NBM)
QTF = (MPS, RJB)
FHV = (LMK, BJR)
JCV = (JSQ, STQ)
RGX = (GVL, MTB)
CTS = (PCB, GJV)
RCS = (TNT, XTF)
PCS = (NJH, RLX)
KNG = (CHP, FNN)
FJL = (KKH, QGQ)
CPK = (KTX, CGR)
BLF = (PCQ, TKN)
FCR = (STF, SVQ)
BSL = (GFJ, CDL)
FKS = (GRG, JSB)
FCM = (LFX, RJF)
XLK = (CDP, CBD)
KNB = (VGQ, BTM)
KGC = (TJR, MHX)
JHM = (JSP, XDN)
HFN = (STF, SVQ)
GCM = (CKX, KPS)
CGV = (MHK, JCX)
TQP = (JRM, XSB)
GSM = (FJV, GNQ)
KBL = (DLX, BGD)
CBC = (MQK, RRF)
NJM = (KLQ, BVL)
THG = (CPG, PND)
DXP = (HDJ, BVB)
DTT = (XDN, JSP)
PLP = (BKF, FGP)
MSZ = (MVD, DBM)
BQC = (NPL, VXF)
CGB = (LRM, MTH)
RLX = (DBT, RJN)
RXP = (HFP, JNS)
TTH = (QNF, KNG)
LHS = (QFR, GTN)
NBL = (THT, VTQ)
DRS = (PJH, STX)
PSP = (CPK, QKF)
PPR = (LQK, VSN)
QHT = (RLG, TDG)
FVM = (MLR, HXF)
DHB = (CQC, BKK)
MVP = (GHJ, QRC)
TDG = (RVX, CDB)
LKN = (HXF, MLR)
CNR = (KCV, CDR)
SMC = (BBR, BMS)
QDP = (LXV, VPS)
LLD = (CGC, NGQ)
KXN = (PRR, PSR)
LRC = (SHB, PBK)
SQD = (LBV, CRP)
QTB = (KNS, JTS)
MTT = (GJV, PCB)
GMV = (JNH, MJF)
DTG = (SQD, KVV)
RTV = (DSB, SJB)
CDL = (FTQ, CPN)
JHR = (JRM, XSB)
BFP = (PFG, MTD)
DTB = (NDX, GSL)
SQM = (CXL, NBD)
NBP = (KBN, LQH)
BTC = (LJT, TCV)
PQT = (PXG, BSF)
QDH = (FPM, VNP)
VPT = (PRT, VHJ)
VKC = (GXK, QSB)
NXB = (QKP, TGK)
FDF = (VRT, CVK)
NTG = (FRV, BQR)
RKB = (PHC, JSD)
MHV = (XXL, THG)
PHV = (SNM, TFR)
XRK = (JNN, LKR)
XVS = (CBK, NNM)
GDQ = (BDQ, GMX)
TKR = (CKJ, LVQ)
XCX = (LSP, FNB)
JCX = (FGF, FDF)
MFJ = (DBB, HBH)
BQP = (HRT, DQD)
VNC = (BDQ, GMX)
SSC = (LQH, KBN)
TJD = (QFV, KRS)
NKL = (CKK, DDC)
NTM = (QHG, MCC)
JBQ = (HXV, JPN)
DGP = (FVM, LKN)
SJB = (LRQ, DMG)
LJT = (MMT, MDL)
RFC = (MVM, JXP)
FFV = (TPG, QMD)
PJH = (DNS, MCQ)
VCD = (FHV, HKR)
MPS = (DHH, LPT)
VHJ = (RGX, RNV)
FLT = (FRF, NHG)
DSF = (SDV, VKC)
HJQ = (CDR, KCV)
BQR = (PDX, PMX)
CRJ = (BPN, KKS)
MQN = (PNN, DHB)
KCC = (KMC, LQR)
BTH = (VLH, BCM)
KNS = (GGM, SJS)
SCG = (MBF, RDR)
VDQ = (JNN, LKR)
XFT = (VPT, FLH)
RDR = (GTF, GJR)
CXS = (RRF, MQK)
XDN = (SSF, VGC)
JPR = (VGX, TCF)
BTF = (LKM, GBG)
GCJ = (VPS, LXV)
FGJ = (XVG, QMV)
MBF = (GJR, GTF)
TPG = (TND, QSF)
BNR = (BHG, SMC)
GJV = (FLB, PCX)
LQF = (BJT, KTN)
VSB = (JVB, FVK)
NHB = (HQX, LLQ)
CKC = (PJD, TRS)
JVB = (QQV, NRS)
BKK = (LSR, LJN)
SBV = (GTN, QFR)
JMK = (MFG, KHB)
LPX = (NBP, SSC)
KLJ = (CDX, VTL)
KQJ = (RDR, MBF)
VMK = (JXJ, BMT)
TRS = (LQM, JJD)
KCM = (XBD, XMH)
JCT = (NFQ, NDJ)
FGM = (HMK, PGQ)
QKK = (RLS, LPX)
QJD = (PDT, RPQ)
LHP = (PLN, MQN)
NPL = (TFF, TFF)
XHP = (PJQ, KBL)
HMK = (JNV, XPS)
KMC = (VCG, NTG)
QDX = (TMM, HHM)
VNP = (LTG, GDS)
PDR = (CDX, VTL)
HVK = (BQC, SCN)
QMV = (BNJ, CRL)
DDR = (KRS, QFV)
RDG = (QHP, QXN)
CRL = (NJC, QRL)
SHB = (SQX, JVV)
TSP = (BPX, FVC)
RRF = (KJB, PTB)
CSG = (FRX, RTP)
RPQ = (SRQ, MLD)
VXS = (MTN, DJQ)
PJK = (NGD, NTM)
QHG = (NXT, DHS)
LSP = (MTR, GGH)
SHN = (JJS, RVC)
TNQ = (TMM, HHM)
NPK = (GCM, VKT)
MJF = (NBT, FCT)
JNN = (PTH, HFK)
NRS = (CLT, HGV)
HSX = (BPX, FVC)
MVM = (DSF, NQS)
PBK = (SQX, JVV)
HHD = (DBM, MVD)
MTD = (DVB, BTX)
PXP = (NPP, CRN)
TMF = (LPF, QPD)
BRT = (FJV, GNQ)
MFQ = (BHG, SMC)
DJQ = (MVP, MVZ)
LKR = (PTH, HFK)
STQ = (HTC, PGD)
DXF = (JBX, TRT)
RJN = (PDR, KLJ)
CGC = (KKL, RJV)
SRG = (QKK, LND)
MCC = (DHS, NXT)
JMG = (RLX, NJH)
NKH = (DGF, FJL)
JXP = (DSF, NQS)
GXX = (CKC, MFL)
MXD = (KBC, FGK)
SCH = (XPG, BTH)
XSR = (MQN, PLN)
KKD = (NBD, CXL)
CLJ = (GCN, GCN)
QVV = (THK, LQV)
VLH = (FFB, STD)
RTP = (CBC, CXS)
RVX = (BLF, PTM)
KBN = (JNF, BTC)
PFX = (JHM, DTT)
NVL = (KCM, DLK)
QRM = (CQK, RBB)
HKP = (SHN, TMV)
VXF = (TFF, JRP)
LDL = (LHM, JMT)
BQL = (DRS, VQQ)
FDC = (TNQ, QDX)
MMT = (MSL, JCT)
CXV = (HKR, FHV)
BKB = (FCM, QTC)
HRQ = (RXG, JSG)
RKH = (JFF, TKR)
VQR = (JGD, SFC)
KCV = (LNG, NCV)
XSB = (DTG, DFK)
JGD = (HLP, FNS)
VCK = (RXP, VRL)
GTN = (BCP, CKB)
QDK = (CBD, CDP)
SNF = (JNH, MJF)
FVK = (QQV, NRS)
HHM = (VXK, PJK)
JRM = (DTG, DFK)
QPL = (XLK, QDK)
SCV = (QHP, QXN)
RQC = (QMD, TPG)
LFX = (BRH, HGP)
FRX = (CXS, CBC)
BTM = (FPK, JVF)
BPN = (LHN, FKM)
LRQ = (LSQ, PMP)
TPV = (LQF, KDN)
XBN = (QDS, DXP)
RBB = (FCR, HFN)
XSM = (LNT, STB)
SBR = (PQT, CNQ)
LVM = (SBV, LHS)
KBC = (JHR, TQP)
DLJ = (FGK, KBC)
LKG = (VJX, HLQ)
NXT = (VMT, VBH)
CBD = (HGN, HBG)
BHS = (VTF, MRV)
BTP = (GBG, LKM)
DSM = (CKK, CKK)
LSR = (CMB, NLP)
NPP = (BCX, DTB)
XCV = (SMS, QJD)
PNM = (BPQ, NBM)
VPS = (JJB, XMR)
JNH = (FCT, NBT)
KTN = (SHG, PJG)
FMJ = (LQV, THK)
GFX = (NBB, NBB)
SRQ = (GNS, QGB)
FQC = (DGF, FJL)
MPA = (BRS, BSL)
BMS = (FKS, SKF)
BMT = (JMG, PCS)
QFV = (SCH, FDJ)
STF = (RCS, FFD)
JTS = (GGM, SJS)
NJQ = (TKR, JFF)
MTQ = (HLQ, VJX)
FGK = (TQP, JHR)
JNF = (TCV, LJT)
LKM = (KGC, QNM)
MXV = (BQP, BXK)
FRF = (LVM, HGK)
GGH = (BHB, KNB)
BGH = (KBX, FDN)
LQH = (JNF, BTC)
JVF = (LDS, DCD)
CLT = (QPL, LFV)
HRV = (TRD, RXH)
NBD = (PXP, XBK)
PJD = (JJD, LQM)
XMV = (BBF, LKX)
BCN = (PBH, HPL)
XMH = (JNG, GCX)
HFK = (GFG, XTS)
VTL = (RFC, VPF)
MSL = (NFQ, NDJ)
THH = (KNG, QNF)
PCB = (PCX, FLB)
GBQ = (PRR, PSR)
NMS = (BQC, SCN)
PDX = (BGP, SFH)
LDS = (TLJ, LLD)
HGV = (QPL, LFV)
LMK = (VKX, JCV)
NBM = (PKR, QCS)
NLR = (LKJ, DGZ)
QDN = (TRT, JBX)
MTH = (HMT, NJM)
CKF = (LKJ, LKJ)
FDN = (DGP, JKM)
CDR = (NCV, LNG)
SGJ = (GBQ, KXN)
TMM = (VXK, PJK)
JSL = (CTS, MTT)
QGB = (TBK, NHB)
TDA = (GHJ, QRC)
GTF = (QDP, GCJ)
TCG = (FVK, JVB)
LXJ = (FVN, LHX)
TQF = (RKL, SHQ)
ZZZ = (VQQ, DRS)
NCV = (CRJ, GBL)
BKF = (CJP, PRL)
QPD = (DQN, JBQ)
MFL = (PJD, TRS)
NHG = (HGK, LVM)
MRV = (MLH, TBV)
XHS = (PSN, HRQ)
JJB = (NJQ, RKH)
TGK = (SFG, FDS)
CGS = (TRD, RXH)
GCN = (NCN, CVS)
PNN = (BKK, CQC)
LSQ = (KCC, GSP)
LND = (RLS, LPX)
CPG = (VGM, RXV)
GSF = (HMJ, RMH)
JRH = (VQR, BVM)
FJB = (DTT, JHM)
FKM = (BFK, XCQ)
LPT = (PRD, CGB)
XVG = (CRL, BNJ)
KRS = (FDJ, SCH)
BNL = (BQL, ZZZ)
JMB = (XVD, MBH)
KKH = (RLN, PHV)
MTB = (PSP, VCX)
NCN = (FFV, RQC)
FVC = (QJC, SRG)
FTS = (THG, XXL)
SFG = (BCN, DBN)
RXH = (XQT, SDR)
MLR = (GDQ, VNC)
TRD = (XQT, SDR)
BGD = (GLJ, FNK)
XDJ = (MPS, RJB)
JMJ = (MDJ, RTV)
RVC = (PXQ, NRJ)
QQV = (CLT, HGV)
MLD = (QGB, GNS)
KPH = (HRQ, PSN)
RLN = (TFR, SNM)
JRP = (DSX, HPD)
SJS = (DSM, NKL)
PGD = (CGS, HRV)
HPL = (GKH, CVN)
MQK = (PTB, KJB)
QCR = (MHV, FTS)
VCG = (BQR, FRV)
LXV = (XMR, JJB)
PKR = (QSH, XMV)
JSB = (DLJ, MXD)
VRL = (JNS, HFP)
PHJ = (BTF, BTP)
CXL = (XBK, PXP)
FNN = (TSP, HSX)
XQT = (VHH, QHT)
LQV = (DQK, JMB)
RLS = (NBP, SSC)
TCV = (MDL, MMT)
QTC = (LFX, RJF)
LRK = (MFL, CKC)
MHK = (FGF, FDF)
RLJ = (HJX, CNC)
TLK = (RFL, VCK)
CNC = (HJQ, CNR)
LQL = (FRX, RTP)
QQM = (MFQ, BNR)
VBH = (HLB, JMJ)
GKX = (TGK, QKP)
KQG = (JRH, VNT)
XDR = (DNF, KJV)
GMJ = (HKP, TGX)
VRQ = (VTF, MRV)
HGP = (VNB, LDL)
LNG = (GBL, CRJ)
BSF = (LKG, MTQ)
BRH = (VNB, LDL)
PJQ = (BGD, DLX)
QKF = (CGR, KTX)
QMD = (TND, QSF)
PQH = (MKS, STP)
FRV = (PDX, PMX)
LPF = (JBQ, DQN)
CQM = (TDH, JPR)
HJX = (CNR, HJQ)
AAA = (DRS, VQQ)
TDH = (VGX, TCF)
TGX = (TMV, SHN)
BDH = (XFV, GSF)
GXK = (BFP, TFH)
BFT = (MFQ, BNR)
NGD = (QHG, MCC)
FPK = (DCD, LDS)
MTR = (KNB, BHB)
SNM = (MFJ, HXJ)
HLP = (RHQ, SVR)
JSP = (VGC, SSF)
NJH = (RJN, DBT)
SKF = (GRG, JSB)
PTM = (TKN, PCQ)
QGQ = (PHV, RLN)
SSF = (NVL, JPB)
PCQ = (LTC, PCH)
KJV = (GMS, XGF)
JSD = (XHP, DKM)
RRB = (LQF, KDN)
GJJ = (FLT, BNV)
FJA = (HJX, CNC)
HLQ = (XRK, VDQ)
KTP = (LPF, QPD)
PRD = (LRM, MTH)
QNF = (CHP, FNN)
DQK = (MBH, XVD)
TMS = (CLJ, XML)
QVP = (FNB, LSP)
BPX = (QJC, SRG)
QXN = (KQG, BML)
VGQ = (JVF, FPK)
BRS = (CDL, GFJ)
NQS = (VKC, SDV)
LFV = (XLK, QDK)
SMS = (RPQ, PDT)
BBF = (CGV, KRM)
VMT = (HLB, JMJ)
QSF = (JSL, LRF)
CJQ = (XSR, LHP)
RDF = (KKD, SQM)
MKS = (CKF, CKF)
STD = (MNM, TMS)
DNS = (MRQ, XFT)
MFG = (RQR, BXQ)
GBG = (QNM, KGC)
JNG = (RDG, SCV)
CVN = (GJJ, QVC)
HMT = (BVL, KLQ)
VTQ = (NTC, BNL)
TGB = (JTK, VMK)
PSR = (NPK, BDP)
MDJ = (DSB, SJB)
CKB = (VSB, TCG)
DNF = (GMS, XGF)
LQK = (XFR, RDF)
RHQ = (KPX, QTM)
VKX = (STQ, JSQ)
BRX = (DDR, TJD)
LJN = (NLP, CMB)
DJR = (HMK, PGQ)
VNB = (JMT, LHM)
DBM = (SBR, MTF)
KLQ = (XBN, MNH)
MDL = (MSL, JCT)
SQX = (TPV, RRB)
CLD = (CQK, RBB)
HPD = (RLJ, CJZ)
LHN = (BFK, XCQ)
KJB = (TMC, QCR)
RLG = (RVX, CDB)
PBH = (GKH, CVN)
DMB = (HHD, MSZ)
SDV = (GXK, QSB)
KPX = (XDJ, QTF)
NBB = (MTN, MTN)
BTX = (BRT, GSM)
HGN = (HJT, RBX)
GDS = (XSM, BGG)
KDN = (KTN, BJT)
GSL = (TRQ, PHJ)
SFR = (XHS, KPH)
JNV = (TVL, PNM)
JNS = (VCD, CXV)
LHM = (GXV, RTX)
TFH = (MTD, PFG)
GHJ = (CSN, XVS)
KNQ = (LRK, GXX)
PRT = (RNV, RGX)
JTK = (BMT, JXJ)
MRQ = (VPT, FLH)
TKN = (LTC, PCH)
VSN = (XFR, RDF)
HXJ = (DBB, HBH)
PRL = (THH, TTH)
GCX = (RDG, SCV)
MNH = (DXP, QDS)
CMB = (XQB, RKB)
CHP = (TSP, HSX)
BCP = (TCG, VSB)
LNT = (HQM, FGJ)
FNK = (XNX, RKP)
HRT = (FJB, PFX)
HTC = (CGS, HRV)
SDR = (QHT, VHH)
CQK = (FCR, HFN)
LVN = (FGP, BKF)
FDS = (DBN, BCN)
QCS = (QSH, XMV)
TRT = (KFQ, SGJ)
RQH = (FDN, KBX)
QJC = (QKK, LND)
MVD = (SBR, MTF)
SBG = (RFL, VCK)
DSX = (RLJ, RLJ)
JBX = (KFQ, SGJ)
JVV = (RRB, TPV)
BBR = (FKS, SKF)
KTX = (VDX, XDR)
CSN = (NNM, CBK)
NNM = (RTN, TGB)
VXK = (NGD, NTM)
DQD = (FJB, PFX)
CDB = (BLF, PTM)
GBL = (BPN, KKS)
BGP = (SNT, BRX)
CRP = (FDC, TPJ)
DFK = (KVV, SQD)
LVQ = (KNQ, FBX)
HSB = (PBK, SHB)
PJG = (TNP, CQM)
JPB = (KCM, DLK)
JJS = (PXQ, NRJ)
XGF = (QDH, PFV)
DKM = (KBL, PJQ)
DVB = (GSM, BRT)
TMC = (MHV, FTS)
TRQ = (BTP, BTF)
FLB = (FCV, FKJ)
BVL = (MNH, XBN)
XPA = (NCN, CVS)
XPS = (PNM, TVL)
CPN = (RDJ, JMK)
RQR = (DKX, CJQ)
SFH = (SNT, BRX)
DBT = (KLJ, PDR)
MBH = (XCS, XPD)
DLK = (XMH, XBD)
HBG = (HJT, RBX)
THK = (DQK, JMB)
DGF = (KKH, QGQ)
BPJ = (GKX, NXB)
MTN = (MVP, MVP)
TMV = (RVC, JJS)
GMS = (PFV, QDH)
FDJ = (BTH, XPG)
FFB = (MNM, MNM)
RTX = (LBK, LXJ)
BGG = (LNT, STB)
LRM = (HMT, NJM)
XVD = (XPD, XCS)
THT = (NTC, NTC)
GXH = (NBB, VXS)
LTG = (XSM, BGG)
GKH = (GJJ, QVC)
TNT = (FHG, PPR)
CDP = (HGN, HBG)
DQN = (HXV, JPN)
FNS = (SVR, RHQ)
DSB = (DMG, LRQ)
DCD = (TLJ, LLD)
FTQ = (JMK, RDJ)
VGX = (SFN, BDH)
VDX = (KJV, DNF)
PMX = (SFH, BGP)
VTF = (TBV, MLH)
LQM = (FMJ, QVV)
VNT = (VQR, BVM)
XML = (GCN, QFZ)
VPF = (MVM, JXP)
TBK = (LLQ, HQX)
PXQ = (TLK, SBG)
LKX = (CGV, KRM)
DBN = (PBH, HPL)
XXL = (CPG, PND)
BHG = (BBR, BMS)
VQQ = (STX, PJH)
VHH = (RLG, TDG)
RJK = (KPH, XHS)
BFK = (MXV, HTX)
VJX = (XRK, VDQ)
GFJ = (CPN, FTQ)
GRG = (MXD, DLJ)
CQC = (LJN, LSR)
RJB = (DHH, LPT)
FGP = (CJP, PRL)
BCM = (FFB, STD)
FBX = (GXX, LRK)
FLH = (VHJ, PRT)
GTD = (THT, THT)
GNS = (NHB, TBK)
QTM = (XDJ, QTF)
VGM = (KJK, FCD)
XBD = (JNG, GCX)
QVC = (BNV, FLT)
FCV = (LQL, CSG)
SCN = (NPL, VXF)
KKL = (HVK, NMS)
MDG = (QJD, SMS)
QSB = (BFP, TFH)
LKJ = (BRS, BSL)
XCS = (HSB, LRC)
HLB = (MDJ, RTV)
TLJ = (NGQ, CGC)
MNM = (CLJ, CLJ)
STB = (HQM, FGJ)
HJT = (TMF, KTP)
TND = (LRF, JSL)
FVN = (QDN, DXF)
SNT = (TJD, DDR)
JKM = (LKN, FVM)
LTC = (RBP, PQH)
STP = (CKF, NLR)
DMG = (LSQ, PMP)
CDX = (RFC, VPF)
CNQ = (PXG, BSF)
PMP = (KCC, GSP)
VKT = (CKX, KPS)
CKJ = (FBX, KNQ)
VGC = (JPB, NVL)
LCB = (QTC, FCM)
TCF = (BDH, SFN)
DDC = (XSX, DMB)
SFN = (XFV, GSF)
HXF = (GDQ, VNC)
BPQ = (QCS, PKR)
FFD = (TNT, XTF)
TBV = (SFR, RJK)
DBB = (FGM, DJR)
FHG = (VSN, LQK)
GGM = (DSM, NKL)
RJV = (NMS, HVK)
NGQ = (RJV, KKL)
CFS = (HQV, HPS)
PFG = (BTX, DVB)
VCX = (QKF, CPK)
XCQ = (MXV, HTX)
DHH = (PRD, CGB)
HBH = (DJR, FGM)
RMH = (GMV, SNF)
HXV = (QTB, FRP)
QFZ = (CVS, NCN)
CVK = (BDK, GMJ)
SHQ = (QQM, BFT)
PGQ = (XPS, JNV)
LQR = (NTG, VCG)
QDS = (BVB, HDJ)
CJP = (THH, TTH)
FNB = (GGH, MTR)
PSN = (RXG, JSG)
LHX = (QDN, DXF)
GFG = (SCG, KQJ)
PRR = (NPK, BDP)
QSH = (LKX, BBF)
KVV = (LBV, CRP)
DFF = (NXB, GKX)
JFF = (CKJ, LVQ)
FCD = (MDG, XCV)
SFC = (FNS, HLP)
KPS = (BNS, CFS)
PLN = (PNN, DHB)
SHG = (CQM, TNP)
GJR = (QDP, GCJ)
NDJ = (GFX, GXH)
XQB = (PHC, JSD)
FKJ = (CSG, LQL)
FRP = (KNS, JTS)
MHX = (BKB, LCB)
HGK = (LHS, SBV)
JXJ = (JMG, PCS)
NJC = (RQH, BGH)
LLQ = (TQF, NJB)
QFR = (BCP, CKB)
BXK = (DQD, HRT)
XFR = (KKD, SQM)
XFV = (HMJ, RMH)
HMJ = (GMV, SNF)
BNV = (NHG, FRF)
GXV = (LBK, LXJ)
XNX = (NKH, FQC)
BJR = (VKX, JCV)
CRN = (BCX, DTB)

11
src/aoc8test.txt Normal file
View file

@ -0,0 +1,11 @@
LR
11A = (11B, XXX)
12A = (11B, XXX)
11B = (XXX, 11Z)
11Z = (11B, XXX)
22A = (22B, XXX)
22B = (22C, 22C)
22C = (22Z, 22Z)
22Z = (22B, 22B)
XXX = (XXX, XXX)