This commit is contained in:
Stefan Harmuth 2023-12-08 06:55:37 +01:00
parent 794800b088
commit dfadef52c5
6 changed files with 856 additions and 0 deletions

View File

@ -100,3 +100,16 @@ class Day(AOCDay):
if __name__ == "__main__": if __name__ == "__main__":
day = Day(2023, 5) day = Day(2023, 5)
day.run(verbose=True) 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

67
day08.py Normal file
View File

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

752
inputs/input8 Normal file
View File

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

9
inputs/input8_test1 Normal file
View File

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

5
inputs/input8_test2 Normal file
View File

@ -0,0 +1,5 @@
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)

10
inputs/input8_test3 Normal file
View File

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