From 542785bb812107ac0a50f6eb977ccacc7f0d356e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=B8ren=20Fuglede=20J=C3=B8rgensen?= Date: Fri, 8 Dec 2023 06:27:33 +0100 Subject: [PATCH] Add solution to 2023-12-08 --- 2023/day08/input | 752 ++++++++++++++++++++++++++++++++++++++++ 2023/day08/solutions.py | 27 ++ 2 files changed, 779 insertions(+) create mode 100644 2023/day08/input create mode 100644 2023/day08/solutions.py diff --git a/2023/day08/input b/2023/day08/input new file mode 100644 index 0000000..6ea6cb9 --- /dev/null +++ b/2023/day08/input @@ -0,0 +1,752 @@ +LRRRLRRLLRRLRRLRRLRRLRLLRLRLLRRLRLRRRLRRLRRLLRLRLRLRRRLRRRLLRLRRRLLRRRLRLLRRRLLRRLRLRLRRRLLRRLRRRLLRRLRLRRRLLRRRLRRLRLRRRLLRRLRRRLRRLLRRLRRLRRRLRRRLRRRLRRLRRRLLRLRLRLRRRLRRLRRRLRRLRLRRLRLRRRLRRRLRRLRRRLLRRRLLRRLRLRRRLRLRLRRRLRLRLRLRRLRLRRLRRLLRRRLRLLRRLRRRLRRRLLRRLRLLLLRRLRRRR + +PGQ = (QRB, MJB) +JQC = (MNM, TLQ) +HNP = (NKD, PJT) +MDM = (SPC, RJP) +QMZ = (BFS, TVG) +FHJ = (MRQ, BRJ) +QBT = (HTH, JXN) +MQN = (NLQ, JQN) +JTR = (TRS, TTN) +BXC = (JMQ, BMN) +JGD = (NBS, MDV) +SML = (NCX, TRX) +BDB = (SVH, RSP) +RLQ = (PML, GKR) +LKS = (NDR, CGG) +SQB = (KPB, TQR) +JFS = (BTX, LSK) +BMJ = (BXC, SBP) +KDX = (MCQ, GQP) +XKR = (FKN, VBR) +BPX = (XTV, GQH) +SQH = (JGK, CGK) +XRJ = (PQD, SBL) +QXF = (TDH, XXN) +BJS = (SCQ, LPD) +NMV = (STS, PSG) +GXB = (MSV, LNQ) +FQX = (LKV, CTL) +TJQ = (FHS, CXJ) +PLP = (HKG, JKB) +MFL = (RRP, CMB) +NLF = (CCF, FST) +MXA = (GKS, LTM) +KJG = (GFJ, GFJ) +VXC = (QCQ, JTH) +QCD = (CVB, CHH) +RFR = (KGH, VBF) +JMC = (XTF, SQH) +RPQ = (CSH, MFJ) +TNK = (GSD, KFZ) +HXM = (JXP, JLD) +TGJ = (SML, KDL) +XDS = (MFJ, CSH) +PQX = (NNL, MXR) +KFD = (LPN, PXQ) +SJX = (GCP, BJS) +BHH = (XMV, MFP) +GPV = (VGQ, HDV) +VJS = (JPS, QRL) +MGH = (HSH, BGV) +CNN = (XQB, RLQ) +FKN = (JHR, VMV) +HFR = (BJV, BQT) +HHB = (JSH, XKS) +GHL = (NJJ, HXB) +MXN = (PQD, SBL) +DLM = (TMG, TNK) +RJS = (MCC, NHS) +JHP = (RXT, RDD) +RHQ = (DKG, VHJ) +HRN = (QXF, JBH) +GPD = (LTL, JSV) +QFP = (DDQ, MFL) +TSD = (TGD, LCS) +KKS = (TVG, BFS) +BLG = (TCN, DXP) +HFS = (XFH, SKH) +PPP = (QCD, QDV) +TQM = (QCQ, JTH) +BTX = (QGG, GLJ) +HXG = (BPT, JBJ) +FSC = (QKJ, JFB) +MLB = (LVH, DSF) +HHK = (VCT, GHL) +QGF = (BPX, SVF) +QVP = (GJP, BHB) +PHC = (FQV, RNQ) +XFS = (MDV, NBS) +MVN = (VTR, FQX) +XVT = (LHF, RTX) +FQT = (VDV, HNV) +JJX = (KDP, KHD) +LTD = (FTJ, FTJ) +PXL = (NBL, LGC) +GKS = (XGX, HTQ) +CDQ = (XGL, GFN) +MBP = (KCR, VGV) +HKT = (JLD, JXP) +VJT = (DVX, KVF) +BFR = (RGC, DDG) +VVJ = (XGL, GFN) +CJQ = (RXT, RDD) +SHZ = (HLF, HHX) +VQA = (TVG, BFS) +NFJ = (DCQ, FSC) +KHP = (KHB, LFG) +BMN = (PKB, XHH) +SVF = (GQH, XTV) +NQN = (XBB, DSP) +NBS = (XXD, GPD) +BJD = (SVF, BPX) +XGH = (MLR, HFS) +VQT = (HKK, BMJ) +JSM = (SKX, FHJ) +SBP = (JMQ, BMN) +SCQ = (FMP, SPS) +XMS = (DKC, HQS) +CCC = (MPP, GPV) +VBJ = (KHB, LFG) +CVB = (LTN, JGJ) +NHV = (FVX, PMR) +NFX = (LLB, DXD) +PTN = (HHT, GCF) +XCV = (VBR, FKN) +PJT = (DBB, VRJ) +VHJ = (JNT, QJT) +CSH = (QHM, KTK) +NQL = (XVQ, QVP) +DNV = (TSD, SLF) +NFT = (QDB, GPH) +MPQ = (TNB, PTN) +TQR = (VJH, NRX) +QCS = (CLJ, VGS) +RGK = (PGQ, ZZZ) +SKX = (MRQ, BRJ) +MKG = (TSR, HTF) +JMQ = (PKB, XHH) +RNK = (JBP, QQN) +RNH = (JKQ, VBP) +TJN = (FRQ, MVN) +JFB = (XQF, FLF) +BRJ = (NBR, RSD) +KVH = (DMX, JDC) +DXP = (CXN, BCH) +KVF = (JGQ, KJK) +JKB = (XHL, DBM) +GRF = (TGJ, GFF) +DPR = (TBV, GJV) +CRF = (RJJ, VDG) +FQG = (HRJ, NQF) +HDV = (SJX, MMF) +SLF = (LCS, TGD) +CGL = (NDF, VPV) +GQK = (JTQ, PSM) +PKB = (LSP, VMB) +HCK = (TSD, SLF) +MPG = (CQN, DTK) +HLF = (KFK, NNK) +XXN = (RHQ, SSC) +NKD = (VRJ, DBB) +NVQ = (NDF, VPV) +ZZZ = (MJB, QRB) +FQV = (STP, LMG) +KQC = (RGC, DDG) +LNJ = (XCV, XKR) +JSV = (VNM, CVM) +XLQ = (XGP, LFQ) +DLC = (RBB, GVS) +SCS = (BJP, CJR) +RRP = (KJG, KJG) +KRX = (FCB, CXP) +BQT = (QPJ, DCP) +MGF = (LNJ, JRK) +CCM = (VJN, JMD) +XQF = (KCH, HXH) +RGC = (SRS, QVB) +JTH = (KJH, MKG) +MQS = (RSV, VQQ) +DFN = (CGL, NVQ) +DXD = (XMS, BQP) +NRX = (RNV, SFC) +GDP = (BJJ, MBP) +FQF = (NRV, FHT) +SGK = (CLJ, VGS) +SGR = (PJT, NKD) +TTN = (XLP, HFM) +LHP = (GPP, BHH) +NNK = (JQT, PLP) +DKM = (NDC, BDM) +VNM = (JJV, GVP) +FCB = (HRN, TJP) +LJQ = (QGF, BJD) +MCC = (HJN, KLK) +KXP = (HJC, VSC) +VDX = (DMS, VVM) +QDB = (SPT, JRP) +CBA = (PQX, PMM) +GKR = (LTD, GBP) +KHV = (QCP, VQT) +LMM = (GDP, TFD) +VXK = (PXV, QDC) +QMH = (HCK, DNV) +GPC = (BGV, HSH) +HXH = (HRP, FXD) +TFR = (QDV, QCD) +RJJ = (RTP, XFK) +TCB = (DMS, VVM) +HRP = (KXP, HCG) +DDQ = (RRP, RRP) +XXD = (LTL, JSV) +CTL = (TXP, MLB) +SFH = (HDP, HHK) +QCF = (TTN, TRS) +SNJ = (TVF, CNN) +DRM = (DCL, DSM) +VVN = (TFR, PPP) +KDB = (BJP, CJR) +VJN = (TCG, NMV) +VQH = (PDF, NVG) +XTS = (TQM, VXC) +TLM = (JQN, NLQ) +NVP = (FRQ, MVN) +MNK = (CXP, FCB) +DCQ = (JFB, QKJ) +HXB = (RJS, SPD) +NJT = (SRL, HCD) +LPT = (TFD, GDP) +LCT = (RFK, FNR) +NXD = (KKS, KKS) +VGS = (KGX, XLQ) +FHT = (SVP, XVF) +QND = (HHK, HDP) +BJP = (TJN, NVP) +RVK = (DFK, QGP) +RQN = (BHM, CKP) +GJP = (VQS, RFR) +RBT = (JBP, JBP) +DMP = (DSP, XBB) +GPP = (MFP, XMV) +JTQ = (XGH, SNR) +FTJ = (TDB, TDB) +XHL = (QMC, HGT) +GMC = (LKN, GHN) +RBB = (JDJ, BTB) +HFM = (KMG, QBP) +CPQ = (BLH, DPR) +CXD = (SMQ, GSP) +FSM = (BLK, LQH) +BPT = (DLL, QBT) +CKP = (XJX, SDJ) +FTK = (QMH, FSG) +TLQ = (DFP, QDQ) +MFJ = (QHM, KTK) +JGK = (GDN, HBF) +GNK = (VFB, GRF) +TCN = (CXN, BCH) +QPB = (FMF, CCM) +CHM = (PXV, QDC) +KCV = (XXR, XXR) +HQS = (MGH, GPC) +RDK = (MFF, DFN) +SPT = (LKS, KCJ) +NMS = (LQH, BLK) +KGN = (VQT, QCP) +VBC = (RBT, RNK) +SBL = (FDH, VVN) +CJR = (NVP, TJN) +DBD = (SHB, FFS) +SRS = (NQN, DMP) +DSS = (QJD, PHC) +QQN = (NXD, DVJ) +RNQ = (STP, LMG) +LMJ = (RTX, LHF) +MQG = (GTV, XPP) +JBP = (NXD, NXD) +TCT = (MGR, MPG) +KCH = (FXD, HRP) +XHZ = (LTM, GKS) +JTK = (NFX, FGB) +PSG = (NHK, VBC) +LCM = (GFJ, FXZ) +GVS = (BTB, JDJ) +CCF = (LPV, JVD) +JLD = (HGH, VJT) +DKC = (MGH, GPC) +DBM = (HGT, QMC) +GKJ = (HKT, HXM) +KTK = (LJQ, RHK) +CFT = (VXK, CHM) +PVP = (MQN, TLM) +SLT = (NBL, LGC) +LGX = (LNQ, MSV) +DKG = (JNT, QJT) +QHM = (LJQ, RHK) +DFP = (KMF, BCF) +MFF = (NVQ, CGL) +TGD = (JQC, LCJ) +KXK = (CQD, BRB) +KCJ = (CGG, NDR) +RHK = (BJD, QGF) +MXR = (DKP, HCP) +XPP = (PVB, NHV) +TMG = (GSD, GSD) +MDV = (XXD, GPD) +RSV = (VDX, TCB) +HCG = (VSC, HJC) +NBJ = (SLH, TCT) +NBL = (CXV, HHN) +KTF = (GBR, MLN) +LMT = (HQJ, NFT) +SGS = (FSG, QMH) +NTN = (NFJ, XBH) +NXR = (XXR, XHZ) +PXV = (SGK, QCS) +LMG = (XHG, PVP) +HTH = (MDM, DNL) +KNF = (XRJ, MXN) +TNB = (GCF, HHT) +NDR = (PXL, SLT) +NRV = (XVF, SVP) +PVF = (PSM, JTQ) +MGV = (VXC, TQM) +QFD = (BHH, GPP) +DKP = (NQR, HQL) +MSV = (SQB, JJD) +VSC = (MPV, NJT) +BHV = (VRQ, HFR) +PGB = (DDQ, MFL) +VCT = (NJJ, HXB) +HNV = (QMG, PDJ) +SKH = (TDP, HPM) +HSH = (SRN, RQL) +PML = (LTD, GBP) +CJP = (SDT, SSQ) +SDJ = (NLF, HRD) +BCK = (CQV, MBS) +NLQ = (DFX, RKQ) +JQT = (HKG, JKB) +JDJ = (SBK, XLL) +VQS = (KGH, VBF) +DCP = (PPR, MBV) +JGQ = (QBH, GSK) +FFS = (HHB, PFH) +QVB = (DMP, NQN) +QCP = (BMJ, HKK) +MPV = (SRL, HCD) +NCX = (MGF, VFL) +JJV = (FNH, KFF) +SSC = (DKG, VHJ) +XNN = (MBS, CQV) +PSM = (XGH, SNR) +XLP = (KMG, QBP) +LCJ = (TLQ, MNM) +BNP = (CHM, VXK) +GXF = (XVQ, QVP) +RSD = (MTN, TMQ) +CCR = (KRX, MNK) +BGV = (RQL, SRN) +HJC = (NJT, MPV) +SXR = (HPK, TMF) +DTK = (JGL, MLX) +SDG = (QCH, TLP) +MSK = (PNN, TTS) +SPC = (FQG, MJN) +VPV = (CGR, TTF) +XJG = (QFX, BLG) +TSX = (TXB, DFS) +QMG = (KFD, VJJ) +NDF = (CGR, TTF) +LVH = (FJX, FNX) +MLS = (VJS, BSJ) +VSG = (DFS, TXB) +RFK = (CNB, CNB) +XVQ = (BHB, GJP) +CJG = (SXR, CDV) +SHL = (LRH, GKJ) +QJT = (NVF, PVG) +NHS = (KLK, HJN) +JXN = (DNL, MDM) +BLK = (CRF, DKS) +DFS = (TPX, MQS) +LPN = (RGB, NBJ) +DSP = (TPF, JMC) +LRR = (NDC, BDM) +GSP = (GVJ, LMT) +BNK = (MPP, GPV) +LTN = (LRR, DKM) +PPR = (JHV, MLS) +CGR = (MMQ, TQQ) +JFK = (KRX, MNK) +MMF = (GCP, BJS) +PDJ = (VJJ, KFD) +JBH = (TDH, XXN) +SSR = (KDX, TDV) +TFD = (BJJ, MBP) +SHB = (PFH, HHB) +GCF = (XVP, CJP) +QPJ = (MBV, PPR) +DFX = (KGN, KHV) +XTF = (CGK, JGK) +XLL = (CJG, VHH) +LKT = (NVG, PDF) +VGQ = (MMF, SJX) +TLP = (JTK, SCT) +QDQ = (KMF, BCF) +RNV = (XLM, MQG) +SDT = (KJT, LFX) +XQB = (PML, GKR) +FHS = (TPP, KNF) +QJD = (FQV, RNQ) +SBK = (CJG, VHH) +MMQ = (XDS, RPQ) +GCQ = (VDV, HNV) +BKQ = (KDP, KHD) +JHV = (BSJ, VJS) +GFF = (KDL, SML) +JDC = (PMH, SBR) +FMF = (JMD, VJN) +JQN = (RKQ, DFX) +PVB = (PMR, FVX) +HGH = (KVF, DVX) +BHB = (RFR, VQS) +SPD = (MCC, NHS) +JXP = (HGH, VJT) +GVP = (FNH, KFF) +VJH = (RNV, SFC) +GHN = (VQH, LKT) +HHT = (XVP, CJP) +FGB = (DXD, LLB) +HVL = (BDB, VJQ) +DMX = (PMH, SBR) +NVG = (JGD, XFS) +VDG = (RTP, XFK) +CXV = (TBC, HVL) +RDD = (GXF, NQL) +CDV = (TMF, HPK) +RSP = (KVH, XVV) +FNH = (LKH, JLL) +MTN = (LFD, MSK) +TPX = (RSV, VQQ) +DSM = (RXB, SHZ) +MGC = (SKX, FHJ) +PQD = (FDH, VVN) +XJX = (NLF, HRD) +FVX = (XJG, LHJ) +XXR = (GKS, LTM) +HHN = (TBC, HVL) +XTV = (FTK, SGS) +TPP = (MXN, XRJ) +JKQ = (SXP, KTF) +LFX = (MGV, XTS) +LFD = (PNN, TTS) +XLM = (XPP, GTV) +JRP = (LKS, KCJ) +SCT = (FGB, NFX) +BRB = (RDX, SSR) +BPQ = (QND, SFH) +GJV = (NMS, FSM) +MRQ = (NBR, RSD) +BQP = (HQS, DKC) +VFB = (TGJ, GFF) +KFZ = (PMM, PQX) +NNL = (DKP, HCP) +RSK = (CFQ, QSN) +CVM = (GVP, JJV) +TBV = (NMS, FSM) +FCG = (MXX, LCT) +LSP = (DBD, FTS) +DVX = (JGQ, KJK) +JHR = (RMJ, HQV) +TQQ = (RPQ, XDS) +CXN = (PSB, PSB) +JRK = (XCV, XKR) +LLB = (BQP, XMS) +KJK = (QBH, GSK) +KFK = (JQT, PLP) +GDN = (JFS, TXD) +TXB = (TPX, MQS) +BJV = (DCP, QPJ) +HKK = (BXC, SBP) +FST = (JVD, LPV) +PSP = (TNP, FQF) +QCQ = (KJH, MKG) +TDB = (PGQ, PGQ) +HCP = (NQR, HQL) +XBH = (DCQ, FSC) +SNR = (MLR, HFS) +JSL = (DFK, QGP) +PFH = (XKS, JSH) +XFH = (TDP, HPM) +DSF = (FNX, FJX) +HPK = (SNJ, KXT) +SPS = (JJX, BKQ) +KXT = (TVF, CNN) +HDP = (VCT, GHL) +VGV = (THX, VBG) +KHB = (DSS, QFF) +JNT = (PVG, NVF) +QBH = (BVN, BVN) +LNQ = (SQB, JJD) +LQH = (CRF, DKS) +FMP = (BKQ, JJX) +HQJ = (QDB, GPH) +JJD = (KPB, TQR) +MFP = (BNK, CCC) +LSK = (GLJ, QGG) +GSK = (BVN, BCX) +MPP = (HDV, VGQ) +CMB = (KJG, LCM) +JGJ = (DKM, LRR) +VFK = (GQK, PVF) +GVJ = (NFT, HQJ) +RXB = (HHX, HLF) +PDF = (JGD, XFS) +RCD = (VVR, QVG) +VRQ = (BJV, BQT) +CLJ = (XLQ, KGX) +PPK = (XBH, NFJ) +HRJ = (QVV, GNK) +NDC = (TCF, DXQ) +DMC = (VBP, JKQ) +NJJ = (RJS, SPD) +JBB = (RDK, FNL) +QMC = (PSP, BKN) +GBR = (GXS, HXG) +HGT = (PSP, BKN) +LPD = (FMP, SPS) +NHK = (RBT, RNK) +NVF = (LMM, LPT) +HRD = (CCF, FST) +MNM = (QDQ, DFP) +HQV = (NML, RSN) +MLX = (LMJ, XVT) +KGH = (FCG, SCK) +LHJ = (BLG, QFX) +HQL = (DMC, RNH) +LGC = (HHN, CXV) +MBS = (TJQ, LVN) +LRJ = (PVF, GQK) +PXQ = (RGB, NBJ) +TSR = (NTN, PPK) +VMV = (RMJ, HQV) +DCL = (RXB, RXB) +HHX = (NNK, KFK) +XPV = (SFH, QND) +XGL = (SXG, DLC) +LRH = (HKT, HXM) +JBA = (HPC, JBB) +KHD = (CJQ, JHP) +LVN = (FHS, CXJ) +GLJ = (LHP, QFD) +KLK = (VVJ, CDQ) +SRN = (KHQ, MPQ) +TTS = (GMC, PKT) +VJJ = (LPN, PXQ) +JCG = (VVR, QVG) +JLL = (RCD, JCG) +BLH = (GJV, TBV) +GQP = (FQT, GCQ) +FDH = (PPP, TFR) +HJN = (CDQ, VVJ) +FLF = (HXH, KCH) +SBR = (KDB, SCS) +RSN = (FKX, BHV) +SVP = (CXD, NCP) +TJP = (QXF, JBH) +JGL = (XVT, LMJ) +PMR = (XJG, LHJ) +PNN = (PKT, GMC) +KJT = (MGV, XTS) +MJN = (HRJ, NQF) +TNP = (FHT, NRV) +LFQ = (BCK, XNN) +FXD = (KXP, HCG) +JRL = (BNP, CFT) +VMB = (FTS, DBD) +QCH = (JTK, SCT) +BJJ = (KCR, VGV) +AAA = (QRB, MJB) +JPS = (KQC, BFR) +VHH = (SXR, CDV) +TXD = (LSK, BTX) +XGX = (TNT, JRL) +VBP = (SXP, KTF) +MJB = (VBJ, KHP) +DVJ = (KKS, QMZ) +CQV = (LVN, TJQ) +GSD = (PQX, PMM) +PKT = (GHN, LKN) +FNR = (CNB, DLM) +GQH = (SGS, FTK) +XGP = (XNN, BCK) +TTF = (TQQ, MMQ) +TXP = (DSF, LVH) +JVD = (PGB, QFP) +GCP = (LPD, SCQ) +FNL = (DFN, MFF) +PTC = (LRH, GKJ) +PSB = (DCL, DCL) +KMF = (VFK, LRJ) +VNN = (TDB, RGK) +DMS = (CSR, RQN) +CNB = (TMG, TMG) +SMQ = (LMT, GVJ) +VBG = (PTC, SHL) +VMQ = (QCH, TLP) +FTS = (SHB, FFS) +BCX = (KCV, NXR) +CSR = (BHM, CKP) +TCF = (CPQ, QVH) +PHN = (KXK, MPL) +MXX = (RFK, FNR) +MQH = (FMF, CCM) +SSQ = (KJT, LFX) +BVN = (KCV, KCV) +LFG = (DSS, QFF) +QFX = (TCN, DXP) +XFK = (CCR, JFK) +DDG = (SRS, QVB) +TVF = (RLQ, XQB) +TNT = (CFT, BNP) +GFN = (DLC, SXG) +BCH = (PSB, DRM) +XKS = (BPQ, XPV) +SFC = (XLM, MQG) +LHV = (KXK, MPL) +NQR = (DMC, RNH) +RTP = (CCR, JFK) +VFL = (LNJ, JRK) +DKS = (VDG, RJJ) +VVM = (CSR, RQN) +MCQ = (GCQ, FQT) +CXJ = (KNF, TPP) +DFK = (HML, RSK) +QDV = (CHH, CVB) +TVG = (JSM, MGC) +XBB = (TPF, JMC) +PMM = (MXR, NNL) +CGK = (HBF, GDN) +LKV = (MLB, TXP) +HCD = (VSG, TSX) +XMV = (BNK, CCC) +TMQ = (MSK, LFD) +JMD = (TCG, NMV) +HPM = (VMQ, SDG) +LKN = (LKT, VQH) +TMF = (KXT, SNJ) +BKN = (TNP, FQF) +LCS = (LCJ, JQC) +QRB = (VBJ, KHP) +QSN = (MQH, QPB) +XHG = (MQN, TLM) +JBJ = (DLL, QBT) +SLH = (MPG, MGR) +QVG = (QCF, JTR) +JSH = (BPQ, XPV) +TDV = (MCQ, GQP) +VVR = (JTR, QCF) +NBR = (MTN, TMQ) +QGP = (RSK, HML) +GXS = (BPT, JBJ) +PMH = (SCS, KDB) +GBP = (FTJ, VNN) +BHM = (SDJ, XJX) +RTX = (GXB, LGX) +MLR = (XFH, SKH) +GFJ = (HPC, JBB) +DBB = (JSL, RVK) +CXP = (TJP, HRN) +SCK = (MXX, LCT) +VBF = (FCG, SCK) +TDP = (VMQ, SDG) +GTV = (NHV, PVB) +RXT = (NQL, GXF) +LPV = (PGB, QFP) +RMJ = (RSN, NML) +MPL = (CQD, BRB) +DNL = (RJP, SPC) +LTM = (XGX, HTQ) +HTF = (PPK, NTN) +VQQ = (VDX, TCB) +FJX = (PHN, LHV) +SXP = (GBR, MLN) +VJQ = (RSP, SVH) +BTB = (XLL, SBK) +KJH = (HTF, TSR) +FRQ = (FQX, VTR) +KHQ = (PTN, TNB) +KPB = (VJH, NRX) +HTQ = (JRL, TNT) +TCG = (STS, PSG) +QVH = (BLH, DPR) +QDC = (SGK, QCS) +BDM = (DXQ, TCF) +CFQ = (QPB, MQH) +STP = (PVP, XHG) +RGB = (SLH, TCT) +BSJ = (JPS, QRL) +RDX = (TDV, KDX) +TBC = (BDB, VJQ) +SRL = (TSX, VSG) +KDP = (CJQ, JHP) +KMG = (SGR, HNP) +FNX = (LHV, PHN) +QRL = (KQC, BFR) +LHF = (LGX, GXB) +FSG = (DNV, HCK) +HML = (CFQ, QSN) +HSA = (HHX, HLF) +XVP = (SSQ, SDT) +KDL = (TRX, NCX) +RJP = (FQG, MJN) +DLL = (HTH, JXN) +XVF = (NCP, CXD) +CQN = (MLX, JGL) +QKJ = (FLF, XQF) +BFS = (MGC, JSM) +QFF = (PHC, QJD) +HPC = (FNL, RDK) +MGR = (CQN, DTK) +THX = (PTC, SHL) +TPF = (XTF, SQH) +FKX = (HFR, VRQ) +CQD = (RDX, SSR) +BCF = (VFK, LRJ) +STS = (NHK, VBC) +CGG = (SLT, PXL) +DXQ = (QVH, CPQ) +XHH = (LSP, VMB) +VBR = (JHR, VMV) +GPH = (JRP, SPT) +MBV = (MLS, JHV) +NCP = (GSP, SMQ) +NML = (BHV, FKX) +KFF = (LKH, JLL) +VTR = (LKV, CTL) +VDV = (QMG, PDJ) +QBP = (SGR, HNP) +TRX = (VFL, MGF) +HKG = (XHL, DBM) +QGG = (QFD, LHP) +TDH = (SSC, RHQ) +CHH = (JGJ, LTN) +QVV = (VFB, GRF) +KGX = (XGP, LFQ) +NQF = (QVV, GNK) +XVV = (DMX, JDC) +VRJ = (JSL, RVK) +LKH = (JCG, RCD) +RQL = (KHQ, MPQ) +MLN = (HXG, GXS) +SVH = (XVV, KVH) +PVG = (LMM, LPT) +HBF = (TXD, JFS) +FXZ = (JBB, HPC) +TRS = (XLP, HFM) +RKQ = (KHV, KGN) +SXG = (GVS, RBB) +LTL = (VNM, CVM) +KCR = (THX, VBG) diff --git a/2023/day08/solutions.py b/2023/day08/solutions.py new file mode 100644 index 0000000..7b05f41 --- /dev/null +++ b/2023/day08/solutions.py @@ -0,0 +1,27 @@ +import re +from itertools import cycle +from math import lcm + +with open("input") as f: + ws = [re.findall("\w+", l) for l in f.read().strip().split("\n")] + +(dirs, ), _, *moves = ws +move = { + "L": {start: l for start, l, _ in moves}, + "R": {start: r for start, _, r in moves}, +} + + +def length(here, part1=False): + for i, d in enumerate(cycle(dirs)): + here = move[d][here] + if (part1 and here == "ZZZ") or (not part1 and here[-1] == "Z"): + return i + 1 + + +# Part 1 +print(length("AAA", part1=True)) + +# Part 2 +starts = [start for start, _, _ in moves if start[-1] == "A"] +print(lcm(*map(length, starts)))