From 78baf9a52dd0f9cb824bd6ccf407f9d0fe0d2586 Mon Sep 17 00:00:00 2001 From: Hane Date: Sat, 30 Dec 2023 18:46:13 +0100 Subject: [PATCH] full aoc8 --- src/aoc11.lisp | 97 ++++++ src/aoc11input.txt | 140 ++++++++ src/aoc11test.txt | 10 + src/aoc8-2.lisp | 175 ++++++++++ src/aoc8.lisp | 40 +++ src/aoc8input.txt | 796 +++++++++++++++++++++++++++++++++++++++++++++ src/aoc8test.txt | 11 + 7 files changed, 1269 insertions(+) create mode 100644 src/aoc11.lisp create mode 100644 src/aoc11input.txt create mode 100644 src/aoc11test.txt create mode 100644 src/aoc8-2.lisp create mode 100644 src/aoc8.lisp create mode 100644 src/aoc8input.txt create mode 100644 src/aoc8test.txt diff --git a/src/aoc11.lisp b/src/aoc11.lisp new file mode 100644 index 0000000..33d2e98 --- /dev/null +++ b/src/aoc11.lisp @@ -0,0 +1,97 @@ + +(defun input-parsing (path) + (with-open-file (file path) + (let( (galaxy-columns '()) (data-line nil) (galaxies (make-array 0 :adjustable t)) (current-line 0) ) + ;;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) + ;; (let( (size (+ 1 (length keys))) ) + ;; (adjust-array keys size) (decf size) + ;; (setf (aref keys size) key) )) + + (loop for line = (read-line file 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)) + ) + galaxies))) + +(print (input-parsing "aoc11test.txt")) + ;;(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)) + ;; ;;(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 '()))) + ;; ) diff --git a/src/aoc11input.txt b/src/aoc11input.txt new file mode 100644 index 0000000..794d39e --- /dev/null +++ b/src/aoc11input.txt @@ -0,0 +1,140 @@ +.....................#......#...................#...............#........................................#.................................. +...........................................................#.............................................................#.................. +.....................................................................#.........#......#...........#.............#........................... +.....................................................#.......................................#.............................................. +......#.................................#..........................................................................................#........ +....................#.........#.............................................................................#............................... +..#.........................................................#.............................................................................#. +........................................................................................#...........#..................#.................... +........#....................................#........................#.........................................................#........... +..............................................................................#................................#............................ +..................................................#............#............................................................................ +.........................#......#........#................................................#..........................................#...... +......#..............................................................................#...............#...................................... +...................................................................#........................................................................ +....................#...........................#............................................................#..............#.....#......... +..................................#....................#.........................................#......#..............................#.... +.#.......................................................................................................................................... +........#.....#........................#...........#.............#.....................#.................................................... +..........................#.................................#.....................#......................................................... +.............................................................................................................................#.............# +...................................#......................................................#....................#............................ +.....................#...................#............#..................#.............................................#...........#........ +..............................................................................................#............................................. +....#..........#...............#..........................................................................#................................. +.............................................#.............................................................................................. +...................................................................#..............#.................................#....................... +..................#........................................................#................................................................ +..#.................................#...................#..............................#.........................................#.......#.. +...............................................................#...............#.....................#..........#.........#................. +.........#......................#.............................................................#............................................. +..............#...............................#............................................................................................. +........................................#.................................#............................................................#.... +..............................................................................................................#......#......#............... +.........................#..........#.............................................#........#................................................ +....................................................................#.....................................#................................. +....#...............#........#...............................#........................#........................................#............ +........................................................#................................................................................... +............................................#...........................#......................#.....#...................................... +.........................................................................................#.............................................#.... +...........#....................#..................................#.................................................#...........#.......... +.#.......................................................................................................................................... +................#........................#..........#....................................................................................... +........................#........................................................................................#.......................... +........................................................................#.........#...................#...................#................. +........................................................#......................................................................#............ +.....#.....................................................................................#................................................ +...............#...................................#.................#..............................................................#....... +.........#..................#..................................#..................................................#......................... +......................................#.......#....................................#......................................................#. +..........................................................................................................#......................#.......... +...#..............#.......................#.....................................................#........................................... +................................#...............................................#..........#................................................ +..........................#......................#......................#................................................................... +..................................................................#................................#........................................ +......................................................#.................................#.........................#...................#..... +..............#..........................#..................................................................................#............... +......#......................#.................................................................#...........#................................ +.............................................................................#.............................................................. +.......................#..........................#......................................................................#..........#....... +.#.................................#................................................................#....................................#.. +........#......#................................................#...............................................#........................... +..........................................................................#.....#.........................#...........#.....#............... +............................#..............#..........#....................................#................................................ +............................................................................................................................................ +............#..........#.................................................................................................................... +............................................................#.......................#..............#........................................ +.....................................#...............................#...................................#.................................. +.........#.....................................................................#.....................................#...............#.....# +#.............#............................................................................................................................. +......................................................#....................................#....................................#........... +...................................................................#............................................#........................... +............................................................................................................................................ +....................#............................#................................................#......................................#.. +.............................#...................................................#.......................................................... +.........................................................................#...............#.................#................................ +.............#.........#.........#.....#......................#............................................................#................ +............................................................................................................................................ +.............................................#..........#.....................#..................................#.......................... +............................................................................................................................................ +...................................#.............#................#.....#.....................................................#............. +....#.....................#..................................#.............................................................................. +............................................................................................................................................ +#.....................................#...................................................................................#................. +...............................................#......................#.....#...................................#........................... +.........#...................#.....................................................#.................#...................................... +.......................#...............................#........................................#..............................#............ +...#.....................................#..................................................................#............................... +...................................................#......................................#...........................................#..... +.................#.......................................................................................................................... +...................................................................................................................#......#................. +.................................#..............#.....#......................#.................#.........#.................................. +#....................................................................#........................................#...........................#. +............................................................................................................................................ +.........................#.................................................................................................................. +...............................#.......................................................................................#.................... +..........#...................................#..................#.....................#....................#............................... +............................................................................#.....#......................................................... +....#............#............................................................................#.......#..........#.......................... +..................................................................................................................................#......... +...................................#...........................................#............................................................ +.............................#..........................#.................................#........#........................................ +..............#....................................................#........................................#.............#...........#..... +...............................................#.............#.......................................................#...................... +........#..............................................................#.................................................................... +.......................................................................................#........#........................................... +......................#........#.........................#..................#........................#......................#............... +.#.........#.....#..............................................#........................................................................#.. +.....................................................#...................................................................................... +.........................................#...........................#..............................................#....................... +.............................................................#................................................#................#............ +......#.......................................#.......................................#...............#..................................... +....................#.......#............................#................#...........................................................#..... +...........#.....................................................................................................#.......................... +..........................................................................................#..............#.................................. +..................................................#..........................................................................#.............. +...............#............................................#.....................................................................#......... +........................#...........................................#............................#..................#....................... +................................................................................#..............................#.......................#.... +......................................#...................................#..............#..............#................................... +..#............................................#..............#...........................................................#................. +.........#........................#...................#..................................................................................... +.............................#.............................................................................................................. +....................................................................................#....................................................... +.........................#.............#............................................................#......#......#.........#......#........ +...................#...........................................................................#...........................................# +.......#...............................................#.....#........#..........#.......................................................... +..............#....................#........................................................................................................ +........................................................................................................#.................#...........#..... +..#...............................................................#.........#.......#....................................................... +.........#......................#..........................#.....................................#............#............................. +...................#.................................#.................................................................#.................... +....................................#....................................................................................................... +...........................#......................................................................................................#......... +............................................#.................#............#...................#.......#...................#................ +............#.....................................#......................................................................................... +...........................................................................................................#......#......................... +.....................................#..............................................#......#................................................ +.........................................................................#..............................................#................... +#....................#........#...................................................................#.....................................#... +.....#........................................#.........#........................#.......................................................... \ No newline at end of file diff --git a/src/aoc11test.txt b/src/aoc11test.txt new file mode 100644 index 0000000..a0bda53 --- /dev/null +++ b/src/aoc11test.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file diff --git a/src/aoc8-2.lisp b/src/aoc8-2.lisp new file mode 100644 index 0000000..37a11e9 --- /dev/null +++ b/src/aoc8-2.lisp @@ -0,0 +1,175 @@ +#!/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) )) + ) + + ;;(print keys) + ;;(print parsed) + (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)) + ;;(print (+ i 1)) + ;;(print (length keys)) + ;;(when (< (+ i 1) (length keys)) + (when (> i 0) + ;;WTF + (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) ) ) + ;;(format T "~%~d" i) + ) + ) + ;;(print parsed) + (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))) +;; )) diff --git a/src/aoc8.lisp b/src/aoc8.lisp new file mode 100644 index 0000000..b4ecddd --- /dev/null +++ b/src/aoc8.lisp @@ -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))) diff --git a/src/aoc8input.txt b/src/aoc8input.txt new file mode 100644 index 0000000..ac178d0 --- /dev/null +++ b/src/aoc8input.txt @@ -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) diff --git a/src/aoc8test.txt b/src/aoc8test.txt new file mode 100644 index 0000000..d834763 --- /dev/null +++ b/src/aoc8test.txt @@ -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)