diff --git a/2023/inputs/day08 b/2023/inputs/day08 new file mode 100644 index 0000000..9bf3e0b --- /dev/null +++ b/2023/inputs/day08 @@ -0,0 +1,748 @@ +LLLRLRLRLLRRRLRRRLRRRLLLRLRLLRRLLRRLRLRLLRLRLRRLLRRRLRLLRRLRRRLRRLLLRRRLRRRLRRRLLLLRRLRRRLRLRRRLRRLLRLRLRRRLRRRLRRLRRRLLLLLLRLRRRLLLLRLRRRLRRRLRLRRLRLRLRLRLRRRLLRRLRLRRLRRLRRLLRLLLRRLRLLRRLRLRRLRRRLRRLLRLRLRLRRLLRLLRRLLLRLRLRRRLRRLLRRRLRLRLRRLLRLRLRLRRLRLRLRRLRRLLRRLRRRLRRRLLLRRRR + +MQF = (DDG, LSH) +QJP = (PCT, XKJ) +JXF = (PMG, NBN) +JCK = (QCD, NRG) +LPD = (NTM, NTM) +DLN = (TXM, QRG) +MTG = (KGC, DMM) +KFV = (FXH, QLX) +SCJ = (HQH, XSD) +JKJ = (PMX, MHH) +SJK = (JXM, GRQ) +CJZ = (DPF, RMT) +QXM = (HGC, SMX) +XJS = (NRV, CCL) +QLB = (RCH, QVQ) +KDB = (QKT, BJB) +FCX = (DXG, SGQ) +PCT = (DXR, PTS) +MGJ = (FKF, HNG) +VBN = (RBK, JPL) +TRH = (SRT, VJV) +PGK = (SNP, QLP) +XVK = (KFK, QQC) +SXC = (XTB, DPQ) +HNG = (VXF, MVH) +QHT = (TTD, LBH) +LMK = (QQT, QTP) +DXR = (KCT, KQS) +FSA = (RXT, BLP) +GHK = (JMM, VBN) +DMM = (VQM, LTG) +FBQ = (FSV, GHJ) +KCN = (QVR, TDG) +KBF = (XNM, HBL) +KJP = (FKG, CJZ) +JLH = (CKG, XLV) +RJX = (KKN, RJH) +PFS = (BVC, SXR) +DHM = (HXV, FRV) +KFK = (PLL, GQC) +CNB = (KNS, HVP) +DDG = (QTS, VRJ) +QVT = (JCK, DJQ) +LRB = (TXD, MPR) +DMS = (QVD, MFS) +PMJ = (LNN, NPJ) +BXD = (MLL, QKQ) +DGF = (FMX, PKP) +RHQ = (RJH, KKN) +MRG = (TNN, LLX) +BBM = (VFP, VGF) +PLP = (BBK, KFX) +RSN = (SBN, DQF) +XTP = (HMT, XNV) +LLX = (KBF, TDV) +KHR = (QGL, NCM) +PFB = (SXR, BVC) +NKP = (JTF, BJH) +RPH = (RSN, VBM) +HBL = (LVT, JXF) +CBC = (LRB, QGN) +FXH = (GCH, KBD) +QTF = (KVL, DLS) +RPQ = (FJB, RMD) +SLD = (MSH, NSN) +PXF = (QXM, HDF) +QBJ = (RDQ, DJH) +QPH = (RKJ, CSC) +TVF = (JMC, MTV) +MJM = (DLM, BQS) +XQV = (LCD, QCL) +KQH = (SJK, BPR) +CSC = (BLD, PDP) +BLP = (XVK, LJB) +BBK = (DJT, LLJ) +PSH = (GQH, RBQ) +RMD = (XQV, KFT) +TJJ = (QLV, HPG) +STS = (BSB, TMP) +FPN = (TCK, GLD) +JPF = (VCS, CMQ) +NVX = (TLD, GMD) +XLV = (LKV, QNK) +GSF = (CKS, BVB) +QHR = (KTV, KPG) +JRX = (FPN, DTC) +KGC = (VQM, LTG) +SSK = (NHP, NHP) +GLN = (RMX, NGG) +NPJ = (QRV, KTB) +PCP = (XSF, BPL) +JTF = (LSL, BHB) +TDV = (HBL, XNM) +FKV = (JVF, HKK) +GSG = (QJP, CLF) +QNK = (XNQ, CGQ) +RQT = (QVQ, RCH) +XNT = (RKM, XRV) +JMM = (RBK, JPL) +LSL = (NGH, KCN) +QLQ = (TLV, KDN) +KXR = (KRH, KRH) +QLV = (GSR, BQV) +PMG = (LPH, XFB) +VNF = (LVQ, HHG) +CSS = (RKK, RQN) +HGR = (PVX, LFX) +QGN = (MPR, TXD) +XNQ = (GTJ, LXQ) +QQC = (GQC, PLL) +CKR = (KQH, HQD) +TLD = (JLJ, VFL) +XSD = (TTQ, LDQ) +FXF = (BXS, LMQ) +ZZZ = (QBJ, MJJ) +HPG = (GSR, BQV) +LJC = (RNF, FNK) +CCL = (DXF, HRM) +FQR = (QBF, CLH) +GHJ = (MPS, NRB) +LLJ = (NVX, BTR) +MCQ = (RTG, CTK) +PLL = (DJD, FTV) +BLD = (XGL, NDH) +MLL = (NHV, PPJ) +KDN = (LLS, DLN) +KKN = (DCC, CCH) +FHB = (TCJ, VLF) +HCC = (RDN, TRJ) +TGV = (TKF, CFG) +TKB = (SVJ, KHH) +QDN = (RXG, PFF) +GQN = (RKT, NKK) +FLV = (TLV, KDN) +KTV = (LKK, VGH) +XHQ = (JLX, SNS) +MHN = (DHV, KMD) +DLD = (SSQ, LDK) +DKD = (CKR, JPC) +SRD = (KPP, LFS) +LVT = (PMG, NBN) +KPP = (FLQ, XTX) +BQV = (GLN, NQG) +BSB = (KHR, FGL) +HGC = (DBX, QTF) +DSF = (RBQ, GQH) +GRQ = (MVQ, RVP) +JGT = (SFN, GQT) +HDF = (SMX, HGC) +QBF = (VKF, XHQ) +QKM = (JTV, LPP) +LJB = (QQC, KFK) +NTH = (QQV, MHS) +QTX = (FMX, PKP) +HCQ = (FFT, CBC) +XKJ = (DXR, PTS) +BHH = (KPP, LFS) +GRH = (QLQ, FLV) +FNX = (MJX, PFZ) +HQN = (CKS, BVB) +SJV = (CGF, VKD) +RDL = (QJV, MLX) +MFR = (DMF, CFD) +LPF = (SRD, BHH) +HCP = (MPV, NVL) +KNS = (VCD, LJL) +CDX = (LLX, TNN) +SGS = (KMC, RQK) +HQS = (NKP, FRN) +QVD = (VML, QHT) +NRG = (LDS, SCH) +BVB = (HCP, NVM) +RBK = (QLB, RQT) +MPV = (CGR, TSC) +VFP = (JXP, QCM) +QFS = (DFQ, FHB) +FTK = (LSH, DDG) +TJH = (KPL, KTR) +HQF = (MQF, FTK) +FGX = (HVP, KNS) +DDK = (NTM, JNC) +BJC = (SQK, RGB) +HVP = (VCD, LJL) +LTG = (RMV, CJC) +BNR = (CSS, RBN) +GQT = (LCN, DTK) +XSF = (BGT, FCN) +SSQ = (KTL, JMR) +RNH = (BXH, BXH) +FTV = (CMM, PBL) +QRK = (TSF, QFS) +CLR = (NFS, PGK) +SRJ = (PFV, SHX) +FQT = (QKT, BJB) +FRN = (BJH, JTF) +RCN = (NRV, CCL) +QTM = (CKR, JPC) +JHT = (HRC, NVR) +KVB = (KRH, KKT) +HJG = (GHN, GHN) +RNF = (QFF, CKV) +PTT = (VNT, FNX) +GRB = (SVJ, KHH) +TRJ = (PVJ, QKP) +MHS = (FCV, JXD) +VBM = (SBN, DQF) +DLM = (VNH, SCJ) +PPJ = (DMH, PHJ) +QJN = (LSX, KBN) +HXV = (SMH, BJP) +GVL = (VMV, DKF) +QCG = (FKV, NVD) +FNM = (XRV, RKM) +JQJ = (NVT, HGR) +KVX = (GRG, PMJ) +JLV = (SMG, RPH) +TXD = (MFN, HQG) +TLJ = (FHD, MHN) +RPV = (GKH, BPT) +CPR = (JLH, PLC) +FLQ = (TPR, LGG) +BTF = (HGR, NVT) +GCH = (QPT, FDV) +JCF = (GHM, NKS) +CLF = (PCT, XKJ) +RMT = (QKM, XCP) +KPL = (DJB, VLV) +RMV = (NMS, HCC) +XRV = (VPH, PHH) +HBB = (XKH, FBQ) +PXB = (QBF, CLH) +HMR = (PCP, LMJ) +KCT = (PFS, PFB) +DCC = (MBP, BJC) +VFV = (VBD, HQS) +DJB = (BQX, SLD) +MFS = (VML, QHT) +RPC = (PHR, JFD) +RDS = (LFC, RNK) +KMC = (RPR, NRL) +CJD = (VJN, GKK) +VST = (VCS, CMQ) +VMC = (RPC, MCV) +VJV = (XTP, DRK) +BXH = (RXT, BLP) +PNQ = (DSF, PSH) +RJJ = (FXH, QLX) +NKS = (QDQ, DPP) +QDQ = (SJV, MRP) +HQQ = (CJD, DVT) +LKV = (CGQ, XNQ) +KTL = (HFF, FPS) +MBP = (RGB, SQK) +MQQ = (HCQ, MDL) +BQS = (SCJ, VNH) +NRT = (FJD, HTS) +HHG = (RTC, RPQ) +VNH = (XSD, HQH) +QTS = (QTG, MHD) +DJQ = (NRG, QCD) +MDX = (BPT, GKH) +QJV = (QQP, VLJ) +HBD = (HBB, CKC) +GBF = (HJG, FPV) +VDC = (JFJ, VNF) +MPH = (PFV, SHX) +TPR = (BXD, FVX) +KFX = (DJT, LLJ) +LSX = (VKN, STS) +HJL = (KFX, BBK) +QLT = (KGC, DMM) +QFF = (BJM, QCG) +DVM = (GCD, FSC) +MHD = (JCF, JPJ) +DPQ = (JJX, GNL) +NMS = (TRJ, RDN) +VLJ = (XJB, HSJ) +JSP = (MHN, FHD) +BTR = (GMD, TLD) +TTD = (SPC, DFJ) +QKT = (XPV, BVJ) +MKK = (HCQ, MDL) +LFC = (LSS, GQN) +QGL = (RPG, HGJ) +JDT = (FPN, DTC) +NCM = (RPG, HGJ) +LCN = (QLT, MTG) +VGS = (VJV, SRT) +CGF = (FXF, STT) +KQS = (PFB, PFS) +PFF = (DLD, MRJ) +LSH = (QTS, VRJ) +FGF = (MPH, SRJ) +BJG = (TVF, BDN) +HQR = (CXG, CPR) +JVF = (RGM, NCG) +SNP = (BLN, DFD) +DQH = (GSC, CFT) +JVA = (RMT, DPF) +VPH = (CRN, CHT) +DFQ = (VLF, TCJ) +DFD = (HQR, QDF) +NJH = (RXG, PFF) +DTK = (QLT, MTG) +MJJ = (DJH, RDQ) +GGB = (CFT, GSC) +SMH = (RHQ, RJX) +NFS = (SNP, QLP) +LNV = (XLR, KQF) +LCD = (FNM, XNT) +GQH = (JDT, JRX) +JPJ = (GHM, NKS) +GMD = (VFL, JLJ) +HTS = (KXR, KVB) +KFT = (LCD, QCL) +SGH = (NVR, HRC) +QKP = (MQD, MLM) +HFF = (MGM, KSX) +HJM = (KBN, LSX) +MJX = (VHC, PXF) +TSF = (FHB, DFQ) +MSH = (GFM, JHC) +VBG = (HJM, QJN) +CKS = (HCP, NVM) +DQF = (LJC, KXM) +FVP = (FJD, HTS) +DPP = (SJV, MRP) +FKM = (CSS, RBN) +VCD = (FCH, GBX) +DJV = (VMC, HVC) +RKM = (VPH, PHH) +TMP = (KHR, FGL) +BVC = (TLJ, JSP) +SRV = (HQS, VBD) +FCN = (DHM, VDX) +DJH = (FBG, MCQ) +NGG = (RPL, DFV) +SRT = (XTP, DRK) +RMN = (QTD, JGS) +MLH = (MQJ, VDR) +KVL = (VFV, SRV) +VDX = (FRV, HXV) +RXT = (LJB, XVK) +LSS = (RKT, NKK) +LNN = (KTB, QRV) +BCC = (CHL, QXP) +GHN = (XBS, XBS) +FCK = (FKM, BNR) +QLP = (BLN, DFD) +BDN = (JMC, MTV) +MLX = (VLJ, QQP) +RDH = (VNT, VNT) +DFV = (JKJ, KDX) +DXG = (JLV, MVL) +TCF = (DSF, PSH) +JJX = (MKM, TJJ) +VFL = (GGB, DQH) +VLV = (SLD, BQX) +RBQ = (JDT, JRX) +JXP = (QXB, QVT) +PFV = (STX, XHF) +BLN = (QDF, HQR) +FVX = (QKQ, MLL) +QTP = (DJV, GMN) +JLP = (NJF, MFR) +CXG = (PLC, JLH) +VKF = (JLX, SNS) +QQT = (GMN, DJV) +KDX = (MHH, PMX) +FJD = (KXR, KXR) +XJB = (PHB, JTH) +VMV = (RCN, XJS) +MKM = (HPG, QLV) +SQK = (GBF, JCS) +PMT = (SGQ, DXG) +LXQ = (GRB, TKB) +RKK = (SSK, SSK) +QXA = (VHC, PXF) +QDP = (QTD, JGS) +VQC = (KQF, XLR) +QKQ = (PPJ, NHV) +TXM = (JLP, JCJ) +SPC = (LRR, SXC) +BHG = (KFL, BCC) +QBK = (VNF, JFJ) +BPB = (LBJ, JGT) +RNK = (LSS, GQN) +BJP = (RHQ, RJX) +VNT = (MJX, MJX) +QLX = (GCH, KBD) +DXF = (RNH, RNH) +DLS = (VFV, SRV) +SXR = (TLJ, JSP) +SGQ = (JLV, MVL) +NRL = (XPP, XGM) +JFD = (LVD, LTQ) +XNM = (JXF, LVT) +PHH = (CHT, CRN) +QTD = (CTJ, LPF) +FCV = (GTC, CKJ) +QRG = (JLP, JCJ) +DKS = (KPL, KTR) +TTQ = (BFV, LVR) +RPR = (XGM, XPP) +DVS = (FTH, FFG) +RRH = (NJH, QDN) +KTR = (DJB, VLV) +KQM = (BJV, MND) +GKS = (BXH, QCZ) +FSV = (MPS, NRB) +QXB = (DJQ, JCK) +FHX = (QFS, TSF) +FGL = (QGL, NCM) +BHB = (KCN, NGH) +KNA = (KTV, KPG) +NBN = (LPH, XFB) +NVM = (NVL, MPV) +LVR = (CNB, FGX) +QCL = (FNM, XNT) +XRR = (MTB, HMR) +LLS = (TXM, QRG) +AAA = (MJJ, QBJ) +RPL = (JKJ, KDX) +QCM = (QVT, QXB) +QVF = (BQS, DLM) +LMQ = (LMK, BVF) +BLS = (CQK, GTG) +JMC = (PLP, HJL) +KXM = (RNF, FNK) +NDH = (FHJ, GML) +SNS = (VJK, FMJ) +KFL = (QXP, CHL) +FSD = (XNH, MJF) +DTC = (GLD, TCK) +MRP = (CGF, VKD) +JHX = (CJD, DVT) +KPG = (LKK, VGH) +DJT = (NVX, BTR) +MQD = (FQT, KDB) +CKJ = (BLS, CGP) +JXD = (GTC, CKJ) +NVL = (CGR, TSC) +PKV = (DBR, PGB) +JPL = (QLB, RQT) +TSC = (FMS, KRS) +XGL = (GML, FHJ) +DJD = (PBL, CMM) +FSC = (BFG, NTH) +DMH = (PBN, HND) +KRS = (FQR, PXB) +LLM = (GMX, VLX) +FJB = (XQV, KFT) +KRH = (QHR, QHR) +RDQ = (MCQ, FBG) +GLD = (VST, JPF) +RVP = (HBD, RBC) +DHV = (RJJ, KFV) +FMX = (RFL, GSG) +SMX = (DBX, QTF) +LPP = (FSD, PHM) +TDG = (MKK, MQQ) +HPL = (BDN, TVF) +MGM = (RDH, RDH) +FHJ = (XFJ, GVL) +TQB = (VFP, VGF) +JLJ = (DQH, GGB) +FMS = (FQR, PXB) +HQD = (BPR, SJK) +VXR = (XQX, VBG) +GML = (XFJ, GVL) +GCS = (RKJ, CSC) +CTJ = (SRD, BHH) +CLH = (XHQ, VKF) +HND = (RDL, PXS) +QPT = (RRH, CKQ) +NVD = (HKK, JVF) +XGM = (VFK, MLH) +GMN = (HVC, VMC) +QDF = (CXG, CPR) +TCK = (JPF, VST) +BJH = (LSL, BHB) +JNC = (BPB, SLZ) +GSC = (QVF, MJM) +XHG = (SRJ, MPH) +CGQ = (GTJ, LXQ) +CHL = (TGV, HPX) +MRJ = (LDK, SSQ) +GKH = (VQC, LNV) +MLM = (FQT, KDB) +BPT = (LNV, VQC) +BXT = (TKD, ZZZ) +PMP = (NHP, KJP) +PLC = (XLV, CKG) +FXA = (LBJ, JGT) +PKP = (RFL, GSG) +BQX = (MSH, NSN) +LBJ = (SFN, GQT) +KMD = (KFV, RJJ) +PVJ = (MQD, MLM) +LDQ = (LVR, BFV) +SLS = (PGB, DBR) +VTP = (HQQ, JHX) +MPS = (QTX, DGF) +VRJ = (QTG, MHD) +HBH = (HNG, FKF) +RTC = (RMD, FJB) +PHB = (LPD, LPD) +CMM = (DMS, KFB) +QVR = (MKK, MQQ) +XFJ = (DKF, VMV) +TLV = (DLN, LLS) +QRV = (SCL, BSJ) +MFN = (GHK, RRL) +NVT = (LFX, PVX) +FVL = (HMR, MTB) +VCS = (TQB, BBM) +XHF = (QBK, VDC) +JTV = (FSD, PHM) +VML = (TTD, LBH) +SCL = (DKS, TJH) +VHC = (QXM, HDF) +LPV = (GMX, VLX) +CFG = (BTF, JQJ) +MCV = (PHR, JFD) +LDS = (FGF, XHG) +VGF = (QCM, JXP) +BVF = (QQT, QTP) +VKN = (TMP, BSB) +VJK = (KQM, DHQ) +CTK = (GSF, HQN) +PHM = (MJF, XNH) +PVX = (MHK, SXL) +JPC = (KQH, HQD) +JGS = (CTJ, LPF) +XNV = (CLR, BLB) +PTS = (KCT, KQS) +BXS = (BVF, LMK) +BJB = (XPV, BVJ) +MHK = (VTP, KKX) +CJC = (NMS, HCC) +RKT = (PMT, FCX) +BFG = (QQV, MHS) +LPH = (HDD, DVM) +GSR = (GLN, NQG) +MHH = (VGS, TRH) +HMT = (BLB, CLR) +JCJ = (NJF, MFR) +MDK = (RPV, MDX) +LRR = (DPQ, XTB) +RKJ = (PDP, BLD) +MJF = (RXX, SGS) +NCG = (NRT, FVP) +QQV = (JXD, FCV) +MJQ = (BCC, KFL) +TKD = (MJJ, QBJ) +MND = (MDK, KBG) +RXG = (MRJ, DLD) +BGT = (DHM, VDX) +XCP = (LPP, JTV) +TRS = (QPH, GCS) +FPS = (MGM, KSX) +MVL = (SMG, RPH) +BJM = (NVD, FKV) +BSJ = (TJH, DKS) +MTV = (PLP, HJL) +GQC = (FTV, DJD) +CQL = (FTK, MQF) +VQM = (RMV, CJC) +SLZ = (JGT, LBJ) +HVC = (MCV, RPC) +LFX = (MHK, SXL) +BJQ = (LFC, RNK) +BFV = (FGX, CNB) +DRK = (HMT, XNV) +VBD = (NKP, FRN) +KBN = (STS, VKN) +XQX = (HJM, QJN) +MPR = (HQG, MFN) +KFB = (MFS, QVD) +GHM = (QDQ, DPP) +KBD = (QPT, FDV) +MVH = (FVL, XRR) +PGB = (RVG, TRS) +RGM = (NRT, FVP) +KKT = (QHR, GNZ) +TCJ = (RDS, BJQ) +MVQ = (HBD, RBC) +CKC = (XKH, FBQ) +SHX = (XHF, STX) +NVR = (RFF, GRH) +DKF = (RCN, XJS) +KTB = (BSJ, SCL) +HSJ = (PHB, JTH) +RJH = (DCC, CCH) +FNK = (QFF, CKV) +XNH = (SGS, RXX) +NRV = (DXF, DXF) +HRM = (RNH, GKS) +LJL = (GBX, FCH) +RDN = (PVJ, QKP) +JXM = (MVQ, RVP) +XLR = (HBH, MGJ) +QXP = (HPX, TGV) +HQH = (TTQ, LDQ) +HGJ = (FCK, HGS) +JTH = (LPD, DDK) +NKK = (FCX, PMT) +DHQ = (MND, BJV) +RFF = (FLV, QLQ) +RGB = (GBF, JCS) +RMX = (DFV, RPL) +VXF = (XRR, FVL) +SMG = (RSN, VBM) +KBG = (RPV, MDX) +QCZ = (BLP, RXT) +CQK = (BJG, HPL) +FDV = (RRH, CKQ) +CKQ = (QDN, NJH) +RRL = (JMM, VBN) +RVG = (QPH, GCS) +FTT = (GRG, PMJ) +FHD = (KMD, DHV) +GFM = (MRG, CDX) +FFG = (QRK, FHX) +RTG = (GSF, HQN) +PXS = (MLX, QJV) +MQJ = (JHT, SGH) +KSX = (RDH, PTT) +VXP = (VBG, XQX) +PMX = (TRH, VGS) +BPR = (GRQ, JXM) +VKD = (STT, FXF) +SXL = (KKX, VTP) +HDD = (GCD, FSC) +GTJ = (GRB, TKB) +CHT = (VXP, VXR) +RBC = (CKC, HBB) +XBS = (TKD, TKD) +KHH = (CQL, HQF) +XTX = (TPR, LGG) +LKK = (LLM, LPV) +VFK = (VDR, MQJ) +JLX = (VJK, FMJ) +FRV = (SMH, BJP) +GTC = (CGP, BLS) +PHR = (LTQ, LVD) +GCD = (BFG, NTH) +SBN = (KXM, LJC) +STX = (QBK, VDC) +FBG = (RTG, CTK) +CKV = (BJM, QCG) +DPF = (XCP, QKM) +FKF = (MVH, VXF) +BLB = (PGK, NFS) +XPV = (MJQ, BHG) +GMX = (FTT, KVX) +LBH = (DFJ, SPC) +JHC = (CDX, MRG) +GNL = (TJJ, MKM) +DSM = (FTH, FFG) +FFT = (QGN, LRB) +GRG = (NPJ, LNN) +JFJ = (HHG, LVQ) +CGR = (FMS, KRS) +LFS = (XTX, FLQ) +DMF = (TCF, PNQ) +LVQ = (RTC, RPQ) +DFJ = (SXC, LRR) +VLF = (RDS, BJQ) +LMJ = (BPL, XSF) +BVJ = (BHG, MJQ) +NRB = (QTX, DGF) +GKK = (RMN, QDP) +CFD = (PNQ, TCF) +GBX = (DSM, DVS) +NTM = (BPB, BPB) +XKH = (GHJ, FSV) +LGG = (BXD, FVX) +DBR = (RVG, TRS) +GTG = (BJG, HPL) +HKK = (NCG, RGM) +CKG = (LKV, QNK) +FKG = (RMT, DPF) +QVQ = (DKD, QTM) +LDK = (KTL, JMR) +PHJ = (PBN, HND) +PFZ = (PXF, VHC) +VLX = (KVX, FTT) +KQF = (HBH, MGJ) +RQN = (SSK, PMP) +CMQ = (TQB, BBM) +NHP = (FKG, FKG) +DVT = (GKK, VJN) +RPG = (FCK, HGS) +RBN = (RKK, RQN) +PBN = (RDL, PXS) +RCH = (QTM, DKD) +CRN = (VXP, VXR) +TNN = (KBF, TDV) +RFL = (QJP, CLF) +NJF = (DMF, CFD) +NQG = (RMX, NGG) +VDR = (JHT, SGH) +FPV = (GHN, BRB) +PBL = (DMS, KFB) +XTB = (JJX, GNL) +HGS = (FKM, BNR) +CCH = (BJC, MBP) +STT = (LMQ, BXS) +LTQ = (SLS, PKV) +SFN = (LCN, DTK) +NGH = (QVR, TDG) +RQK = (RPR, NRL) +PDP = (NDH, XGL) +FCH = (DSM, DVS) +QCD = (SCH, LDS) +TKF = (BTF, JQJ) +BPL = (BGT, FCN) +SVJ = (CQL, HQF) +QTG = (JPJ, JCF) +NSN = (GFM, JHC) +JCS = (HJG, FPV) +HRC = (GRH, RFF) +VGH = (LLM, LPV) +BRB = (XBS, BXT) +JMR = (HFF, FPS) +VJN = (RMN, QDP) +HPX = (TKF, CFG) +CFT = (QVF, MJM) +DBX = (KVL, DLS) +NHV = (PHJ, DMH) +FTH = (QRK, FHX) +XFB = (DVM, HDD) +XPP = (MLH, VFK) +CGP = (CQK, GTG) +MDL = (FFT, CBC) +GNZ = (KPG, KTV) +BJV = (KBG, MDK) +SCH = (FGF, XHG) +RXX = (KMC, RQK) +HQG = (GHK, RRL) +KKX = (JHX, HQQ) +LVD = (SLS, PKV) +QQP = (XJB, HSJ) +MTB = (LMJ, PCP) +FMJ = (KQM, DHQ) diff --git a/2023/src/bin/day08.rs b/2023/src/bin/day08.rs new file mode 100644 index 0000000..884d481 --- /dev/null +++ b/2023/src/bin/day08.rs @@ -0,0 +1,67 @@ +#![feature(test)] +extern crate test; +use std::collections::HashMap; + +use aoc2023::{boilerplate, common::*}; + +const DAY: usize = 08; +type Parsed<'a> = (Vec, HashMap<&'a str, (&'a str, &'a str)>); + +#[derive(Debug, PartialEq, Copy, Clone)] +enum Direction { + Left, + Right, +} + +fn parse_input(raw: &str) -> Parsed { + let (directions, map) = raw.split_once("\n\n").unwrap(); + let directions = directions + .bytes() + .map(|i| match i { + b'L' => Direction::Left, + b'R' => Direction::Right, + _ => unreachable!(), + }) + .collect(); + let map = map.lines().map(|l| (&l[0..=2], (&l[7..=9], &l[12..=14]))).collect(); + (directions, map) +} + +fn part1((directions, map): &Parsed) -> usize { + directions + .iter() + .cycle() + .scan("AAA", |pos, dir| { + let next = match dir { + Direction::Left => map.get(pos)?.0, + Direction::Right => map.get(pos)?.1, + }; + if next == "ZZZ" { + None + } else { + *pos = next; + Some(next) + } + }) + .count() + + 1 +} + +fn part2(parsed: &Parsed) -> usize { + unimplemented!() +} + +boilerplate! { + TEST_INPUT == "LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ)", + tests: { + part1: { TEST_INPUT => 6 }, + part2: { TEST_INPUT => 0 }, + }, + bench1 == 12083, + bench2 == 0, + bench_parse: |(v, m): &Parsed| { assert_eq!(m["AAA"], ("MJJ", "QBJ")); (v.len(), v[0]) } => (281, Direction::Left), +}