diff --git a/day8/Cargo.lock b/day8/Cargo.lock new file mode 100644 index 0000000..be2d676 --- /dev/null +++ b/day8/Cargo.lock @@ -0,0 +1,92 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "day8" +version = "0.1.0" +dependencies = [ + "num", +] + +[[package]] +name = "num" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b05180d69e3da0e530ba2a1dae5110317e49e3b7f3d41be227dc5f92e49ee7af" +dependencies = [ + "num-bigint", + "num-complex", + "num-integer", + "num-iter", + "num-rational", + "num-traits", +] + +[[package]] +name = "num-bigint" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-complex" +version = "0.4.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ba157ca0885411de85d6ca030ba7e2a83a28636056c7c699b07c8b6f7383214" +dependencies = [ + "num-traits", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-iter" +version = "0.1.43" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7d03e6c028c5dc5cac6e2dec0efda81fc887605bb3d884578bb6d6bf7514e252" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-rational" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0638a1c9d0a3c0914158145bc76cff373a75a627e6ecbfb71cbe6f453a5a19b0" +dependencies = [ + "autocfg", + "num-bigint", + "num-integer", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "39e3200413f237f41ab11ad6d161bc7239c84dcb631773ccd7de3dfe4b5c267c" +dependencies = [ + "autocfg", +] diff --git a/day8/Cargo.toml b/day8/Cargo.toml new file mode 100644 index 0000000..1584955 --- /dev/null +++ b/day8/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "day8" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +num = "0.4.1" diff --git a/day8/input.txt b/day8/input.txt new file mode 100644 index 0000000..e4406cc --- /dev/null +++ b/day8/input.txt @@ -0,0 +1,728 @@ +LRRLRRRLRRLRRLRRRLRRLRLLRRRLRRRLRRRLRRRLRRRLRRLLRRRLLRLRRRLRRLRRRLLRRRLRLLRRLRLLRLRLLRRLRRRLRRLLRRRLRRRLRLRRRLRRRLRRRLRRRLRLRRRLLRRRLRRLRRRLRLRRRLRRLRLLLLLRRRLRRRLRRRLRRRLRRLLRLRLRRLRRLLRRRLRRRLRRRLLLRRRLRRRLRRRLRLRRRLLRLRLRRLRRLRRRLRRLRRRLRRRLRRRLRRLLRRRLRRLRRLRLLRRRR + +CTK = (JLT, HRF) +TQH = (DKT, HGB) +HQM = (XPV, TTR) +DLL = (MFK, HHS) +BVD = (BXB, FDB) +TTR = (BJG, MTF) +RPR = (CQL, KHJ) +KND = (TVL, QMF) +SQH = (XNP, MRD) +RXM = (HTR, BXT) +XSF = (BRL, XKR) +DGJ = (DQX, KCQ) +DFV = (KHJ, CQL) +CFC = (DPP, QKL) +NKD = (PVH, HQM) +RHK = (JRS, LJS) +XNB = (LCL, DRX) +JNR = (VMM, FLM) +NNB = (FFQ, XXQ) +RMQ = (NBJ, MND) +FGK = (SLK, QLG) +XBR = (NFS, CJM) +TDN = (XXX, KPX) +FXR = (DRT, KVM) +KKF = (LPC, KFT) +BTC = (NKC, DGJ) +CXP = (VNP, FTX) +XXK = (GRD, BHQ) +HNH = (NMF, FSH) +VBT = (NKC, DGJ) +RRS = (VVR, QXT) +VRM = (NDM, DRP) +GFR = (JPB, JML) +XHS = (LQM, SSV) +LQM = (GNT, RSS) +SBX = (QVJ, RJL) +DQX = (SMD, SMD) +KHC = (FJS, MVX) +FQQ = (HFX, TQS) +KFM = (KKQ, FFV) +HLZ = (MQN, LSB) +QXB = (XXQ, FFQ) +PQT = (HVJ, DPG) +HFX = (LHH, KDV) +RVK = (KVR, MHT) +MCS = (GJG, TGS) +CSP = (LHX, GJH) +HQV = (XXP, HLZ) +MVT = (XFN, LHQ) +FPS = (HTC, MSM) +THS = (FDV, JFM) +BNS = (VXQ, SVF) +PXZ = (BDJ, QHT) +GDV = (PGH, KND) +VPS = (HDP, CXX) +LHX = (FXR, FDJ) +VGN = (SJD, GRV) +FTB = (MFF, DQT) +XPV = (MTF, BJG) +RFT = (KFM, JJN) +FQX = (FHB, GDV) +JRT = (LLV, LDQ) +NVB = (RDQ, KQJ) +BHF = (KHT, HCL) +FJS = (BNQ, QGB) +KLV = (JFF, CFH) +CMK = (LJS, JRS) +QXA = (LSB, MQN) +SLM = (NHH, VCD) +XTF = (RXM, KCF) +NKC = (DQX, DQX) +GCX = (PVC, CVK) +NGG = (SBR, XKB) +JML = (FPS, RNT) +JSC = (FNG, BBR) +FDB = (FJC, QSH) +FBC = (BVR, MBD) +QTD = (HBH, THD) +JRS = (NHC, DGN) +MND = (MCN, CFC) +XCM = (DRF, RQS) +HTG = (JJN, KFM) +SQX = (DRP, NDM) +SQS = (NRJ, LXM) +PHD = (SQL, PQT) +MMB = (FJL, BFD) +KRJ = (MTQ, VPS) +HCQ = (DXP, DKQ) +BHN = (JXJ, PXR) +XKD = (QHG, TCT) +KVR = (HFL, NQK) +QXV = (HNH, FJK) +PNM = (MTJ, DTP) +SJJ = (BLH, LDN) +JPX = (QQL, QHN) +HDF = (SBX, JQT) +HJG = (TLD, XBG) +QJT = (BRN, FTM) +NXH = (MVT, XPK) +RCS = (TSC, TKG) +VJZ = (PVL, CFN) +QXT = (FBM, KJL) +SJG = (RPR, DFV) +LHH = (BBV, KLX) +QSV = (HFN, FRS) +FVJ = (HBH, THD) +FBR = (JHR, XMK) +MVX = (QGB, BNQ) +SQL = (HVJ, DPG) +NVJ = (PFN, JRR) +GXD = (CQJ, HGS) +NRP = (XDR, XLC) +FTX = (RSM, QBB) +LXM = (PBS, HRB) +VPB = (QRG, TVB) +PDS = (LQM, SSV) +XLQ = (QJV, VQD) +RNX = (BBJ, XPJ) +MRD = (NVJ, VJG) +PTQ = (XLC, XDR) +BDJ = (QGJ, BSV) +CFN = (MBB, KXJ) +HDG = (FJG, FJG) +DPT = (RDD, SLM) +QBB = (GXD, VNJ) +BLG = (HTG, RFT) +RNK = (DFV, RPR) +DKD = (CPM, SNF) +VXM = (DSG, JGP) +DPP = (JLK, NPC) +HRB = (FXK, KLJ) +SQD = (HMK, VVH) +LGV = (XKD, CQM) +JHR = (VCT, GKD) +JQT = (QVJ, RJL) +QVJ = (MRH, TGR) +DHG = (SFP, JVQ) +VQD = (FHV, BNS) +NHH = (STQ, VQQ) +CQT = (MPP, NJG) +NVV = (XQR, GQM) +KTX = (QSJ, QSJ) +BHQ = (FVX, DHG) +LJS = (NHC, DGN) +JXH = (KGM, JTX) +CKH = (XNB, PPG) +GML = (LPC, KFT) +LDN = (FMJ, QTT) +KPR = (DPT, CNJ) +CQF = (MJF, RVK) +HXC = (NXH, BSP) +GXT = (MND, NBJ) +HRP = (JRB, XBB) +GRD = (FVX, DHG) +LRP = (XPN, QXV) +HRQ = (QJT, TGT) +PGC = (FNB, HSV) +TSC = (PHJ, FLC) +PDA = (NVV, MSV) +PHJ = (SJJ, DJS) +JRB = (XSF, HSS) +BRN = (TGH, HPH) +RXL = (FJS, MVX) +XTD = (FTN, KTT) +TKV = (QTP, NHM) +JTX = (TQF, DMF) +JHP = (HMK, VVH) +JPN = (TMB, VPV) +SLK = (KKP, GCX) +MBB = (CLD, XBR) +BRQ = (JPX, GHX) +PRK = (GJH, LHX) +CNV = (PLV, VGN) +RQS = (KRG, KQM) +XQF = (BQB, KXX) +JRR = (GQF, XBC) +XMN = (GRP, CQT) +HKK = (CDS, RDF) +XSM = (LMQ, PNM) +NBZ = (QLG, SLK) +CMF = (BPL, FCS) +KLX = (RRV, SXM) +CBF = (CTJ, TCN) +VMM = (GML, KKF) +NQM = (PXR, JXJ) +QPL = (TDJ, MDK) +XXQ = (XXT, TLQ) +MPM = (HFX, TQS) +GQM = (XLV, TCK) +JNB = (JXH, JBT) +MPP = (XSM, FXH) +JSJ = (QPJ, FGL) +DHX = (SJG, RNK) +SKG = (XHS, PDS) +XMK = (GKD, VCT) +FMQ = (TQQ, FSS) +FSH = (DHX, QDM) +FXK = (VRM, SQX) +HBP = (LXM, NRJ) +GJG = (VTT, LJK) +QPJ = (VFX, DVQ) +MVM = (FGK, NBZ) +MSF = (QKP, XMN) +XQJ = (JPN, LJH) +KCJ = (GXT, RMQ) +GXB = (TCN, CTJ) +FFV = (VQS, PHD) +CLD = (NFS, CJM) +CXN = (VBT, BTC) +VPT = (FTR, NDP) +MSM = (VMG, GQH) +QJJ = (KTX, KTX) +NHM = (RCS, MFH) +FTR = (TXS, NGG) +HSV = (MPK, BDX) +LJK = (DKD, KQT) +VQS = (SQL, PQT) +FGL = (DVQ, VFX) +LSS = (PQK, PKV) +JQQ = (BVD, GFK) +JBQ = (HCQ, RQC) +BBJ = (PSR, BRQ) +XBB = (HSS, XSF) +MCN = (DPP, QKL) +BXT = (PGL, HNB) +KHT = (QQC, XXV) +HFP = (CDX, XST) +HFL = (NFG, CKH) +XVB = (FHQ, JXL) +FPQ = (NLS, TLL) +BPK = (RFK, DVP) +SDR = (JSJ, XRB) +FTN = (GLQ, HKK) +MTJ = (QTD, FVJ) +BBV = (SXM, RRV) +HJK = (CMP, DPF) +FJK = (FSH, NMF) +VFN = (FPQ, HTN) +DVP = (VXM, FXL) +XNP = (VJG, NVJ) +MSX = (VKJ, KBL) +FDJ = (DRT, KVM) +JNL = (RXF, FCD) +NKG = (QKP, XMN) +BRL = (DPV, FFN) +NSL = (TKV, KXR) +HHG = (MPM, FQQ) +GCN = (LJF, LJF) +XXV = (TQH, SDH) +RFD = (TGS, GJG) +NMF = (DHX, QDM) +XST = (GHC, HXC) +JFM = (LVJ, FSM) +VVX = (LBN, DLL) +HSS = (XKR, BRL) +MSP = (RXF, FCD) +BSP = (MVT, XPK) +RHQ = (KHT, HCL) +BBG = (VBT, BTC) +XXP = (LSB, MQN) +JGP = (VFN, XCD) +JSD = (BHQ, GRD) +DGN = (HMG, HPG) +HVJ = (QJB, VRL) +RDQ = (TRF, HJF) +VFP = (HBP, SQS) +XRB = (QPJ, FGL) +DMD = (MCS, RFD) +FLC = (SJJ, DJS) +VVH = (RPG, CXP) +FHJ = (JPV, PXZ) +MRH = (VPB, QFM) +QTT = (TXT, MFD) +HPH = (CCX, SKG) +HTC = (VMG, GQH) +RBF = (VXX, KRJ) +GFJ = (KTX, QPV) +QHG = (XLS, LXJ) +RFK = (VXM, FXL) +DKB = (BFD, FJL) +HRF = (KHC, RXL) +MKQ = (NKG, MSF) +JHQ = (BXH, XQF) +FVX = (SFP, JVQ) +VVR = (KJL, FBM) +XLC = (MNC, XVB) +LQD = (TCP, ZZZ) +GMH = (QCT, GHQ) +QDM = (RNK, SJG) +PRQ = (TTC, TXJ) +FCD = (CLR, NVB) +DTP = (FVJ, QTD) +JFF = (RXB, CLP) +XGG = (FSS, TQQ) +TLD = (GPH, XTF) +MXL = (LSF, FSQ) +FLJ = (JFF, CFH) +NGT = (KTT, FTN) +RLN = (PLG, HHG) +STQ = (VDC, HRP) +TCK = (VTR, TGD) +PQK = (FGP, TBN) +FJL = (FBC, MXF) +MJX = (PLV, VGN) +MFD = (GHH, FTB) +XBZ = (MSV, NVV) +NXL = (LJF, THM) +KLJ = (SQX, VRM) +TCN = (MRG, XFM) +CTJ = (XFM, MRG) +QBH = (SVK, CFT) +GRV = (NDC, SDR) +TFD = (BHN, NQM) +SJD = (SDR, NDC) +LHQ = (HDG, HXL) +TVS = (NSL, GKH) +NST = (MJF, RVK) +GJH = (FXR, FDJ) +NGR = (PSP, HST) +QGJ = (TNT, JNR) +HTR = (PGL, HNB) +SFP = (NRP, PTQ) +CTR = (MHF, QBH) +CJM = (KXN, HFQ) +HNB = (BNM, LSS) +PSS = (FDV, JFM) +JPB = (FPS, RNT) +RQC = (DKQ, DXP) +NRD = (JQT, SBX) +NGV = (VMJ, NSJ) +VCD = (STQ, VQQ) +TXB = (QCQ, JTT) +TKX = (JPB, JML) +LQH = (PGC, FQD) +DPV = (DCG, XBD) +VQQ = (HRP, VDC) +FQD = (FNB, HSV) +HXH = (DRF, RQS) +GNM = (CLC, CLC) +XLS = (DKB, MMB) +SVK = (CMF, MNS) +NFG = (XNB, PPG) +DRB = (XJV, VHV) +GHH = (MFF, DQT) +SHG = (RFT, HTG) +PLM = (QCQ, JTT) +LPC = (JRT, MHM) +SDH = (DKT, HGB) +GRR = (TDJ, MDK) +TQF = (NKD, JNC) +VTT = (DKD, KQT) +THD = (XGF, DVJ) +KFQ = (RFD, MCS) +DJS = (BLH, LDN) +CHS = (JSD, XXK) +BFD = (FBC, MXF) +PCP = (TLV, VNT) +PVH = (TTR, XPV) +FHB = (KND, PGH) +FFN = (XBD, DCG) +TBN = (GRR, QPL) +HFN = (NNB, QXB) +NJG = (XSM, FXH) +FXH = (PNM, LMQ) +GHC = (BSP, NXH) +MFT = (CTR, JDS) +QCT = (PCP, GJC) +DRX = (CTK, RDS) +GQJ = (SHG, BLG) +RXB = (BHB, HFP) +TDA = (CFN, PVL) +LQF = (CNV, MJX) +LJF = (FDM, FDM) +CLC = (SKR, SKR) +TCT = (LXJ, XLS) +HCL = (QQC, XXV) +CDX = (GHC, HXC) +XKR = (DPV, FFN) +DKQ = (VVX, PFQ) +TQV = (JMC, VFP) +MXF = (BVR, MBD) +LLX = (TKX, GFR) +CLR = (KQJ, RDQ) +FNG = (KPN, DMK) +DMF = (JNC, NKD) +XQR = (TCK, XLV) +MNS = (BPL, FCS) +XDR = (XVB, MNC) +KCF = (BXT, HTR) +TGH = (SKG, CCX) +TTC = (CBF, GXB) +GRP = (NJG, MPP) +NPC = (FPF, LRP) +JGS = (PBN, PBN) +DBS = (JLC, MQG) +JVQ = (NRP, PTQ) +HMG = (DSS, PRQ) +KGM = (DMF, TQF) +MQN = (XLQ, FQF) +TDJ = (GNM, GNM) +PFN = (GQF, XBC) +BTX = (JSD, XXK) +FDM = (FGK, FGK) +RDF = (RRS, CCF) +GPH = (RXM, KCF) +FLM = (GML, KKF) +VJG = (PFN, JRR) +XFM = (LPH, GQJ) +TNT = (VMM, FLM) +CNJ = (SLM, RDD) +CLJ = (DPT, CNJ) +XFN = (HDG, HDG) +HNQ = (PRK, CSP) +DRF = (KQM, KRG) +RDS = (JLT, HRF) +XJV = (LLX, GVC) +SHJ = (CNV, MJX) +NQK = (NFG, CKH) +XXX = (GRL, RHS) +GJC = (TLV, VNT) +SNF = (MTM, DJK) +KXR = (QTP, NHM) +PVL = (MBB, KXJ) +MSV = (GQM, XQR) +JSL = (HCQ, RQC) +LLV = (KDD, LMB) +HTN = (TLL, NLS) +KQJ = (TRF, HJF) +NKT = (HFN, FRS) +GKD = (BHF, RHQ) +QHT = (BSV, QGJ) +HHS = (TPT, MKQ) +CCF = (QXT, VVR) +DRP = (VVL, TFD) +NFS = (HFQ, KXN) +MFH = (TSC, TKG) +TXJ = (GXB, CBF) +BNM = (PKV, PQK) +TGT = (BRN, FTM) +SJF = (PGC, FQD) +CCX = (PDS, XHS) +FQF = (VQD, QJV) +LSB = (XLQ, FQF) +LBN = (MFK, HHS) +HBH = (DVJ, XGF) +NSJ = (TDN, JTF) +TLV = (SJF, LQH) +BVR = (RNX, KRN) +PLG = (FQQ, MPM) +KTT = (GLQ, HKK) +GQH = (GCN, NXL) +BLH = (FMJ, QTT) +PFQ = (LBN, DLL) +CMP = (PSS, THS) +KPX = (RHS, GRL) +FNB = (MPK, BDX) +KDD = (CMK, RHK) +TKG = (PHJ, FLC) +CXX = (TQV, NBV) +DQT = (JNL, MSP) +HXL = (FJG, FHJ) +NSS = (TGT, QJT) +QKP = (CQT, GRP) +JJN = (KKQ, FFV) +NLM = (SKR, VJZ) +XGF = (XDG, LGV) +BJG = (NKT, QSV) +LDQ = (KDD, LMB) +LSF = (DDL, HJG) +TQQ = (FQX, BDD) +HMK = (CXP, RPG) +ZZZ = (RLN, BNG) +DKT = (NSS, HRQ) +LMB = (CMK, RHK) +MBJ = (XQF, BXH) +KHJ = (GPD, JNB) +KQM = (NST, CQF) +SPH = (PRK, CSP) +KSD = (HST, PSP) +QLG = (GCX, KKP) +RXF = (CLR, NVB) +BXH = (BQB, KXX) +JKC = (XGG, FMQ) +BPL = (JSC, HLV) +JPV = (QHT, BDJ) +QQA = (QHT, BDJ) +DPF = (THS, PSS) +MHM = (LDQ, LLV) +FJG = (JPV, JPV) +QTP = (MFH, RCS) +SMD = (XXP, XXP) +VXX = (MTQ, VPS) +FPF = (XPN, QXV) +VFX = (BBG, CXN) +DSS = (TTC, TXJ) +RLC = (VXX, KRJ) +CFH = (RXB, CLP) +DCG = (LQF, SHJ) +QHN = (NGT, XTD) +JNK = (QCT, GHQ) +FXL = (DSG, JGP) +RNV = (MXL, HBR) +TVL = (DVR, KCJ) +KCQ = (SMD, HQV) +KXJ = (CLD, XBR) +FGP = (GRR, QPL) +KVM = (MXJ, PKS) +DVR = (GXT, RMQ) +KJL = (SQH, JMS) +QQC = (SDH, TQH) +GNT = (MGL, JGQ) +KRG = (CQF, NST) +LXJ = (DKB, MMB) +XXT = (FPD, DRB) +CDS = (RRS, CCF) +KBL = (JQQ, JST) +DDL = (XBG, TLD) +DSG = (VFN, XCD) +GHX = (QHN, QQL) +BNG = (PLG, HHG) +MGL = (CLJ, KPR) +VCT = (RHQ, BHF) +PHR = (CLC, NLM) +VXQ = (FBR, TNJ) +GLC = (DPF, CMP) +QPV = (QSJ, LQD) +MTQ = (CXX, HDP) +JXJ = (LLL, JCJ) +LJJ = (HBR, MXL) +VPV = (DMD, KFQ) +JST = (BVD, GFK) +QQL = (NGT, XTD) +FHQ = (TXB, PLM) +VRL = (DBS, JFR) +MTF = (QSV, NKT) +XBG = (GPH, XTF) +PBN = (NVV, MSV) +TLQ = (FPD, DRB) +JBT = (JTX, KGM) +RSM = (VNJ, GXD) +BBR = (KPN, DMK) +DJK = (KLV, FLJ) +SKR = (CFN, PVL) +PKV = (TBN, FGP) +FBM = (SQH, JMS) +GLQ = (RDF, CDS) +NHC = (HMG, HPG) +VDC = (JRB, XBB) +KXN = (HDF, NRD) +DPG = (VRL, QJB) +QCQ = (GMH, JNK) +SSV = (GNT, RSS) +NDP = (TXS, NGG) +XBD = (LQF, SHJ) +XDG = (XKD, CQM) +CLP = (BHB, HFP) +PVC = (CHS, BTX) +CQM = (QHG, TCT) +GKH = (TKV, KXR) +LPH = (SHG, BLG) +NVQ = (CTR, JDS) +TVB = (MBJ, JHQ) +QSH = (TVS, LLP) +XPN = (FJK, HNH) +BNQ = (HNQ, SPH) +SCX = (RLC, RBF) +QKL = (JLK, NPC) +MFK = (MKQ, TPT) +MJF = (KVR, MHT) +QSJ = (TCP, TCP) +STX = (SCX, HCV) +PSR = (GHX, JPX) +TQS = (KDV, LHH) +JFR = (JLC, MQG) +JTT = (JNK, GMH) +PGH = (QMF, TVL) +TXS = (XKB, SBR) +PKS = (MSX, CFS) +CFS = (VKJ, KBL) +JLT = (KHC, RXL) +GRL = (SGG, JKC) +LJH = (TMB, VPV) +MPK = (MFB, NGV) +CQL = (GPD, JNB) +MXJ = (CFS, MSX) +HBR = (FSQ, LSF) +KPN = (MVC, XQJ) +FPD = (VHV, XJV) +MDK = (GNM, PHR) +HGS = (STX, XQN) +NBV = (JMC, VFP) +RRV = (GLC, HJK) +TGD = (VPT, BBH) +PPA = (SLK, QLG) +SVF = (TNJ, FBR) +LCL = (CTK, RDS) +RHS = (JKC, SGG) +KKQ = (VQS, PHD) +JCJ = (KSD, NGR) +AAA = (BNG, RLN) +MRG = (GQJ, LPH) +HLV = (FNG, BBR) +VNP = (QBB, RSM) +VNT = (SJF, LQH) +GHQ = (GJC, PCP) +CPM = (DJK, MTM) +VVL = (BHN, NQM) +JTF = (KPX, XXX) +FFQ = (XXT, TLQ) +TXT = (FTB, GHH) +TGR = (VPB, QFM) +VTR = (BBH, VPT) +SBR = (JBQ, JSL) +FRS = (QXB, NNB) +JDS = (QBH, MHF) +GFK = (FDB, BXB) +TCP = (BNG, RLN) +RDD = (NHH, VCD) +CDF = (JGS, JGS) +NDM = (TFD, VVL) +TLL = (NVQ, MFT) +QJV = (FHV, BNS) +PSP = (LJJ, RNV) +NDC = (JSJ, XRB) +GVC = (TKX, GFR) +VQP = (DVP, RFK) +FTM = (TGH, HPH) +QMF = (DVR, KCJ) +HGB = (HRQ, NSS) +CVK = (BTX, CHS) +JNC = (HQM, PVH) +FJC = (TVS, LLP) +RPG = (FTX, VNP) +PGL = (BNM, LSS) +DXP = (PFQ, VVX) +JGQ = (CLJ, KPR) +TGS = (LJK, VTT) +BXB = (FJC, QSH) +QGB = (SPH, HNQ) +HJF = (QJJ, GFJ) +JMS = (MRD, XNP) +THM = (FDM, MVM) +KKP = (CVK, PVC) +RNT = (MSM, HTC) +HDP = (NBV, TQV) +NRJ = (HRB, PBS) +HCV = (RBF, RLC) +MFF = (JNL, MSP) +SXM = (HJK, GLC) +TRF = (QJJ, GFJ) +KFT = (JRT, MHM) +PBS = (KLJ, FXK) +QRG = (JHQ, MBJ) +QJB = (DBS, JFR) +FSQ = (DDL, HJG) +VHV = (LLX, GVC) +CFT = (CMF, MNS) +KXX = (SBS, DXN) +MHT = (HFL, NQK) +SLR = (PBN, XBZ) +BDX = (NGV, MFB) +MVC = (LJH, JPN) +DRT = (PKS, MXJ) +VNJ = (HGS, CQJ) +XBC = (CDF, VJF) +LVJ = (XCM, HXH) +DVQ = (BBG, CXN) +HST = (LJJ, RNV) +QFM = (QRG, TVB) +RSS = (MGL, JGQ) +RJL = (TGR, MRH) +KDV = (BBV, KLX) +TPT = (NKG, MSF) +VMJ = (TDN, JTF) +VKJ = (JQQ, JST) +LMQ = (DTP, MTJ) +BHB = (XST, CDX) +PXR = (LLL, JCJ) +KRN = (BBJ, XPJ) +BSV = (JNR, TNT) +FHV = (VXQ, SVF) +TMB = (KFQ, DMD) +FSM = (XCM, HXH) +JMC = (HBP, SQS) +NBJ = (CFC, MCN) +LLL = (KSD, NGR) +XQN = (HCV, SCX) +CQJ = (STX, XQN) +DVJ = (LGV, XDG) +SGG = (FMQ, XGG) +KQT = (SNF, CPM) +XPK = (XFN, LHQ) +GQF = (CDF, CDF) +PPG = (DRX, LCL) +NLS = (MFT, NVQ) +HPG = (DSS, PRQ) +TNJ = (JHR, XMK) +JXL = (PLM, TXB) +LLP = (NSL, GKH) +XKB = (JSL, JBQ) +VMG = (GCN, NXL) +DMK = (MVC, XQJ) +MNC = (JXL, FHQ) +BBH = (NDP, FTR) +JLK = (LRP, FPF) +SBS = (JHP, SQD) +HFQ = (NRD, HDF) +MBD = (RNX, KRN) +BDD = (GDV, FHB) +MFB = (VMJ, NSJ) +JLC = (BPK, VQP) +XCD = (HTN, FPQ) +GPD = (JXH, JBT) +DXN = (JHP, SQD) +FCS = (JSC, HLV) +FMJ = (MFD, TXT) +MQG = (VQP, BPK) +BQB = (SBS, DXN) +MTM = (KLV, FLJ) +FSS = (BDD, FQX) +MHF = (SVK, CFT) +FDV = (LVJ, FSM) +PLV = (GRV, SJD) +XPJ = (BRQ, PSR) +VJF = (JGS, SLR) +XLV = (VTR, TGD) diff --git a/day8/src/main.rs b/day8/src/main.rs new file mode 100644 index 0000000..8346143 --- /dev/null +++ b/day8/src/main.rs @@ -0,0 +1,45 @@ +use std::fs::read_to_string; +use std::collections::HashMap; +use num::integer::lcm; + +fn get_steps_to(directions: &str, nodes: &HashMap<&str, (&str, &str)>, + start: &str, stop: fn(&str) -> bool) -> u64 { + let mut current_node = start; + let mut counter: u64 = 0; + 'outer: loop { + for c in directions.bytes() { + let (left, right) = nodes[current_node]; + match c { + b'L' => current_node = left, + b'R' => current_node = right, + _ => {} + } + counter += 1; + if stop(current_node) { + break 'outer; + } + } + } + counter +} + +fn main() { + let lines_str = read_to_string("input.txt").unwrap(); + let mut lines_iter = lines_str.lines(); + let directions = lines_iter.next().unwrap(); + lines_iter.next(); + let mut nodes: HashMap<&str, (&str, &str)> = HashMap::new(); + for line in lines_iter { + let mut ids = line.split([' ', '(', ')', '=', ',']).filter(|&str| !str.is_empty()); + nodes.insert(ids.next().unwrap(), (ids.next().unwrap(), ids.next().unwrap())); + } + let counter1 = get_steps_to(directions, &nodes, "AAA", |str| str == "ZZZ"); + let counter2 = nodes.iter() + .filter_map(|(&id, _)| + Some(id).filter(|&id| id.as_bytes()[2 as usize] == b'A')) + .map(|node| get_steps_to( + directions, &nodes, node, |str| str.as_bytes()[2 as usize] == b'Z')) + .fold(1 as u64, |acc, counter| lcm(acc, counter)); + println!("{}", counter1); + println!("{}", counter2); +}