chore: add day 8
This commit is contained in:
parent
fb09a45cab
commit
e9068fdf78
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…
Reference in New Issue
Block a user