From dfadef52c5af13fc44ff5cb869cba619f5b7c6c7 Mon Sep 17 00:00:00 2001 From: Stefan Harmuth Date: Fri, 8 Dec 2023 06:55:37 +0100 Subject: [PATCH] Day 8 --- day05.py | 13 + day08.py | 67 ++++ inputs/input8 | 752 ++++++++++++++++++++++++++++++++++++++++++++ inputs/input8_test1 | 9 + inputs/input8_test2 | 5 + inputs/input8_test3 | 10 + 6 files changed, 856 insertions(+) create mode 100644 day08.py create mode 100644 inputs/input8 create mode 100644 inputs/input8_test1 create mode 100644 inputs/input8_test2 create mode 100644 inputs/input8_test3 diff --git a/day05.py b/day05.py index 354daf4..f0b76b7 100644 --- a/day05.py +++ b/day05.py @@ -100,3 +100,16 @@ class Day(AOCDay): if __name__ == "__main__": day = Day(2023, 5) day.run(verbose=True) +inst, nodes = self.parse_input() +cur_node = [x for x in nodes if x.endswith("A")] +cur_step = 0 +while set(x[2] for x in cur_node) != {"Z"}: + new_node = [] + dir = inst[cur_step % len(inst)] + for node in cur_node: + if dir == "L": + new_node.append(nodes[node][0]) + else: + new_node.append(nodes[node][1]) + + cur_step += 1 diff --git a/day08.py b/day08.py new file mode 100644 index 0000000..6036651 --- /dev/null +++ b/day08.py @@ -0,0 +1,67 @@ +import math +from collections import defaultdict +from tools.aoc import AOCDay +from typing import Any + + +class Day(AOCDay): + inputs = [ + [ + (2, "input8_test1"), + (6, "input8_test2"), + (12643, "input8"), + ], + [ + (6, "input8_test3"), + (13133452426987, "input8"), + ], + ] + + def parse_input(self) -> (str, dict): + inst = self.getInput()[0] + nodes = {} + for line in self.getInput()[2:]: + node, pathhs = line.split(" = ") + pl, pr = pathhs.split(", ") + nodes[node] = (pl[1:], pr[:-1]) + + return inst, nodes + + def part1(self) -> Any: + inst, nodes = self.parse_input() + cur_node = "AAA" + cur_step = 0 + while cur_node != "ZZZ": + dir = inst[cur_step % len(inst)] + if dir == "L": + cur_node = nodes[cur_node][0] + else: + cur_node = nodes[cur_node][1] + + cur_step += 1 + + return cur_step + + def part2(self) -> Any: + inst, nodes = self.parse_input() + i_len = len(inst) + check_nodes = [x for x in nodes if x.endswith("A")] + nodes_dp = defaultdict(dict) + for node in check_nodes: + cur_step = 0 + cur_node = node + while (cur_node, cur_step % i_len) not in nodes_dp[node]: + nodes_dp[node][(cur_node, cur_step % i_len)] = cur_step + if inst[cur_step % i_len] == "L": + cur_node = nodes[cur_node][0] + else: + cur_node = nodes[cur_node][1] + + cur_step += 1 + + return math.lcm(*[v for node in check_nodes for k, v in nodes_dp[node].items() if k[0].endswith("Z")]) + + +if __name__ == "__main__": + day = Day(2023, 8) + day.run(verbose=True) diff --git a/inputs/input8 b/inputs/input8 new file mode 100644 index 0000000..14866b9 --- /dev/null +++ b/inputs/input8 @@ -0,0 +1,752 @@ +LRLRLRLRRLRRRLRLRLRRRLLRRLRRLRRLLRRLRRLRLRRRLRRLLRRLRRRLRRLRRRLRRRLLLRRLLRLLRRRLLRRLRLLRLLRRRLLRRLRRLRRRLRRLRLRRLRRLRLLRLRRRLRLRRLRLLRRLRRRLRRLRLRRLLLRRLRRRLRRRLRRLRRRLRLRRLRRLRRRLRRLRRLRRLRRLRRRLLRRRLLLRRRLRRLRRRLLRRRLRRLRRLLLLLRRRLRLRRLRRLLRRLRRLRLRLRRRLRRRLRRLLLRRRR + +BPQ = (VXR, TLN) +NSK = (FRM, GXV) +XVG = (BBC, SGF) +JTG = (LVR, MPK) +RNQ = (TMP, TLT) +VVX = (TVH, GCM) +DJH = (MMH, LLQ) +LQR = (HFF, FHP) +QFQ = (CFT, STF) +RJL = (TFG, CTR) +DRB = (GBQ, NRB) +KHK = (XDB, DVQ) +NCG = (SHP, LTM) +KSD = (KQT, PDB) +MGL = (LDG, DCN) +KFX = (HLG, VGF) +KFG = (JGB, GVH) +JLV = (CGX, MQN) +CCB = (JXL, LHD) +CSJ = (GQS, FHJ) +VPX = (RGL, XMD) +CHV = (DHP, DKG) +LRV = (MLC, HQQ) +BPJ = (QJP, VLR) +VFF = (PSS, NFD) +FCM = (JBG, NRK) +GBQ = (JRQ, TLQ) +VLM = (KRH, BMQ) +GXS = (TKS, TQZ) +NNM = (LDG, DCN) +QVN = (TMP, TLT) +JCR = (GLG, KFV) +MFM = (MXN, PMM) +GLG = (JSK, HHT) +LGH = (RXD, NDN) +CRH = (MCD, DSJ) +FDD = (XTR, QSS) +QQX = (XPS, XPS) +XGF = (LPL, PMR) +DFG = (FTR, JTK) +HHV = (KHK, QDJ) +LDX = (GBP, RFP) +JJD = (SNC, CST) +CGG = (VXR, TLN) +VQB = (LBM, RBD) +QRT = (DJH, BKC) +KFP = (SVN, SCG) +BKC = (LLQ, MMH) +KJF = (BGB, CTL) +VDL = (XFX, QGQ) +JNN = (CSX, JQX) +LDV = (TTQ, CQR) +SJD = (QNM, NSK) +RPD = (XFQ, SKS) +BMR = (MRH, RSM) +CNK = (QQK, DHQ) +MLD = (MNC, BQT) +PQS = (VLN, LJC) +HKK = (RQP, VGD) +QCS = (KVD, XPB) +KVD = (QRT, TVP) +JMK = (BLV, PQS) +CJF = (KPD, GRJ) +DTG = (TCX, LVM) +DQG = (GQQ, CQK) +VNN = (QNF, CDC) +SHV = (LLV, QNQ) +HQQ = (VNN, XPG) +LVM = (LQH, NVM) +VFP = (VPX, MRG) +SBG = (PXL, LNC) +PXL = (PCQ, RVK) +CXH = (SBL, SKV) +HTM = (PPF, RCT) +GBP = (JMX, JMX) +QMN = (BSJ, NBP) +DDJ = (LRF, NHV) +QMS = (GNT, DMH) +QDG = (CSF, NSB) +VGR = (QMS, BXX) +MCB = (SSQ, KNF) +JVL = (PCC, MQX) +RCQ = (PQP, CMP) +NQK = (KXG, DQR) +CFT = (QHQ, XKH) +CMP = (NPS, DXN) +KKV = (BPJ, QBG) +SGF = (CTP, KKQ) +BKL = (RCR, NFS) +JHN = (CGN, SHV) +GLB = (HMC, NFQ) +QTG = (FRF, LMN) +NFS = (LQX, KCL) +RNK = (QCB, BRJ) +KLX = (VST, SVR) +SMK = (JSJ, QTG) +KQJ = (FNS, NPD) +CQR = (JNC, BKP) +MCP = (HLM, SLC) +HMP = (QRN, BDN) +DQJ = (CNK, GSR) +XFD = (HMV, XPR) +BDB = (PQS, BLV) +BXG = (CHV, VVM) +CGN = (QNQ, LLV) +JDB = (FCS, FBX) +XFC = (MJT, QML) +PMR = (SJD, TGD) +GVP = (SBS, KJF) +XPS = (DQJ, DQJ) +KCF = (HCT, DBS) +KRH = (GDD, KLX) +FDT = (LHD, JXL) +VLH = (VJP, NCG) +JNC = (HPT, VDQ) +JMX = (MVJ, MVJ) +RKN = (CJF, CJF) +PFS = (LHB, FDD) +QXG = (RLP, DXM) +CTL = (JVX, MVN) +CTP = (JNG, VFP) +FBK = (DQL, KKX) +XBH = (XQK, LMV) +RXH = (DHM, DHM) +XNN = (NPM, GJF) +SKS = (XJP, MQL) +RNC = (FKF, RGS) +HNT = (NTV, RSG) +RCR = (LQX, KCL) +LMN = (PDT, QXG) +DGK = (QQX, RCK) +QGS = (GKL, PHD) +JSJ = (LMN, FRF) +JNG = (MRG, VPX) +KHF = (MHR, RDM) +MQX = (MKS, LRQ) +BXN = (LMV, XQK) +RCT = (DRK, QKJ) +NGL = (MMQ, JNN) +LXL = (RCH, TJF) +MVN = (NLN, CCC) +KGQ = (DML, VCT) +SVN = (DBR, JJD) +BKQ = (XKJ, JNM) +LCA = (CNK, GSR) +HHB = (HMK, HJP) +NHB = (BVP, JBL) +SXD = (SKC, RDJ) +TCX = (LQH, NVM) +CST = (QTC, KVK) +QRN = (RPD, QQF) +MXS = (DQG, NJC) +DPN = (LRV, DGH) +LJJ = (TSP, SKL) +LRF = (XFD, CKQ) +RSG = (QDL, GCD) +JBC = (SLC, HLM) +RVK = (RBM, JRP) +XQG = (DGH, LRV) +QDJ = (DVQ, XDB) +SMT = (BHN, KTM) +TPF = (SFV, BVD) +LGS = (RSQ, JCR) +DMB = (CRH, FQD) +LVN = (QMS, BXX) +MVJ = (TKS, TKS) +VXR = (RBP, RCQ) +CSX = (TNJ, DJG) +TVH = (RXH, RXH) +DXM = (LPF, LSS) +HCT = (KFX, CMC) +LHB = (QSS, XTR) +XNQ = (DQJ, XCZ) +NHK = (PDQ, FLN) +DKT = (QCL, QCL) +BVV = (JNN, MMQ) +XHP = (DDJ, SQN) +LMK = (LTK, MPV) +NNH = (NKM, KGQ) +CFG = (DPN, XQG) +BLM = (CNQ, KJX) +JKS = (MFX, VVF) +DHM = (XVL, XVL) +DRK = (LXL, PCH) +TLC = (TPQ, FRJ) +KPF = (SHL, NQH) +CCQ = (JMK, BDB) +LQK = (CGG, BPQ) +SHL = (FQG, XLS) +MJV = (PNF, PNF) +TNJ = (KSD, DHX) +QDL = (GJH, CMX) +BVF = (HNT, CPM) +KSB = (BPH, MXS) +FFB = (SFV, BVD) +PMM = (LSV, FCM) +JRQ = (LDV, FRP) +VMH = (BPJ, QBG) +KPD = (KBG, PFQ) +GRT = (KKX, DQL) +NJF = (DCG, MNK) +HMC = (VVX, VCD) +NTV = (QDL, GCD) +GVH = (LRR, HRC) +NCL = (LVN, VGR) +JRV = (QBQ, HJF) +FRF = (PDT, QXG) +NXP = (CGN, SHV) +JPR = (GBQ, NRB) +RFP = (JMX, VSH) +QCB = (GBT, BHR) +MBT = (NPD, FNS) +DTH = (VGR, LVN) +GRJ = (KBG, PFQ) +NPS = (FVB, FHL) +VVM = (DKG, DHP) +TRT = (KKV, VMH) +JSP = (NRT, NKC) +VLR = (RJL, NQR) +PPZ = (QKG, HCB) +VHV = (DRC, KMB) +BGG = (DDJ, SQN) +CSF = (MLD, BTC) +QQF = (XFQ, SKS) +FTM = (CNQ, KJX) +KKJ = (RPC, RRK) +QTV = (HFN, FXJ) +RRL = (JDH, TMT) +LTT = (HHV, KTD) +TBP = (SNF, RMH) +MCD = (FMM, DFG) +PQQ = (XFC, DSS) +HMV = (PHH, MXL) +QCL = (LCN, LCN) +MVX = (SSQ, KNF) +DXN = (FVB, FHL) +SKR = (RCR, NFS) +BVP = (BMR, JVJ) +NBP = (LTT, DBK) +HPT = (JKS, GNS) +LPL = (SJD, TGD) +RSQ = (GLG, KFV) +NBQ = (BPL, HGH) +PQP = (NPS, DXN) +LSS = (NHB, XVP) +CKL = (MCB, MVX) +LQX = (TPF, FFB) +TGD = (NSK, QNM) +FRP = (TTQ, CQR) +RCH = (CCB, FDT) +VVL = (RDJ, SKC) +NVA = (KPD, GRJ) +FMM = (FTR, JTK) +KPM = (MQX, PCC) +QXQ = (QDT, JLV) +JVJ = (MRH, RSM) +SMN = (HPX, CDM) +XTP = (LLD, QBC) +BVB = (JCR, RSQ) +JTN = (TND, JFQ) +CLK = (QXB, BGQ) +NMX = (FTM, BLM) +QKH = (BHN, KTM) +VJP = (SHP, LTM) +FNS = (SNX, GPP) +DGH = (MLC, HQQ) +NFM = (CVD, CTD) +NKM = (DML, VCT) +HMK = (FDX, SMK) +VVQ = (FDD, LHB) +FDX = (QTG, JSJ) +MKL = (TDX, DLC) +HQX = (GHS, LTX) +KJX = (MQB, CTV) +PHD = (NHK, PGQ) +KDF = (TDD, PJM) +MTK = (LCN, ZZZ) +NVM = (LCC, MKL) +XSH = (MJV, FRD) +LLQ = (GRS, CFG) +TGP = (XCK, MNR) +XVJ = (VLH, TTX) +PLR = (VVL, SXD) +CTR = (DHV, VFQ) +KKQ = (VFP, JNG) +BMQ = (GDD, KLX) +VVF = (LCV, MGX) +PGQ = (FLN, PDQ) +SSC = (MRN, JTG) +TDD = (HTB, TBP) +QKJ = (PCH, LXL) +GXV = (BXN, XBH) +MRG = (RGL, XMD) +KXJ = (NXP, JHN) +NFD = (NJF, BQP) +GSS = (HPP, HQX) +XDC = (JFC, JFC) +PNF = (MGL, NNM) +SQN = (LRF, NHV) +HJP = (FDX, SMK) +RBM = (HHB, LTN) +CRM = (RBD, LBM) +DBR = (CST, SNC) +NQR = (CTR, TFG) +GQS = (GVR, CFJ) +JSK = (FVF, VLM) +KHR = (DHM, GXN) +QST = (VCJ, LNT) +DQH = (NCV, LQR) +PCQ = (JRP, RBM) +MMH = (CFG, GRS) +FHP = (CSS, NNH) +BGB = (JVX, MVN) +RCK = (XPS, XNQ) +XGR = (NCH, GLV) +GCD = (CMX, GJH) +HJF = (NBF, TQF) +DRC = (LFP, FFR) +RGL = (BJR, DKP) +RSM = (LDX, HQB) +BTC = (BQT, MNC) +SRV = (SBL, SKV) +NFG = (JVT, SSC) +CGX = (BVK, XLG) +QFH = (KDR, LGT) +VCT = (JJF, DGK) +LBM = (PKL, SGH) +MKS = (QGF, JRV) +QSG = (LTK, MPV) +GGT = (BGG, XHP) +GVR = (VRD, CQJ) +GPD = (HQX, HPP) +LLD = (KDK, XVJ) +DCG = (LRN, XSS) +DSJ = (DFG, FMM) +XMD = (DKP, BJR) +MNK = (LRN, XSS) +FTT = (SVN, SCG) +CMX = (SRN, XSC) +XVP = (BVP, JBL) +BQP = (DCG, MNK) +RTM = (KHF, QPJ) +FFR = (KPV, XTP) +VLN = (PJQ, KTF) +JQX = (TNJ, DJG) +KTF = (PDG, KDF) +JVH = (LNC, PXL) +BPH = (NJC, DQG) +MFJ = (XHD, VFF) +CDC = (DLK, KMF) +MXN = (LSV, FCM) +LGT = (MPB, PNG) +XFT = (RCT, PPF) +BSJ = (DBK, LTT) +BVT = (JSP, QVG) +QBC = (XVJ, KDK) +VRD = (LFG, FHF) +KQT = (GVP, VGJ) +CSS = (NKM, KGQ) +HXL = (DTH, NCL) +FXJ = (DRB, JPR) +FFT = (JVT, SSC) +NJH = (NQK, BJM) +GHS = (CLL, NJH) +MMQ = (JQX, CSX) +PGD = (FKF, RGS) +PJQ = (KDF, PDG) +LFG = (KSB, CMM) +LRN = (BVF, KSQ) +GGX = (JSS, MTS) +LCC = (TDX, DLC) +HPP = (LTX, GHS) +CLL = (BJM, NQK) +TPQ = (XTC, TGP) +BQQ = (CHV, VVM) +PVJ = (LNT, VCJ) +QNQ = (QTV, CMH) +CVD = (XGF, NBH) +JVT = (MRN, JTG) +VFQ = (BXS, FCG) +CPM = (NTV, RSG) +QNF = (DLK, KMF) +GCA = (MGL, NNM) +MGX = (TFX, XNN) +MHR = (NJX, DNT) +KTM = (GDK, MQS) +KDR = (MPB, PNG) +NDF = (XXP, CJB) +ZZZ = (SKQ, JKJ) +MQL = (FBK, GRT) +NHV = (CKQ, XFD) +NBH = (PMR, LPL) +KCL = (FFB, TPF) +BJR = (FTB, KXR) +XSM = (QCL, MTK) +KBG = (QSG, LMK) +SKC = (NBQ, DKC) +PNG = (CNM, LQK) +HTB = (RMH, SNF) +RDM = (NJX, DNT) +FRM = (BXN, XBH) +XTC = (MNR, XCK) +JVX = (NLN, CCC) +GVQ = (CDM, HPX) +SCG = (JJD, DBR) +CCC = (CMR, NKL) +SNC = (KVK, QTC) +GJF = (BHB, GGT) +BJK = (JPS, BKQ) +PCC = (LRQ, MKS) +RBV = (PVJ, QST) +KMF = (BQQ, BXG) +KSQ = (HNT, CPM) +LPN = (CJB, XXP) +DLK = (BXG, BQQ) +MPB = (CNM, LQK) +VSH = (MVJ, GXS) +QBQ = (NBF, TQF) +XLG = (LNF, KCF) +LRQ = (QGF, JRV) +PVQ = (SGF, BBC) +DSS = (MJT, QML) +TLQ = (FRP, LDV) +DHC = (XFC, DSS) +FRD = (PNF, SFZ) +HGH = (STV, VDL) +FHL = (FNC, TJJ) +DHQ = (XGR, NMN) +BRJ = (BHR, GBT) +CQJ = (FHF, LFG) +KDK = (TTX, VLH) +QJP = (NQR, RJL) +GCM = (RXH, KHR) +TFM = (GGR, BVT) +NKL = (JHH, CKL) +PFQ = (LMK, QSG) +XXP = (RBV, QRP) +PJM = (TBP, HTB) +LDG = (GVQ, SMN) +GNS = (VVF, MFX) +TTH = (MRX, KNT) +JXL = (QJD, HKK) +QKG = (XHK, RNK) +RXD = (SRV, CXH) +SBS = (CTL, BGB) +CSC = (JFC, XSH) +SKQ = (RNQ, QVN) +QSS = (QCS, QFP) +JJF = (QQX, QQX) +KMB = (LFP, FFR) +LMD = (RXD, NDN) +SSQ = (HMP, BGK) +GKL = (PGQ, NHK) +DMH = (KKJ, MTX) +RBD = (SGH, PKL) +JBG = (RLB, RRL) +XPR = (PHH, MXL) +PCH = (TJF, RCH) +SRN = (BJK, LLT) +RGV = (NFQ, HMC) +MPV = (NFM, CJK) +RLB = (JDH, TMT) +XQK = (CSJ, FRT) +TTX = (VJP, NCG) +GPB = (KNT, MRX) +XKH = (GPB, TTH) +XJP = (FBK, GRT) +STF = (XKH, QHQ) +LCN = (JKJ, SKQ) +SBL = (MNV, QFH) +BQT = (QBB, NMX) +DBS = (CMC, KFX) +BVR = (BSJ, NBP) +STV = (XFX, QGQ) +CDM = (QFQ, MBF) +NRK = (RRL, RLB) +QDT = (MQN, CGX) +JBL = (BMR, JVJ) +DBK = (HHV, KTD) +JNM = (JVL, KPM) +MPK = (QXQ, RHK) +NRT = (NSH, GRC) +CMH = (HFN, FXJ) +KFV = (HHT, JSK) +XCZ = (GSR, CNK) +GSR = (QQK, DHQ) +PPF = (QKJ, DRK) +BGQ = (KRM, SVX) +QGF = (QBQ, HJF) +SFZ = (NNM, MGL) +XHD = (NFD, PSS) +FTB = (TFM, CXQ) +XSS = (KSQ, BVF) +SGH = (XVG, PVQ) +NKC = (GRC, NSH) +RBP = (PQP, CMP) +BRR = (JGB, GVH) +PDT = (RLP, DXM) +GLV = (JTN, FVN) +XKJ = (KPM, JVL) +MQN = (XLG, BVK) +MRN = (LVR, MPK) +LNF = (HCT, DBS) +TLT = (MCP, JBC) +QVG = (NKC, NRT) +VGJ = (KJF, SBS) +PDB = (GVP, VGJ) +FRT = (FHJ, GQS) +GXN = (XVL, PPZ) +QHQ = (GPB, TTH) +DQR = (RFF, MFM) +TTQ = (JNC, BKP) +JTK = (CCQ, MBJ) +SLC = (QDG, BSP) +TDT = (TSP, SKL) +VGQ = (CKR, KPF) +TJJ = (PGD, RNC) +CXQ = (GGR, BVT) +FNC = (PGD, RNC) +JFQ = (DTG, GJL) +NPM = (GGT, BHB) +FQD = (MCD, DSJ) +TQF = (QGS, VVK) +SVX = (TLC, DDL) +TDX = (BVV, NGL) +MSV = (NCL, DTH) +GQQ = (BVB, LGS) +LNC = (PCQ, RVK) +BSP = (NSB, CSF) +MNR = (XTX, TRT) +PDQ = (GJM, TDL) +MBF = (CFT, STF) +QJD = (RQP, VGD) +CNM = (BPQ, CGG) +XLS = (GSS, GPD) +TFX = (NPM, GJF) +DLC = (BVV, NGL) +BVK = (LNF, KCF) +VGD = (DFF, XPK) +RGS = (LPN, NDF) +JRP = (HHB, LTN) +GDD = (VST, SVR) +BDN = (RPD, QQF) +XTX = (VMH, KKV) +NMN = (NCH, GLV) +CMC = (VGF, HLG) +NBF = (VVK, QGS) +LCV = (TFX, XNN) +BBC = (CTP, KKQ) +THR = (DRC, KMB) +GNT = (MTX, KKJ) +DVQ = (RTM, VDX) +NFQ = (VVX, VCD) +CKQ = (HMV, XPR) +FCG = (VGQ, LDR) +KRM = (TLC, DDL) +LTX = (NJH, CLL) +VDQ = (JKS, GNS) +XSC = (LLT, BJK) +HQB = (GBP, RFP) +VDX = (KHF, QPJ) +RPC = (VFR, MFJ) +QTC = (FFT, NFG) +HLM = (BSP, QDG) +GGR = (QVG, JSP) +XCK = (XTX, TRT) +QFP = (KVD, XPB) +LMV = (CSJ, FRT) +SKL = (HXL, MSV) +TVP = (DJH, BKC) +QML = (QKH, SMT) +MNV = (KDR, LGT) +HRC = (SBG, JVH) +BJM = (KXG, DQR) +TND = (DTG, GJL) +JJN = (FQD, CRH) +LSV = (NRK, JBG) +GBT = (CLK, XVF) +BGK = (QRN, BDN) +BLV = (LJC, VLN) +KXR = (CXQ, TFM) +CMR = (JHH, CKL) +XFQ = (MQL, XJP) +MTX = (RPC, RRK) +NJC = (GQQ, CQK) +FVB = (FNC, TJJ) +FBX = (KXJ, TGM) +GPP = (XDC, CSC) +NRB = (JRQ, TLQ) +RRK = (VFR, MFJ) +TKS = (JJN, DMB) +GJH = (XSC, SRN) +CFJ = (CQJ, VRD) +MFX = (LCV, MGX) +XTR = (QFP, QCS) +QGQ = (DKT, XSM) +CFZ = (GRJ, KPD) +JGB = (HRC, LRR) +RDJ = (DKC, NBQ) +GRS = (XQG, DPN) +JPS = (XKJ, JNM) +JSS = (LJJ, TDT) +QPJ = (RDM, MHR) +DCN = (SMN, GVQ) +PKL = (XVG, PVQ) +SXA = (HCB, QKG) +LTN = (HJP, HMK) +LVR = (QXQ, RHK) +HFN = (JPR, DRB) +JDH = (HKC, GGX) +MRX = (SHB, JDB) +LFP = (KPV, XTP) +DKP = (KXR, FTB) +XPG = (QNF, CDC) +MRH = (LDX, HQB) +XFX = (DKT, DKT) +KKX = (HDB, DQH) +SVR = (KFP, FTT) +VCJ = (QMN, BVR) +LQH = (MKL, LCC) +MJT = (QKH, SMT) +QRP = (QST, PVJ) +TMP = (MCP, JBC) +HLG = (PFS, VVQ) +LLV = (CMH, QTV) +QBB = (BLM, FTM) +CTV = (HTM, XFT) +DNT = (KFG, BRR) +XHK = (BRJ, QCB) +CJK = (CTD, CVD) +AAA = (JKJ, SKQ) +BXX = (GNT, DMH) +HCB = (RNK, XHK) +LNT = (QMN, BVR) +TGM = (NXP, JHN) +CQK = (LGS, BVB) +CJB = (RBV, QRP) +HDB = (NCV, LQR) +CNQ = (CTV, MQB) +BHN = (GDK, GDK) +DML = (JJF, DGK) +FVF = (KRH, BMQ) +TSP = (MSV, HXL) +QBG = (VLR, QJP) +KNT = (JDB, SHB) +FCS = (TGM, KXJ) +FVN = (JFQ, TND) +DHV = (FCG, BXS) +XPK = (VHV, THR) +BKP = (VDQ, HPT) +VST = (FTT, KFP) +DLS = (VVL, SXD) +FTR = (MBJ, CCQ) +MXL = (CRM, VQB) +DHP = (DHC, PQQ) +BXS = (LDR, VGQ) +DQL = (HDB, DQH) +TMT = (GGX, HKC) +PFC = (CJF, CFZ) +CTD = (XGF, NBH) +VFR = (VFF, XHD) +RQP = (DFF, XPK) +LTK = (NFM, CJK) +MTS = (LJJ, TDT) +HHT = (FVF, VLM) +MNC = (QBB, NMX) +FKF = (LPN, NDF) +LHD = (QJD, HKK) +JFC = (MJV, MJV) +XXX = (LMD, LGH) +NCV = (HFF, FHP) +PSS = (BQP, NJF) +NQH = (XLS, FQG) +VGF = (VVQ, PFS) +SKV = (MNV, QFH) +LJC = (KTF, PJQ) +SNX = (XDC, CSC) +NDN = (CXH, SRV) +HKC = (MTS, JSS) +PHH = (CRM, VQB) +FLN = (GJM, TDL) +VVK = (PHD, GKL) +MQS = (RKN, PFC) +LRR = (JVH, SBG) +JKJ = (RNQ, QVN) +XVL = (HCB, QKG) +NPD = (SNX, GPP) +KTD = (QDJ, KHK) +TDL = (RGV, GLB) +SNF = (HLJ, XXX) +MBJ = (JMK, BDB) +GDK = (RKN, RKN) +SFV = (DLS, PLR) +KNF = (BGK, HMP) +XVF = (QXB, BGQ) +RMH = (HLJ, XXX) +LPF = (XVP, NHB) +NSH = (KQJ, MBT) +QNM = (GXV, FRM) +LTM = (BKL, SKR) +GJL = (TCX, LVM) +KXG = (RFF, MFM) +TFG = (DHV, VFQ) +HPX = (MBF, QFQ) +GJM = (GLB, RGV) +VCD = (TVH, GCM) +NLN = (NKL, CMR) +XPB = (TVP, QRT) +FRJ = (XTC, TGP) +FHF = (KSB, CMM) +KVK = (FFT, NFG) +GRC = (MBT, KQJ) +BHR = (XVF, CLK) +HLJ = (LMD, LGH) +LLT = (JPS, BKQ) +DKC = (BPL, HGH) +BPL = (STV, VDL) +SHB = (FBX, FCS) +FQG = (GPD, GSS) +TLN = (RCQ, RBP) +LDR = (CKR, KPF) +NCH = (JTN, FVN) +CMM = (BPH, MXS) +RLP = (LPF, LSS) +CKR = (SHL, NQH) +TJF = (FDT, CCB) +BVD = (DLS, PLR) +QQK = (XGR, NMN) +KPV = (QBC, LLD) +HFF = (NNH, CSS) +DKG = (PQQ, DHC) +TQZ = (DMB, JJN) +MLC = (VNN, XPG) +DHX = (PDB, KQT) +BHB = (XHP, BGG) +RHK = (QDT, JLV) +PDG = (PJM, TDD) +FHJ = (CFJ, GVR) +DJG = (KSD, DHX) +RFF = (MXN, PMM) +MQB = (HTM, XFT) +NSB = (BTC, MLD) +DDL = (FRJ, TPQ) +XDB = (VDX, RTM) +NJX = (KFG, BRR) +JHH = (MVX, MCB) +DFF = (THR, VHV) +GMA = (JJN, DMB) +SHP = (BKL, SKR) +QXB = (KRM, SVX) diff --git a/inputs/input8_test1 b/inputs/input8_test1 new file mode 100644 index 0000000..59e2d47 --- /dev/null +++ b/inputs/input8_test1 @@ -0,0 +1,9 @@ +RL + +AAA = (BBB, CCC) +BBB = (DDD, EEE) +CCC = (ZZZ, GGG) +DDD = (DDD, DDD) +EEE = (EEE, EEE) +GGG = (GGG, GGG) +ZZZ = (ZZZ, ZZZ) \ No newline at end of file diff --git a/inputs/input8_test2 b/inputs/input8_test2 new file mode 100644 index 0000000..34ffa8a --- /dev/null +++ b/inputs/input8_test2 @@ -0,0 +1,5 @@ +LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ) \ No newline at end of file diff --git a/inputs/input8_test3 b/inputs/input8_test3 new file mode 100644 index 0000000..a8e2c98 --- /dev/null +++ b/inputs/input8_test3 @@ -0,0 +1,10 @@ +LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX) \ No newline at end of file