Merge pull request 'chore: add day 8' (#5) from day08 into main
Reviewed-on: xuu/advent-of-code-2023#5
This commit is contained in:
		
						commit
						8e7fa3c5a8
					
				
							
								
								
									
										9
									
								
								day08/example1.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										9
									
								
								day08/example1.txt
									
									
									
									
									
										Normal 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
									
								
								day08/example2.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								day08/example2.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,5 @@
 | 
			
		||||
LLR
 | 
			
		||||
 | 
			
		||||
AAA = (BBB, BBB)
 | 
			
		||||
BBB = (AAA, ZZZ)
 | 
			
		||||
ZZZ = (ZZZ, ZZZ)
 | 
			
		||||
							
								
								
									
										10
									
								
								day08/example3.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								day08/example3.txt
									
									
									
									
									
										Normal 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)
 | 
			
		||||
							
								
								
									
										708
									
								
								day08/input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										708
									
								
								day08/input.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,708 @@
 | 
			
		||||
LLLLRLRLRRLRRRLRRLRLRRLRLLRRRLRRLRRRLRLLLRLRRLRLLRRRLRRLRLRRLLRRRLRRRLRLRRLRRRLRRLRRLLRRRLLLLRRLRRLRRLRRRLLLRLRLRLRRLRRRLRLRRRLRLRRRLRRLRRLLRRLLRLRRRLRLRRRLLLRLRRRLRLRRRLRRLRLRRLRRRLRRRLRRLLLRRRLRRLRRLRRLRRRLLLRRLRLRRRLLLLRRRLRRLRRRLLRLRLRRLLRRRLLRLRLRLRRLRRLRRRLRRLLRLRRLRRLLLLRRLRLRRLLRRLLRRLRRLRRRLLLRRRR
 | 
			
		||||
 | 
			
		||||
BRR = (LVC, FSJ)
 | 
			
		||||
BHX = (GMG, QTN)
 | 
			
		||||
TJD = (HQF, PBJ)
 | 
			
		||||
JGN = (JXR, DGK)
 | 
			
		||||
NMC = (VPC, CRF)
 | 
			
		||||
DVJ = (KMM, DFJ)
 | 
			
		||||
LML = (MTG, KNX)
 | 
			
		||||
JKL = (LRX, FRD)
 | 
			
		||||
FJR = (MHX, SBX)
 | 
			
		||||
LMC = (QNB, QCK)
 | 
			
		||||
LJF = (KCJ, HCT)
 | 
			
		||||
KTL = (XTG, NGM)
 | 
			
		||||
GJB = (KTQ, KTQ)
 | 
			
		||||
BXR = (TDR, KMK)
 | 
			
		||||
GKB = (VXT, NQR)
 | 
			
		||||
PJL = (FPL, TFX)
 | 
			
		||||
LNZ = (CJC, DQL)
 | 
			
		||||
KCG = (KDL, LMF)
 | 
			
		||||
PGG = (NDL, XXC)
 | 
			
		||||
PMS = (XQM, DFG)
 | 
			
		||||
CJF = (MCG, RTJ)
 | 
			
		||||
JTH = (PGS, SGZ)
 | 
			
		||||
QBS = (JSC, KMT)
 | 
			
		||||
DQL = (KRR, PBL)
 | 
			
		||||
HSF = (SNP, KJR)
 | 
			
		||||
XVQ = (VQR, HSX)
 | 
			
		||||
QKF = (PBT, XLC)
 | 
			
		||||
DNA = (DQL, CJC)
 | 
			
		||||
LNF = (RVC, TJD)
 | 
			
		||||
MKT = (LDX, CGC)
 | 
			
		||||
BXP = (RGX, TTR)
 | 
			
		||||
SBX = (PGT, JGN)
 | 
			
		||||
JQK = (HDQ, BHQ)
 | 
			
		||||
MHL = (TLX, JDN)
 | 
			
		||||
BBD = (QNJ, BRM)
 | 
			
		||||
MTT = (BVK, DXB)
 | 
			
		||||
FVR = (VLN, PRV)
 | 
			
		||||
RVC = (HQF, PBJ)
 | 
			
		||||
LDX = (LRS, KBV)
 | 
			
		||||
BKF = (PXH, TNB)
 | 
			
		||||
BRM = (XTV, NGH)
 | 
			
		||||
DDL = (JNG, SFF)
 | 
			
		||||
BBT = (BQJ, BCN)
 | 
			
		||||
GPK = (CVK, DDL)
 | 
			
		||||
TLX = (BDN, XNT)
 | 
			
		||||
JHL = (BRX, QBT)
 | 
			
		||||
NTL = (HSR, DJD)
 | 
			
		||||
XBH = (PJX, JQK)
 | 
			
		||||
PPF = (LCT, BJL)
 | 
			
		||||
SFF = (FVR, NFG)
 | 
			
		||||
HNA = (CTC, BSG)
 | 
			
		||||
CNG = (DXM, QFN)
 | 
			
		||||
GML = (NRD, TVN)
 | 
			
		||||
RHH = (NBT, LJH)
 | 
			
		||||
LDM = (DDN, TRN)
 | 
			
		||||
XSK = (PLB, NVJ)
 | 
			
		||||
NCQ = (MDN, XGT)
 | 
			
		||||
FCQ = (HCT, KCJ)
 | 
			
		||||
DRC = (JKL, JNM)
 | 
			
		||||
SHR = (KLX, VLH)
 | 
			
		||||
FTP = (DRN, DKV)
 | 
			
		||||
QBF = (GVS, NXK)
 | 
			
		||||
GXK = (XDK, LVF)
 | 
			
		||||
KMK = (VXV, XCS)
 | 
			
		||||
PKK = (QNJ, BRM)
 | 
			
		||||
NJH = (TKL, PQK)
 | 
			
		||||
BRX = (MNM, HVC)
 | 
			
		||||
VTD = (BJK, LML)
 | 
			
		||||
QVX = (DVJ, DSF)
 | 
			
		||||
GRM = (JCV, SQB)
 | 
			
		||||
RDQ = (HCG, XMB)
 | 
			
		||||
RGX = (FCN, TPD)
 | 
			
		||||
HBH = (FPR, DHX)
 | 
			
		||||
PHM = (JSP, RCR)
 | 
			
		||||
NBT = (FRG, CMJ)
 | 
			
		||||
XRH = (HCB, FBM)
 | 
			
		||||
GMR = (FDJ, NJD)
 | 
			
		||||
MVG = (RDJ, QSD)
 | 
			
		||||
BDL = (JSB, TFN)
 | 
			
		||||
VXT = (MBM, JND)
 | 
			
		||||
TXC = (QDG, LTV)
 | 
			
		||||
SRL = (RRX, NDS)
 | 
			
		||||
SGN = (MPL, CBB)
 | 
			
		||||
HVH = (SLJ, CBC)
 | 
			
		||||
VPC = (CCG, QSJ)
 | 
			
		||||
KCJ = (CKC, TTD)
 | 
			
		||||
RLT = (LLT, VVL)
 | 
			
		||||
RXV = (KXQ, VBR)
 | 
			
		||||
FQS = (STP, BHX)
 | 
			
		||||
SGC = (RLJ, QGB)
 | 
			
		||||
XLX = (HRG, DGV)
 | 
			
		||||
XKV = (QQB, TNQ)
 | 
			
		||||
SLJ = (GTB, MPF)
 | 
			
		||||
PKV = (CQN, THS)
 | 
			
		||||
RPP = (QFT, TNK)
 | 
			
		||||
DKL = (MFC, MFC)
 | 
			
		||||
BCG = (FXM, GPR)
 | 
			
		||||
RFV = (DRC, MPD)
 | 
			
		||||
VVC = (FGN, CVL)
 | 
			
		||||
HQB = (QNT, VVC)
 | 
			
		||||
RRP = (VVC, QNT)
 | 
			
		||||
TRS = (RCM, GHN)
 | 
			
		||||
QBT = (HVC, MNM)
 | 
			
		||||
XKS = (SCC, VXX)
 | 
			
		||||
TPS = (FMH, KFN)
 | 
			
		||||
MTS = (VXT, NQR)
 | 
			
		||||
FXM = (LDM, FQT)
 | 
			
		||||
LNB = (XJV, SJN)
 | 
			
		||||
HVF = (QXC, RBH)
 | 
			
		||||
LSG = (QHM, TSM)
 | 
			
		||||
JMP = (HBH, NQK)
 | 
			
		||||
NGM = (KDP, HHP)
 | 
			
		||||
HCG = (SLR, TSC)
 | 
			
		||||
HGX = (DFG, XQM)
 | 
			
		||||
DLG = (BVN, GMM)
 | 
			
		||||
DJD = (VGP, VML)
 | 
			
		||||
HBT = (XKL, JBQ)
 | 
			
		||||
NVJ = (GKX, PKS)
 | 
			
		||||
CPS = (PKJ, RSV)
 | 
			
		||||
SKN = (NBT, LJH)
 | 
			
		||||
CCK = (TTJ, SLV)
 | 
			
		||||
DXM = (CBN, BXR)
 | 
			
		||||
RJD = (XJH, SKH)
 | 
			
		||||
RDJ = (CNF, TTG)
 | 
			
		||||
PKJ = (BCM, XKC)
 | 
			
		||||
FQL = (SRV, DFC)
 | 
			
		||||
KDS = (MFB, CLQ)
 | 
			
		||||
QKR = (VGD, CXK)
 | 
			
		||||
XXC = (NFD, SPS)
 | 
			
		||||
PSQ = (NJH, BLR)
 | 
			
		||||
BLR = (PQK, TKL)
 | 
			
		||||
LMX = (DGV, HRG)
 | 
			
		||||
GCK = (CSR, CSR)
 | 
			
		||||
GKJ = (JHL, PNN)
 | 
			
		||||
GVS = (TLN, LJX)
 | 
			
		||||
FPR = (JCH, GKD)
 | 
			
		||||
VQV = (DGB, GGN)
 | 
			
		||||
CPF = (VMH, JQQ)
 | 
			
		||||
GKD = (SGF, PHM)
 | 
			
		||||
JNM = (LRX, FRD)
 | 
			
		||||
CXV = (LNF, HGF)
 | 
			
		||||
TNK = (RRD, HKC)
 | 
			
		||||
DXX = (LMC, ZZZ)
 | 
			
		||||
DGG = (PPF, TRR)
 | 
			
		||||
MLH = (TVL, PBR)
 | 
			
		||||
LBC = (LJL, FTR)
 | 
			
		||||
FVQ = (TBC, LKB)
 | 
			
		||||
LTF = (CBC, SLJ)
 | 
			
		||||
TVH = (XMS, GJS)
 | 
			
		||||
SFB = (TTJ, SLV)
 | 
			
		||||
LVF = (MBT, SJB)
 | 
			
		||||
XPP = (QDM, PJL)
 | 
			
		||||
BVK = (RPV, JMP)
 | 
			
		||||
VGD = (MRX, FJR)
 | 
			
		||||
FRD = (XBH, CDN)
 | 
			
		||||
LKM = (CMF, XNS)
 | 
			
		||||
TCJ = (MMS, PGG)
 | 
			
		||||
DHQ = (MTT, BKS)
 | 
			
		||||
HDQ = (GPH, XKH)
 | 
			
		||||
KTJ = (QQT, MKR)
 | 
			
		||||
NMQ = (VFK, VSD)
 | 
			
		||||
RSK = (QDM, PJL)
 | 
			
		||||
XQC = (KFP, HVB)
 | 
			
		||||
LQN = (NGM, XTG)
 | 
			
		||||
TKG = (XDQ, XDQ)
 | 
			
		||||
KBB = (VQR, HSX)
 | 
			
		||||
TQQ = (QDG, LTV)
 | 
			
		||||
SQN = (TDQ, XKV)
 | 
			
		||||
TSM = (TSH, MRP)
 | 
			
		||||
KPH = (THS, CQN)
 | 
			
		||||
HCB = (DVL, RTV)
 | 
			
		||||
MLR = (GHT, NSN)
 | 
			
		||||
BFM = (GCK, SLX)
 | 
			
		||||
GXQ = (QKM, JJL)
 | 
			
		||||
GNF = (HRQ, XTK)
 | 
			
		||||
TRR = (BJL, LCT)
 | 
			
		||||
AAA = (QNB, QCK)
 | 
			
		||||
SDL = (KJX, LSN)
 | 
			
		||||
DKV = (KBB, XVQ)
 | 
			
		||||
RMR = (MQR, CPR)
 | 
			
		||||
MQC = (CBV, SRP)
 | 
			
		||||
PRV = (KDS, FBX)
 | 
			
		||||
GTB = (CCK, SFB)
 | 
			
		||||
SNP = (PXX, SHR)
 | 
			
		||||
NTR = (VHT, KXK)
 | 
			
		||||
MKJ = (DDL, CVK)
 | 
			
		||||
LSQ = (HSF, RMN)
 | 
			
		||||
TTJ = (CBH, QKF)
 | 
			
		||||
DNH = (MVG, JCJ)
 | 
			
		||||
KMM = (KPH, PKV)
 | 
			
		||||
NTT = (RQK, PFK)
 | 
			
		||||
QMF = (BFM, PJB)
 | 
			
		||||
RJB = (RBH, QXC)
 | 
			
		||||
LRS = (MJT, BVM)
 | 
			
		||||
CJG = (RMR, BMN)
 | 
			
		||||
DVQ = (GXM, DDH)
 | 
			
		||||
MFC = (LMC, LMC)
 | 
			
		||||
XTG = (HHP, KDP)
 | 
			
		||||
HKB = (RDQ, TVT)
 | 
			
		||||
PKS = (JQM, DGG)
 | 
			
		||||
BJK = (KNX, MTG)
 | 
			
		||||
TVT = (XMB, HCG)
 | 
			
		||||
JNR = (JHG, JLN)
 | 
			
		||||
VFK = (XKS, QBH)
 | 
			
		||||
NPC = (PKK, BBD)
 | 
			
		||||
PXX = (KLX, VLH)
 | 
			
		||||
XLC = (NST, BXP)
 | 
			
		||||
CBB = (LMX, XLX)
 | 
			
		||||
KLX = (MSH, LCF)
 | 
			
		||||
CLQ = (JNF, JNC)
 | 
			
		||||
TSS = (MKR, QQT)
 | 
			
		||||
SSS = (RMQ, RCS)
 | 
			
		||||
QSD = (TTG, CNF)
 | 
			
		||||
NHG = (DVQ, VNB)
 | 
			
		||||
CTC = (VCN, RJD)
 | 
			
		||||
THS = (QRH, GPT)
 | 
			
		||||
KDR = (RTK, GKJ)
 | 
			
		||||
NTD = (CGG, SPN)
 | 
			
		||||
GHP = (NCQ, FCD)
 | 
			
		||||
KXQ = (RLS, VRM)
 | 
			
		||||
GNV = (BQJ, BCN)
 | 
			
		||||
DXQ = (QHC, FXN)
 | 
			
		||||
RQB = (FVQ, TNF)
 | 
			
		||||
CNF = (TXC, TQQ)
 | 
			
		||||
BGB = (QQS, LRV)
 | 
			
		||||
ZZZ = (QCK, QNB)
 | 
			
		||||
NFM = (MGV, VTD)
 | 
			
		||||
MFD = (DBF, KSN)
 | 
			
		||||
NST = (RGX, TTR)
 | 
			
		||||
XJV = (LGL, LGL)
 | 
			
		||||
TRQ = (TVH, KJL)
 | 
			
		||||
PPV = (CJP, VHH)
 | 
			
		||||
DNV = (DBM, VGJ)
 | 
			
		||||
JBQ = (MHL, RFN)
 | 
			
		||||
HRG = (JFD, VQP)
 | 
			
		||||
RMB = (JKJ, JGJ)
 | 
			
		||||
RGQ = (RSK, XPP)
 | 
			
		||||
KHF = (TJG, KPX)
 | 
			
		||||
HPZ = (BSG, CTC)
 | 
			
		||||
LFJ = (TSN, NMB)
 | 
			
		||||
MBT = (XRC, PJR)
 | 
			
		||||
QFN = (CBN, BXR)
 | 
			
		||||
QSJ = (BRS, BKF)
 | 
			
		||||
XJH = (RSF, VNP)
 | 
			
		||||
GST = (LVF, XDK)
 | 
			
		||||
DDN = (NMS, RLT)
 | 
			
		||||
CXK = (FJR, MRX)
 | 
			
		||||
PHH = (FPB, TCJ)
 | 
			
		||||
XHV = (KTJ, TSS)
 | 
			
		||||
VHT = (NPC, DMG)
 | 
			
		||||
RNL = (NHG, DVN)
 | 
			
		||||
TKL = (KPN, FKX)
 | 
			
		||||
DGB = (GPJ, QMF)
 | 
			
		||||
PNN = (QBT, BRX)
 | 
			
		||||
TBC = (NTR, FKG)
 | 
			
		||||
PGS = (QDT, JQL)
 | 
			
		||||
SLX = (CSR, LNB)
 | 
			
		||||
BVV = (LVC, FSJ)
 | 
			
		||||
JQL = (MLH, GSC)
 | 
			
		||||
PXH = (CJF, CKM)
 | 
			
		||||
LHM = (DSF, DVJ)
 | 
			
		||||
NND = (NTD, DTB)
 | 
			
		||||
MFB = (JNF, JNC)
 | 
			
		||||
TTR = (FCN, TPD)
 | 
			
		||||
HRQ = (JTD, JTD)
 | 
			
		||||
SLR = (TXT, JSN)
 | 
			
		||||
VQP = (XPK, XGB)
 | 
			
		||||
QHM = (MRP, TSH)
 | 
			
		||||
RTJ = (PXB, TLP)
 | 
			
		||||
QQT = (RRL, QHQ)
 | 
			
		||||
CSR = (XJV, XJV)
 | 
			
		||||
CJP = (CJG, HQQ)
 | 
			
		||||
RMC = (MPD, DRC)
 | 
			
		||||
XMS = (LXX, GPN)
 | 
			
		||||
HSR = (VGP, VML)
 | 
			
		||||
MNM = (VSS, QXR)
 | 
			
		||||
SJN = (LGL, LNZ)
 | 
			
		||||
KBV = (MJT, BVM)
 | 
			
		||||
KFN = (NRC, VSG)
 | 
			
		||||
JNC = (RHR, LFJ)
 | 
			
		||||
MPF = (SFB, CCK)
 | 
			
		||||
QVK = (GNK, BCG)
 | 
			
		||||
NJD = (KCG, LDB)
 | 
			
		||||
DBM = (MJG, MFD)
 | 
			
		||||
NKF = (GGN, DGB)
 | 
			
		||||
BCN = (JNR, MHK)
 | 
			
		||||
GNK = (FXM, GPR)
 | 
			
		||||
KMT = (HFC, CPS)
 | 
			
		||||
FDJ = (KCG, LDB)
 | 
			
		||||
LVD = (PHH, QDR)
 | 
			
		||||
FCN = (VDP, MQC)
 | 
			
		||||
QQB = (GJB, GJB)
 | 
			
		||||
PLF = (JNL, HBT)
 | 
			
		||||
QDM = (FPL, TFX)
 | 
			
		||||
GXM = (CLD, NNL)
 | 
			
		||||
MRV = (BCG, GNK)
 | 
			
		||||
LKB = (NTR, FKG)
 | 
			
		||||
TTG = (TQQ, TXC)
 | 
			
		||||
GFD = (VSD, VFK)
 | 
			
		||||
RCS = (KQQ, DNH)
 | 
			
		||||
QXR = (FCQ, LJF)
 | 
			
		||||
HMQ = (RJQ, FQL)
 | 
			
		||||
VCN = (SKH, XJH)
 | 
			
		||||
QQG = (HSR, DJD)
 | 
			
		||||
HGF = (RVC, TJD)
 | 
			
		||||
XMB = (TSC, SLR)
 | 
			
		||||
PJB = (GCK, SLX)
 | 
			
		||||
HFC = (RSV, PKJ)
 | 
			
		||||
JJL = (GXK, GST)
 | 
			
		||||
QTN = (JLV, SGX)
 | 
			
		||||
KDP = (GNV, BBT)
 | 
			
		||||
VRF = (TFN, JSB)
 | 
			
		||||
GPN = (CPF, SRQ)
 | 
			
		||||
TSC = (TXT, JSN)
 | 
			
		||||
CRF = (QSJ, CCG)
 | 
			
		||||
TNF = (TBC, LKB)
 | 
			
		||||
VLH = (LCF, MSH)
 | 
			
		||||
BCV = (JSC, KMT)
 | 
			
		||||
NNL = (KVX, FQS)
 | 
			
		||||
RVT = (HCB, FBM)
 | 
			
		||||
QHC = (QKV, NCJ)
 | 
			
		||||
VDP = (CBV, SRP)
 | 
			
		||||
CBV = (VQV, NKF)
 | 
			
		||||
CMF = (XHV, TPR)
 | 
			
		||||
TRN = (RLT, NMS)
 | 
			
		||||
JSB = (XTH, TRS)
 | 
			
		||||
CFC = (TVT, RDQ)
 | 
			
		||||
KDL = (TKG, TKG)
 | 
			
		||||
TTD = (BBC, GHP)
 | 
			
		||||
KJR = (PXX, SHR)
 | 
			
		||||
MTV = (GVS, NXK)
 | 
			
		||||
BVN = (KDR, PVP)
 | 
			
		||||
DXB = (RPV, JMP)
 | 
			
		||||
FSJ = (QPQ, GML)
 | 
			
		||||
PBJ = (LQN, KTL)
 | 
			
		||||
PXB = (BDL, VRF)
 | 
			
		||||
NDS = (BGB, NGX)
 | 
			
		||||
CBN = (KMK, TDR)
 | 
			
		||||
NFG = (VLN, PRV)
 | 
			
		||||
JTD = (PGS, PGS)
 | 
			
		||||
MKR = (QHQ, RRL)
 | 
			
		||||
JSN = (RFV, RMC)
 | 
			
		||||
CVK = (SFF, JNG)
 | 
			
		||||
FGN = (BVQ, XQC)
 | 
			
		||||
HHF = (RPS, QQF)
 | 
			
		||||
PLB = (PKS, GKX)
 | 
			
		||||
BJB = (QMC, GPG)
 | 
			
		||||
STP = (QTN, GMG)
 | 
			
		||||
DGK = (RKK, BVT)
 | 
			
		||||
JJM = (VGD, CXK)
 | 
			
		||||
LTS = (QPN, BCL)
 | 
			
		||||
LVC = (QPQ, GML)
 | 
			
		||||
QNB = (GJN, RVB)
 | 
			
		||||
RBH = (HMQ, HPS)
 | 
			
		||||
NQK = (DHX, FPR)
 | 
			
		||||
MRP = (BDT, SGN)
 | 
			
		||||
JQM = (TRR, PPF)
 | 
			
		||||
TSH = (BDT, SGN)
 | 
			
		||||
JLN = (JCC, FCB)
 | 
			
		||||
BRP = (LDX, CGC)
 | 
			
		||||
SJC = (HRQ, HRQ)
 | 
			
		||||
LJL = (BVB, PPV)
 | 
			
		||||
SPN = (SDL, VHM)
 | 
			
		||||
SDM = (DDF, LTS)
 | 
			
		||||
LJH = (FRG, CMJ)
 | 
			
		||||
CMG = (MKD, JGT)
 | 
			
		||||
GPR = (LDM, FQT)
 | 
			
		||||
QPQ = (NRD, TVN)
 | 
			
		||||
JCJ = (RDJ, QSD)
 | 
			
		||||
HSX = (CMG, SHF)
 | 
			
		||||
VML = (RMB, MHC)
 | 
			
		||||
DHX = (JCH, GKD)
 | 
			
		||||
MTG = (FPX, SPD)
 | 
			
		||||
BDT = (MPL, CBB)
 | 
			
		||||
CJC = (PBL, KRR)
 | 
			
		||||
JLS = (LJL, FTR)
 | 
			
		||||
HQF = (LQN, KTL)
 | 
			
		||||
HQQ = (RMR, BMN)
 | 
			
		||||
QMC = (RBP, PXD)
 | 
			
		||||
RPV = (HBH, NQK)
 | 
			
		||||
JHG = (JCC, FCB)
 | 
			
		||||
TPD = (VDP, MQC)
 | 
			
		||||
BHQ = (XKH, GPH)
 | 
			
		||||
XKC = (HDD, GXR)
 | 
			
		||||
RPS = (KJP, KJP)
 | 
			
		||||
QNT = (CVL, FGN)
 | 
			
		||||
JSC = (HFC, CPS)
 | 
			
		||||
KXG = (DTB, NTD)
 | 
			
		||||
CKM = (RTJ, MCG)
 | 
			
		||||
FTD = (KPX, TJG)
 | 
			
		||||
VSD = (XKS, QBH)
 | 
			
		||||
MCG = (TLP, PXB)
 | 
			
		||||
XKH = (HLP, CXV)
 | 
			
		||||
TNB = (CJF, CKM)
 | 
			
		||||
XTH = (RCM, GHN)
 | 
			
		||||
DFN = (GMR, DSS)
 | 
			
		||||
LMF = (TKG, XST)
 | 
			
		||||
FMH = (NRC, VSG)
 | 
			
		||||
XCS = (JTS, GRM)
 | 
			
		||||
GVF = (NDS, RRX)
 | 
			
		||||
CXM = (HGX, PMS)
 | 
			
		||||
VRM = (XJT, DXQ)
 | 
			
		||||
JLV = (QVX, LHM)
 | 
			
		||||
JCH = (PHM, SGF)
 | 
			
		||||
NMS = (VVL, LLT)
 | 
			
		||||
BHS = (XJR, LKM)
 | 
			
		||||
CKC = (BBC, GHP)
 | 
			
		||||
CBH = (XLC, PBT)
 | 
			
		||||
PRL = (QFT, TNK)
 | 
			
		||||
SDF = (VTD, MGV)
 | 
			
		||||
RVB = (MLR, XHT)
 | 
			
		||||
GPT = (PLF, MJX)
 | 
			
		||||
KRR = (RVT, XRH)
 | 
			
		||||
GXR = (BVV, BRR)
 | 
			
		||||
NSN = (RGQ, JMQ)
 | 
			
		||||
KJX = (TCR, MSL)
 | 
			
		||||
PHL = (TSM, QHM)
 | 
			
		||||
MQR = (MTS, GKB)
 | 
			
		||||
XDK = (SJB, MBT)
 | 
			
		||||
NRC = (DGN, BJB)
 | 
			
		||||
JQQ = (LBC, JLS)
 | 
			
		||||
JTS = (JCV, SQB)
 | 
			
		||||
RLJ = (JJM, QKR)
 | 
			
		||||
DTB = (CGG, SPN)
 | 
			
		||||
BRS = (PXH, TNB)
 | 
			
		||||
SRV = (SPC, DNV)
 | 
			
		||||
MNP = (JJL, QKM)
 | 
			
		||||
KTQ = (XSK, XSK)
 | 
			
		||||
FPX = (SJC, GNF)
 | 
			
		||||
VBR = (VRM, RLS)
 | 
			
		||||
KSN = (HQB, RRP)
 | 
			
		||||
RJQ = (SRV, DFC)
 | 
			
		||||
BKS = (BVK, DXB)
 | 
			
		||||
BVB = (VHH, CJP)
 | 
			
		||||
XTK = (JTD, JTH)
 | 
			
		||||
PBT = (BXP, NST)
 | 
			
		||||
PVP = (RTK, GKJ)
 | 
			
		||||
QPN = (BCV, QBS)
 | 
			
		||||
QQF = (KJP, HPZ)
 | 
			
		||||
QRH = (PLF, MJX)
 | 
			
		||||
GHS = (BKN, TPS)
 | 
			
		||||
RCM = (MNP, GXQ)
 | 
			
		||||
DCT = (DDF, LTS)
 | 
			
		||||
JLC = (HGX, PMS)
 | 
			
		||||
VNC = (XSK, CXZ)
 | 
			
		||||
BQJ = (MHK, JNR)
 | 
			
		||||
SHF = (JGT, MKD)
 | 
			
		||||
FXN = (QKV, NCJ)
 | 
			
		||||
FPB = (PGG, MMS)
 | 
			
		||||
JGJ = (KXG, NND)
 | 
			
		||||
VBM = (PSQ, QKN)
 | 
			
		||||
GKX = (DGG, JQM)
 | 
			
		||||
DSF = (KMM, DFJ)
 | 
			
		||||
CMJ = (GPK, MKJ)
 | 
			
		||||
NCJ = (SDM, DCT)
 | 
			
		||||
MKD = (GQG, DHQ)
 | 
			
		||||
CFZ = (RQB, SHH)
 | 
			
		||||
RQK = (DKL, DKL)
 | 
			
		||||
XGT = (HPQ, VRQ)
 | 
			
		||||
SRP = (NKF, VQV)
 | 
			
		||||
BSG = (VCN, RJD)
 | 
			
		||||
XRC = (NFM, SDF)
 | 
			
		||||
DVL = (SRL, GVF)
 | 
			
		||||
HVB = (HXS, MLD)
 | 
			
		||||
MPD = (JNM, JKL)
 | 
			
		||||
JSP = (PHL, LSG)
 | 
			
		||||
BCR = (XJR, LKM)
 | 
			
		||||
PQK = (KPN, FKX)
 | 
			
		||||
FCD = (XGT, MDN)
 | 
			
		||||
MDL = (JLC, CXM)
 | 
			
		||||
FBX = (CLQ, MFB)
 | 
			
		||||
VNP = (RGM, GHS)
 | 
			
		||||
HMK = (RMN, HSF)
 | 
			
		||||
SJB = (PJR, XRC)
 | 
			
		||||
JFD = (XPK, XGB)
 | 
			
		||||
HHP = (GNV, BBT)
 | 
			
		||||
TVN = (VBM, KJN)
 | 
			
		||||
DMG = (PKK, BBD)
 | 
			
		||||
RGM = (BKN, TPS)
 | 
			
		||||
TRF = (KXQ, VBR)
 | 
			
		||||
XHT = (NSN, GHT)
 | 
			
		||||
DFJ = (KPH, PKV)
 | 
			
		||||
KJP = (CTC, BSG)
 | 
			
		||||
LLT = (NTS, LVD)
 | 
			
		||||
RMN = (SNP, KJR)
 | 
			
		||||
GSC = (TVL, PBR)
 | 
			
		||||
RSV = (XKC, BCM)
 | 
			
		||||
TLP = (VRF, BDL)
 | 
			
		||||
GGN = (GPJ, QMF)
 | 
			
		||||
XJR = (CMF, XNS)
 | 
			
		||||
GQG = (BKS, MTT)
 | 
			
		||||
JPN = (MRV, QVK)
 | 
			
		||||
RSF = (RGM, GHS)
 | 
			
		||||
QQS = (DLG, JPV)
 | 
			
		||||
DGV = (VQP, JFD)
 | 
			
		||||
JDN = (XNT, BDN)
 | 
			
		||||
LMA = (QDT, JQL)
 | 
			
		||||
QDG = (QGC, DTX)
 | 
			
		||||
HDD = (BVV, BRR)
 | 
			
		||||
RRD = (CNG, XLJ)
 | 
			
		||||
QBH = (VXX, SCC)
 | 
			
		||||
GPH = (HLP, CXV)
 | 
			
		||||
CVN = (MRV, QVK)
 | 
			
		||||
RLS = (XJT, DXQ)
 | 
			
		||||
QKN = (NJH, BLR)
 | 
			
		||||
NRD = (VBM, KJN)
 | 
			
		||||
NMB = (HVF, RJB)
 | 
			
		||||
XNT = (RXV, TRF)
 | 
			
		||||
XNS = (XHV, TPR)
 | 
			
		||||
SGX = (LHM, QVX)
 | 
			
		||||
NTS = (PHH, QDR)
 | 
			
		||||
SPS = (LTF, HVH)
 | 
			
		||||
KPX = (BCR, BHS)
 | 
			
		||||
GNM = (RPS, RPS)
 | 
			
		||||
CXZ = (NVJ, PLB)
 | 
			
		||||
VVL = (LVD, NTS)
 | 
			
		||||
VTC = (NHG, DVN)
 | 
			
		||||
PXD = (BHH, SSS)
 | 
			
		||||
TVL = (MKT, BRP)
 | 
			
		||||
TPR = (KTJ, TSS)
 | 
			
		||||
MJX = (JNL, HBT)
 | 
			
		||||
BKN = (FMH, KFN)
 | 
			
		||||
MBM = (BVC, FTP)
 | 
			
		||||
RTV = (GVF, SRL)
 | 
			
		||||
GPG = (PXD, RBP)
 | 
			
		||||
KXK = (DMG, NPC)
 | 
			
		||||
JPV = (GMM, BVN)
 | 
			
		||||
LXP = (VPC, CRF)
 | 
			
		||||
RMQ = (DNH, KQQ)
 | 
			
		||||
DRN = (KBB, XVQ)
 | 
			
		||||
MMS = (XXC, NDL)
 | 
			
		||||
GMG = (SGX, JLV)
 | 
			
		||||
MJT = (KHF, FTD)
 | 
			
		||||
XJT = (QHC, FXN)
 | 
			
		||||
JMQ = (XPP, RSK)
 | 
			
		||||
QCS = (TVH, KJL)
 | 
			
		||||
BVC = (DRN, DKV)
 | 
			
		||||
SPC = (DBM, VGJ)
 | 
			
		||||
SHH = (TNF, FVQ)
 | 
			
		||||
VGA = (PLB, NVJ)
 | 
			
		||||
RKK = (JPN, CVN)
 | 
			
		||||
SCC = (TRQ, QCS)
 | 
			
		||||
CDN = (JQK, PJX)
 | 
			
		||||
VSS = (LJF, FCQ)
 | 
			
		||||
JNF = (LFJ, RHR)
 | 
			
		||||
VGP = (MHC, RMB)
 | 
			
		||||
VGJ = (MJG, MFD)
 | 
			
		||||
QGC = (RHH, SKN)
 | 
			
		||||
RKJ = (KTQ, VNC)
 | 
			
		||||
DTX = (SKN, RHH)
 | 
			
		||||
HPQ = (VDR, SGC)
 | 
			
		||||
CCG = (BRS, BKF)
 | 
			
		||||
VLN = (FBX, KDS)
 | 
			
		||||
BHH = (RMQ, RCS)
 | 
			
		||||
BBC = (FCD, NCQ)
 | 
			
		||||
JCV = (GNM, GNM)
 | 
			
		||||
TNQ = (GJB, RKJ)
 | 
			
		||||
QNJ = (NGH, XTV)
 | 
			
		||||
GHT = (RGQ, JMQ)
 | 
			
		||||
LJX = (CFC, HKB)
 | 
			
		||||
TLN = (HKB, CFC)
 | 
			
		||||
PFK = (DKL, LFL)
 | 
			
		||||
PJR = (SDF, NFM)
 | 
			
		||||
JNG = (NFG, FVR)
 | 
			
		||||
PJX = (BHQ, HDQ)
 | 
			
		||||
VHH = (CJG, HQQ)
 | 
			
		||||
RTK = (PNN, JHL)
 | 
			
		||||
XGB = (MLN, SQN)
 | 
			
		||||
JCC = (NQX, NTT)
 | 
			
		||||
BVT = (CVN, JPN)
 | 
			
		||||
HPS = (RJQ, FQL)
 | 
			
		||||
TCR = (DFN, RHS)
 | 
			
		||||
LLA = (SHH, RQB)
 | 
			
		||||
NGX = (QQS, LRV)
 | 
			
		||||
SLV = (CBH, QKF)
 | 
			
		||||
BMN = (CPR, MQR)
 | 
			
		||||
XKL = (RFN, MHL)
 | 
			
		||||
CGG = (VHM, SDL)
 | 
			
		||||
KJN = (PSQ, QKN)
 | 
			
		||||
LDB = (KDL, LMF)
 | 
			
		||||
SPD = (SJC, GNF)
 | 
			
		||||
VDR = (RLJ, QGB)
 | 
			
		||||
DDF = (QPN, BCL)
 | 
			
		||||
KQQ = (MVG, JCJ)
 | 
			
		||||
DSS = (FDJ, NJD)
 | 
			
		||||
NFD = (HVH, LTF)
 | 
			
		||||
GPJ = (BFM, PJB)
 | 
			
		||||
LGL = (DQL, CJC)
 | 
			
		||||
TDQ = (QQB, TNQ)
 | 
			
		||||
RCR = (PHL, LSG)
 | 
			
		||||
SKH = (VNP, RSF)
 | 
			
		||||
DGN = (QMC, GPG)
 | 
			
		||||
NGH = (RNL, VTC)
 | 
			
		||||
TSN = (HVF, RJB)
 | 
			
		||||
MGV = (LML, BJK)
 | 
			
		||||
QHQ = (LXP, NMC)
 | 
			
		||||
KJL = (GJS, XMS)
 | 
			
		||||
RBP = (BHH, SSS)
 | 
			
		||||
QDR = (FPB, TCJ)
 | 
			
		||||
RHR = (NMB, TSN)
 | 
			
		||||
NXK = (LJX, TLN)
 | 
			
		||||
FCB = (NQX, NTT)
 | 
			
		||||
TFN = (TRS, XTH)
 | 
			
		||||
MJG = (KSN, DBF)
 | 
			
		||||
BVQ = (KFP, HVB)
 | 
			
		||||
GMM = (PVP, KDR)
 | 
			
		||||
MDN = (VRQ, HPQ)
 | 
			
		||||
LTV = (DTX, QGC)
 | 
			
		||||
LRV = (DLG, JPV)
 | 
			
		||||
MHC = (JKJ, JGJ)
 | 
			
		||||
DFC = (DNV, SPC)
 | 
			
		||||
LXV = (SHH, RQB)
 | 
			
		||||
PBL = (RVT, XRH)
 | 
			
		||||
BDN = (RXV, TRF)
 | 
			
		||||
JKJ = (KXG, NND)
 | 
			
		||||
MSH = (MTV, QBF)
 | 
			
		||||
NDL = (SPS, NFD)
 | 
			
		||||
FKG = (VHT, KXK)
 | 
			
		||||
PBR = (MKT, BRP)
 | 
			
		||||
VSG = (BJB, DGN)
 | 
			
		||||
RRX = (BGB, NGX)
 | 
			
		||||
NQR = (JND, MBM)
 | 
			
		||||
MRX = (MHX, SBX)
 | 
			
		||||
DVN = (DVQ, VNB)
 | 
			
		||||
HKC = (CNG, XLJ)
 | 
			
		||||
PGT = (JXR, DGK)
 | 
			
		||||
DBF = (HQB, RRP)
 | 
			
		||||
FRG = (GPK, MKJ)
 | 
			
		||||
DFG = (NMQ, GFD)
 | 
			
		||||
QDT = (MLH, GSC)
 | 
			
		||||
KVX = (STP, BHX)
 | 
			
		||||
LCT = (MDL, KCL)
 | 
			
		||||
LSN = (TCR, MSL)
 | 
			
		||||
TXT = (RMC, RFV)
 | 
			
		||||
MXM = (LXV, CFZ)
 | 
			
		||||
TJG = (BHS, BCR)
 | 
			
		||||
BCM = (GXR, HDD)
 | 
			
		||||
FKX = (NTL, QQG)
 | 
			
		||||
SRQ = (JQQ, VMH)
 | 
			
		||||
BCL = (BCV, QBS)
 | 
			
		||||
LRX = (CDN, XBH)
 | 
			
		||||
RHS = (DSS, GMR)
 | 
			
		||||
CLD = (FQS, KVX)
 | 
			
		||||
XLJ = (DXM, QFN)
 | 
			
		||||
KCL = (CXM, JLC)
 | 
			
		||||
HXS = (PRL, RPP)
 | 
			
		||||
JND = (BVC, FTP)
 | 
			
		||||
VQR = (SHF, CMG)
 | 
			
		||||
VNB = (DDH, GXM)
 | 
			
		||||
QGB = (JJM, QKR)
 | 
			
		||||
CVL = (BVQ, XQC)
 | 
			
		||||
RFN = (JDN, TLX)
 | 
			
		||||
FBM = (DVL, RTV)
 | 
			
		||||
TFX = (LSQ, HMK)
 | 
			
		||||
XQM = (NMQ, GFD)
 | 
			
		||||
BJL = (KCL, MDL)
 | 
			
		||||
FTR = (PPV, BVB)
 | 
			
		||||
KNX = (FPX, SPD)
 | 
			
		||||
MHK = (JHG, JLN)
 | 
			
		||||
TDR = (XCS, VXV)
 | 
			
		||||
HVC = (VSS, QXR)
 | 
			
		||||
QXC = (HPS, HMQ)
 | 
			
		||||
RRL = (NMC, LXP)
 | 
			
		||||
MLD = (PRL, RPP)
 | 
			
		||||
LCF = (MTV, QBF)
 | 
			
		||||
VXV = (JTS, GRM)
 | 
			
		||||
XTV = (RNL, VTC)
 | 
			
		||||
LFL = (MFC, DXX)
 | 
			
		||||
CBC = (GTB, MPF)
 | 
			
		||||
CQN = (GPT, QRH)
 | 
			
		||||
DDH = (NNL, CLD)
 | 
			
		||||
GHN = (GXQ, MNP)
 | 
			
		||||
JGT = (DHQ, GQG)
 | 
			
		||||
HCT = (CKC, TTD)
 | 
			
		||||
QCK = (GJN, RVB)
 | 
			
		||||
SGF = (JSP, RCR)
 | 
			
		||||
MPL = (XLX, LMX)
 | 
			
		||||
XDQ = (LXV, LXV)
 | 
			
		||||
MLN = (TDQ, XKV)
 | 
			
		||||
SGZ = (JQL, QDT)
 | 
			
		||||
VRQ = (SGC, VDR)
 | 
			
		||||
FPL = (LSQ, HMK)
 | 
			
		||||
SQB = (GNM, HHF)
 | 
			
		||||
MHX = (PGT, JGN)
 | 
			
		||||
QFT = (HKC, RRD)
 | 
			
		||||
LXX = (CPF, SRQ)
 | 
			
		||||
CPR = (GKB, MTS)
 | 
			
		||||
HLP = (LNF, HGF)
 | 
			
		||||
GJS = (GPN, LXX)
 | 
			
		||||
QKV = (DCT, SDM)
 | 
			
		||||
XST = (XDQ, MXM)
 | 
			
		||||
VXX = (QCS, TRQ)
 | 
			
		||||
KFP = (HXS, MLD)
 | 
			
		||||
MSL = (RHS, DFN)
 | 
			
		||||
NQX = (RQK, PFK)
 | 
			
		||||
CGC = (LRS, KBV)
 | 
			
		||||
FQT = (TRN, DDN)
 | 
			
		||||
VMH = (LBC, JLS)
 | 
			
		||||
VHM = (LSN, KJX)
 | 
			
		||||
JXR = (BVT, RKK)
 | 
			
		||||
KPN = (QQG, NTL)
 | 
			
		||||
QKM = (GST, GXK)
 | 
			
		||||
JNL = (XKL, JBQ)
 | 
			
		||||
BVM = (KHF, FTD)
 | 
			
		||||
XPK = (SQN, MLN)
 | 
			
		||||
GJN = (MLR, XHT)
 | 
			
		||||
							
								
								
									
										249
									
								
								day08/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										249
									
								
								day08/main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,249 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	if len(os.Args) != 2 {
 | 
			
		||||
		fmt.Fprintln(os.Stderr, "Usage: day08 FILE")
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	input, err := os.Open(os.Args[1])
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Fprintln(os.Stderr, err)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	scan := bufio.NewScanner(input)
 | 
			
		||||
 | 
			
		||||
	result, err := run(scan)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		fmt.Println("ERR", err)
 | 
			
		||||
		os.Exit(1)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fmt.Println("result", result)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type result struct {
 | 
			
		||||
	stepsPT1 int
 | 
			
		||||
	stepsPT2 uint64
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func run(scan *bufio.Scanner) (*result, error) {
 | 
			
		||||
	var path []rune
 | 
			
		||||
	m := make(nodeMap)
 | 
			
		||||
 | 
			
		||||
	for scan.Scan() {
 | 
			
		||||
		text := scan.Text()
 | 
			
		||||
		if len(text) == 0 {
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if len(path) == 0 {
 | 
			
		||||
			fmt.Println("path", text)
 | 
			
		||||
			path = []rune(strings.TrimSpace(text))
 | 
			
		||||
			continue
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		n := &node{}
 | 
			
		||||
		i, err := fmt.Sscanf(text, "%s = (%s %s", &n.value, &n.lvalue, &n.rvalue)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			return nil, err
 | 
			
		||||
		}
 | 
			
		||||
		n.lvalue = strings.TrimRight(n.lvalue, ",)")
 | 
			
		||||
		n.rvalue = strings.TrimRight(n.rvalue, ",)")
 | 
			
		||||
		m[n.value] = n
 | 
			
		||||
 | 
			
		||||
		fmt.Println("value", i, n.value, n.lvalue, n.rvalue)
 | 
			
		||||
	}
 | 
			
		||||
	if err := m.mapNodes(); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	steps1 := SolutionPT1(m, path)
 | 
			
		||||
	steps2 := SolutionPT2(m, path)
 | 
			
		||||
 | 
			
		||||
	return &result{steps1, steps2}, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type node struct {
 | 
			
		||||
	value          string
 | 
			
		||||
	lvalue, rvalue string
 | 
			
		||||
	left, right    *node
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type nodeMap map[string]*node
 | 
			
		||||
 | 
			
		||||
func (m nodeMap) mapNodes() error {
 | 
			
		||||
	for k, v := range m {
 | 
			
		||||
		if ptr, ok := m[v.lvalue]; ok {
 | 
			
		||||
			v.left = ptr
 | 
			
		||||
		} else {
 | 
			
		||||
			return fmt.Errorf("%s L-> %s not found", k, v.lvalue)
 | 
			
		||||
		}
 | 
			
		||||
		if ptr, ok := m[v.rvalue]; ok {
 | 
			
		||||
			v.right = ptr
 | 
			
		||||
		} else {
 | 
			
		||||
			return fmt.Errorf("%s R-> %s not found", k, v.rvalue)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		m[k] = v
 | 
			
		||||
	}
 | 
			
		||||
	return nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SolutionPT1(m nodeMap, path []rune) int {
 | 
			
		||||
	fmt.Println("---- PART 1 BEGIN ----")
 | 
			
		||||
	position, ok := m["AAA"]
 | 
			
		||||
	if !ok {
 | 
			
		||||
		return 0
 | 
			
		||||
	}
 | 
			
		||||
	var i int
 | 
			
		||||
	var steps int
 | 
			
		||||
 | 
			
		||||
	for steps < 100000 {
 | 
			
		||||
		steps++
 | 
			
		||||
		if path[i] == 'R' {
 | 
			
		||||
			fmt.Println("step", steps, position.value, "R->", position.rvalue)
 | 
			
		||||
			position = position.right
 | 
			
		||||
		} else {
 | 
			
		||||
			fmt.Println("step", steps, position.value, "L->", position.lvalue)
 | 
			
		||||
			position = position.left
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if position.value == "ZZZ" {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i++
 | 
			
		||||
		if i > len(path)-1 {
 | 
			
		||||
			i = 0
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Println("---- PART 1 END ----")
 | 
			
		||||
	return steps
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func SolutionPT2(m nodeMap, path []rune) uint64 {
 | 
			
		||||
	fmt.Println("---- PART 2 BEGIN ----")
 | 
			
		||||
 | 
			
		||||
	type loop struct {
 | 
			
		||||
		start, position, end *node
 | 
			
		||||
		steps                uint64
 | 
			
		||||
	}
 | 
			
		||||
	loops := make(map[*node]loop)
 | 
			
		||||
 | 
			
		||||
	endpoints := make(map[*node]struct{})
 | 
			
		||||
	for k, n := range m {
 | 
			
		||||
		if strings.HasSuffix(k, "A") {
 | 
			
		||||
			fmt.Println("start", k)
 | 
			
		||||
			loops[n] = loop{start: n, position: n}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if strings.HasSuffix(k, "Z") {
 | 
			
		||||
			fmt.Println("stop", k)
 | 
			
		||||
			endpoints[n] = struct{}{}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var i int
 | 
			
		||||
	var steps uint64
 | 
			
		||||
	var stops int
 | 
			
		||||
	maxUint := ^uint64(0)
 | 
			
		||||
	loopsFound := 0
 | 
			
		||||
 | 
			
		||||
	for steps < maxUint {
 | 
			
		||||
		steps++
 | 
			
		||||
		if path[i] == 'R' {
 | 
			
		||||
			for k, loop := range loops {
 | 
			
		||||
				// fmt.Println("step", steps, position.value, "R->", position.rvalue)
 | 
			
		||||
				loop.position = loop.position.right
 | 
			
		||||
				loops[k] = loop
 | 
			
		||||
			}
 | 
			
		||||
		} else {
 | 
			
		||||
			for k, loop := range loops {
 | 
			
		||||
				// fmt.Println("step", steps, position.value, "L->", position.lvalue)
 | 
			
		||||
				loop.position = loop.position.left
 | 
			
		||||
				loops[k] = loop
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		done := true
 | 
			
		||||
		s := 0
 | 
			
		||||
		for k, loop := range loops {
 | 
			
		||||
			if _, ok := endpoints[loop.position]; !ok {
 | 
			
		||||
				// fmt.Println("no stop", i, position.value)
 | 
			
		||||
				done = false
 | 
			
		||||
				// break
 | 
			
		||||
			} else {
 | 
			
		||||
				// fmt.Println("stop", i, position.value)
 | 
			
		||||
				if loop.end == nil {
 | 
			
		||||
					loop.end = loop.position
 | 
			
		||||
					loop.steps = steps
 | 
			
		||||
					fmt.Println("loop found", loop.position.value, "steps", steps)
 | 
			
		||||
					loops[k] = loop
 | 
			
		||||
					loopsFound++
 | 
			
		||||
				}
 | 
			
		||||
				s++
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if loopsFound == len(loops) {
 | 
			
		||||
			var values []uint64
 | 
			
		||||
			for _, loop := range loops {
 | 
			
		||||
				values = append(values, loop.steps)
 | 
			
		||||
			}
 | 
			
		||||
			return LCM(values...)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if s > stops {
 | 
			
		||||
			stops = s
 | 
			
		||||
			fmt.Println("stops", stops, "steps", steps)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		if done {
 | 
			
		||||
			break
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		i++
 | 
			
		||||
		if i > len(path)-1 {
 | 
			
		||||
			i = 0
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	fmt.Println("---- PART 2 END ----")
 | 
			
		||||
	return steps
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// greatest common divisor (GCD) via Euclidean algorithm
 | 
			
		||||
func GCD(a, b uint64) uint64 {
 | 
			
		||||
	for b != 0 {
 | 
			
		||||
		t := b
 | 
			
		||||
		b = a % b
 | 
			
		||||
		a = t
 | 
			
		||||
	}
 | 
			
		||||
	return a
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// find Least Common Multiple (LCM) via GCD
 | 
			
		||||
func LCM(integers ...uint64) uint64 {
 | 
			
		||||
	if len(integers) == 0 {
 | 
			
		||||
		return 0
 | 
			
		||||
	}
 | 
			
		||||
	if len(integers) == 1 {
 | 
			
		||||
		return integers[0]
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	a, b := integers[0], integers[1]
 | 
			
		||||
	result := a * b / GCD(a, b)
 | 
			
		||||
 | 
			
		||||
	for _, c := range integers[2:] {
 | 
			
		||||
		result = LCM(result, c)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return result
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										72
									
								
								day08/main_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										72
									
								
								day08/main_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,72 @@
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"bytes"
 | 
			
		||||
	"testing"
 | 
			
		||||
 | 
			
		||||
	_ "embed"
 | 
			
		||||
 | 
			
		||||
	"github.com/matryer/is"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
//go:embed example1.txt
 | 
			
		||||
var example1 []byte
 | 
			
		||||
 | 
			
		||||
//go:embed example2.txt
 | 
			
		||||
var example2 []byte
 | 
			
		||||
 | 
			
		||||
//go:embed example3.txt
 | 
			
		||||
var example3 []byte
 | 
			
		||||
 | 
			
		||||
//go:embed input.txt
 | 
			
		||||
var input []byte
 | 
			
		||||
 | 
			
		||||
func TestExample1(t *testing.T) {
 | 
			
		||||
	is := is.New(t)
 | 
			
		||||
	scan := bufio.NewScanner(bytes.NewReader(example1))
 | 
			
		||||
 | 
			
		||||
	result, err := run(scan)
 | 
			
		||||
	is.NoErr(err)
 | 
			
		||||
 | 
			
		||||
	t.Log(result.stepsPT1)
 | 
			
		||||
	is.Equal(result.stepsPT1, 2)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestExample2(t *testing.T) {
 | 
			
		||||
	is := is.New(t)
 | 
			
		||||
	scan := bufio.NewScanner(bytes.NewReader(example2))
 | 
			
		||||
 | 
			
		||||
	result, err := run(scan)
 | 
			
		||||
	is.NoErr(err)
 | 
			
		||||
 | 
			
		||||
	t.Log(result.stepsPT1)
 | 
			
		||||
	is.Equal(result.stepsPT1, 6)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestExample3(t *testing.T) {
 | 
			
		||||
	is := is.New(t)
 | 
			
		||||
	scan := bufio.NewScanner(bytes.NewReader(example3))
 | 
			
		||||
 | 
			
		||||
	result, err := run(scan)
 | 
			
		||||
	is.NoErr(err)
 | 
			
		||||
 | 
			
		||||
	t.Log(result.stepsPT2)
 | 
			
		||||
	is.Equal(result.stepsPT2, uint64(6))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func TestInput(t *testing.T) {
 | 
			
		||||
	is := is.New(t)
 | 
			
		||||
	scan := bufio.NewScanner(bytes.NewReader(input))
 | 
			
		||||
 | 
			
		||||
	result, err := run(scan)
 | 
			
		||||
	is.NoErr(err)
 | 
			
		||||
 | 
			
		||||
	t.Log("part1 solution", result.stepsPT1)
 | 
			
		||||
	is.Equal(result.stepsPT1, 14429)
 | 
			
		||||
	t.Log("part2 solution", result.stepsPT2)
 | 
			
		||||
	is.Equal(result.stepsPT2, uint64(10921547990923))
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// first: 14429
 | 
			
		||||
// second: 10921547990923
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user