summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoralyx <alyx@aleteoryx.me>2023-12-08 01:27:18 -0500
committeralyx <alyx@aleteoryx.me>2023-12-08 01:27:18 -0500
commitd593cd2cd5880ef5031759aa442fe792dec0034b (patch)
treef1a6ea37b6d2eb75ef13769c67feb6ee1e2d2294
parent0258550017750d9fb15f5e28518c8711b6c0f580 (diff)
downloadadventofcode-d593cd2cd5880ef5031759aa442fe792dec0034b.tar.gz
adventofcode-d593cd2cd5880ef5031759aa442fe792dec0034b.tar.bz2
adventofcode-d593cd2cd5880ef5031759aa442fe792dec0034b.zip
2023.8[0]
-rw-r--r--2023/rs/Cargo.lock4
-rw-r--r--2023/rs/code/eight/Cargo.toml8
-rw-r--r--2023/rs/code/eight/src/input.txt752
-rw-r--r--2023/rs/code/eight/src/main.rs66
4 files changed, 830 insertions, 0 deletions
diff --git a/2023/rs/Cargo.lock b/2023/rs/Cargo.lock
index 26d625b..132d0df 100644
--- a/2023/rs/Cargo.lock
+++ b/2023/rs/Cargo.lock
@@ -3,6 +3,10 @@
version = 3
[[package]]
+name = "base"
+version = "0.1.0"
+
+[[package]]
name = "five"
version = "0.1.0"
dependencies = [
diff --git a/2023/rs/code/eight/Cargo.toml b/2023/rs/code/eight/Cargo.toml
new file mode 100644
index 0000000..6916ddc
--- /dev/null
+++ b/2023/rs/code/eight/Cargo.toml
@@ -0,0 +1,8 @@
+[package]
+name = "base"
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
diff --git a/2023/rs/code/eight/src/input.txt b/2023/rs/code/eight/src/input.txt
new file mode 100644
index 0000000..6812006
--- /dev/null
+++ b/2023/rs/code/eight/src/input.txt
@@ -0,0 +1,752 @@
+LRRLRRLRRLRRRLRRLRRRLRRLRRRLRLRLLRLRLRRLLLRLRLRRRLRRLRLRRRLRRLRRLRRLLLRRLRRRLRRRLRLLRRLRLLRRLRRRLRRLRLRRRLRLRLRRLRLRRRLLRRRLLRRRLRLRRRLRRLLRRLRRRLRRLRRLLRRLRRLRRRLLLRRRLRRLRRLRRLRLRRRLRRLLLLRLRRLRRRLRLLRRLRLLRRLRRRLRRRLRRRLLRRLRRLRRLRRRLRRLRRRLLRLRRRLRRRLRRRLLRRRLRRLRRRR
+
+LRL = (MCG, TRC)
+TNJ = (LMV, PMP)
+GQK = (MGD, DBP)
+KVK = (LHC, NMM)
+PQX = (SLC, LSD)
+GRR = (XCR, BJT)
+RBF = (VDM, BFG)
+TKN = (VDH, HGQ)
+MMJ = (LTR, CNQ)
+CCX = (FJJ, FKD)
+VHD = (JFQ, DDH)
+NRL = (CTM, XTJ)
+SNH = (QDH, PSQ)
+JTM = (VFH, QBR)
+BJT = (GJL, JXD)
+LBJ = (JFQ, DDH)
+FPN = (PBT, SJR)
+CGR = (NJC, CNF)
+RCM = (GTQ, BBT)
+BQQ = (FNS, KPL)
+NSF = (SLD, SJV)
+QFQ = (XNX, GHT)
+QCZ = (JPG, NLJ)
+RJD = (QDT, NSG)
+CNK = (SKK, NFL)
+CBR = (QDT, NSG)
+QMV = (HXG, FHS)
+DNL = (XLX, RDT)
+XRS = (DHT, RDP)
+GHV = (FHS, HXG)
+MJM = (GQB, XCC)
+GQC = (NKG, NSF)
+RKH = (KVG, JCQ)
+DKT = (LTN, LTN)
+THR = (PHF, VKN)
+BQV = (BTS, SCG)
+BJJ = (GQC, QRR)
+CQL = (LHK, BCD)
+LXX = (LCX, FJV)
+NSG = (VSX, DFN)
+LSD = (JRL, KXC)
+QKB = (NLJ, JPG)
+HSK = (CFN, NTM)
+BLL = (JJQ, MSN)
+SQD = (BLK, LBK)
+KVP = (DBB, RHN)
+MLJ = (QQR, HDH)
+QVB = (GMN, TDP)
+HJB = (GPG, XDT)
+NBX = (NVT, SNB)
+CLL = (PLG, LHS)
+AAA = (JXS, MFQ)
+CHN = (RNL, FHV)
+JHT = (JQF, JQX)
+KSB = (VDL, VBD)
+HBT = (CKB, CCX)
+JXH = (MQH, PRD)
+DBB = (XHL, CHN)
+PBD = (RDB, VHH)
+SDV = (VMG, NTV)
+BJS = (NNG, RQH)
+SLM = (BRB, FLG)
+VDH = (QPG, GKG)
+KNS = (VQX, HFR)
+HBF = (RQC, MXC)
+JSF = (KPL, FNS)
+HLS = (TJQ, TKM)
+TRV = (BVN, GKF)
+NLJ = (GBH, JCT)
+SVM = (DKT, XLG)
+THK = (NTM, CFN)
+MDK = (DNL, VXV)
+MHV = (DQQ, MQX)
+CNF = (QQH, SLN)
+XJK = (VFH, QBR)
+FNT = (HXR, HXR)
+KCT = (CPX, FXC)
+BDB = (NMP, JGG)
+LRZ = (JXC, TNJ)
+JBQ = (NDL, KSJ)
+LJQ = (GHT, XNX)
+HKD = (HFH, VHJ)
+VDM = (GTD, HRP)
+QQH = (THC, THR)
+PRD = (KFR, TJK)
+KKH = (VTJ, LSR)
+LQS = (SJQ, RHD)
+RLF = (LCR, SGG)
+JHK = (PDJ, TRV)
+QHG = (VMS, PKS)
+JRL = (GVJ, SKL)
+XDV = (PJL, JRN)
+TSV = (KCR, QJP)
+JSN = (QFQ, LJQ)
+RLA = (JSN, JVD)
+KPD = (RDK, NSS)
+HXP = (RQT, QTS)
+DDB = (SFH, RHV)
+JGG = (BJG, JTS)
+VBD = (SGD, FRJ)
+HRP = (RJD, CBR)
+RRT = (MLJ, MLJ)
+NVD = (KHM, RBF)
+TNK = (QSX, KVD)
+NST = (CDL, VGL)
+FLF = (SNF, KRN)
+LHS = (BSD, DTD)
+NCV = (KSB, PTG)
+FMX = (QKX, XFP)
+KMB = (FDM, BSX)
+CRH = (CVV, DDS)
+VGL = (JLS, CPK)
+DBF = (KGB, PXQ)
+RNM = (HTP, LVL)
+HKC = (XML, RTK)
+JLC = (TKN, VSV)
+FLB = (NNG, RQH)
+QKH = (GQM, LSB)
+DTD = (FTJ, HCK)
+BXS = (HKD, FDK)
+TKV = (RHN, DBB)
+QBJ = (KNS, DXQ)
+LBS = (BHT, SFM)
+VMS = (CTJ, DDC)
+FQJ = (FVQ, GKR)
+RQC = (LRF, HCM)
+SSG = (GQK, HDV)
+KPL = (GQS, MDK)
+GJN = (PNN, CPB)
+LHK = (QPD, GSV)
+KFR = (KPD, DTV)
+QXC = (QVM, BHJ)
+XRH = (PKM, FPN)
+CKL = (BBT, GTQ)
+FPK = (CRV, MGR)
+LTK = (LVT, HXF)
+BLK = (BRT, BQN)
+BSX = (XMS, XJN)
+MMR = (JCG, HHX)
+DVM = (LHK, BCD)
+RCJ = (BDB, CFK)
+QLN = (DDB, LDQ)
+GKF = (QLV, FNP)
+BXQ = (NKT, FFN)
+HCM = (FPK, KQB)
+HKG = (GQK, HDV)
+FNS = (GQS, MDK)
+CTJ = (NST, HDJ)
+QQS = (GQB, XCC)
+ZZZ = (MFQ, JXS)
+MGK = (CRH, BRV)
+LCR = (FRD, KMK)
+BKD = (BNR, BKM)
+LDB = (KLM, SCC)
+PLS = (PBL, CRG)
+FQR = (PNR, NCV)
+TNL = (CDT, MKC)
+KVH = (FJQ, SHJ)
+KPT = (KGB, PXQ)
+GQM = (BXQ, VLP)
+FDR = (GLC, KGF)
+DDC = (NST, HDJ)
+MTJ = (TMT, TMB)
+PBJ = (LTK, VFB)
+JXS = (SBL, CQB)
+XML = (BMK, QBL)
+XSK = (KSN, KSN)
+TKM = (TKQ, NTX)
+XFP = (HBX, RMX)
+DXQ = (VQX, HFR)
+KRN = (CNK, JDM)
+TJQ = (TKQ, NTX)
+VQX = (LBJ, VHD)
+TGX = (HLK, LDJ)
+MCX = (GDH, BNS)
+DKM = (TVC, LPB)
+VXD = (GCF, SVD)
+FGB = (BKM, BNR)
+VNN = (VCS, BSR)
+FXX = (LHC, NMM)
+JKR = (TQN, GXV)
+FRJ = (TDK, PKQ)
+MMQ = (SCC, KLM)
+XGL = (MSN, JJQ)
+GTQ = (DMV, LLK)
+KML = (MCX, CTT)
+LBH = (LSR, VTJ)
+BDS = (XJK, JTM)
+FVH = (TSV, HHC)
+KXN = (LRL, QKK)
+HND = (HNQ, FSG)
+JQS = (QLL, RKH)
+CKD = (TBT, HBT)
+PXP = (NXC, TTK)
+VHP = (QJC, QKH)
+KQL = (BQV, RJR)
+FSG = (JBH, GPH)
+BVN = (QLV, FNP)
+HNV = (XFH, BKL)
+CNJ = (MNT, DCG)
+VSV = (HGQ, VDH)
+PXB = (RRT, RRT)
+FNK = (TKC, LTM)
+VTX = (LDJ, HLK)
+KKG = (QDL, SNT)
+CTT = (GDH, BNS)
+FJJ = (FNT, FNT)
+JCS = (DDB, LDQ)
+GDH = (TPG, DND)
+FMF = (XHB, BNH)
+QLL = (JCQ, KVG)
+NJK = (RDB, VHH)
+LHC = (QDS, SXP)
+QHS = (KQL, SXQ)
+BJQ = (BXB, HQT)
+GJL = (BTX, GJC)
+BNR = (NJK, PBD)
+NFL = (NSC, FTL)
+SKK = (FTL, NSC)
+MQN = (FMF, KPC)
+XHB = (DCS, SQD)
+MDT = (TDP, GMN)
+XBL = (TMT, TMB)
+HFH = (XDV, DMD)
+BSR = (VTX, TGX)
+LDH = (BJQ, XJJ)
+GXX = (KKL, RCJ)
+PQZ = (HDH, QQR)
+CXH = (VXD, SGC)
+HPB = (VHR, FNQ)
+LLF = (QVM, BHJ)
+VQQ = (FQD, MQN)
+GSV = (NDT, SLM)
+GLR = (HVD, DMF)
+SLC = (JRL, KXC)
+RHV = (HBC, TFR)
+PVX = (PLS, SJS)
+LLK = (BDC, PNK)
+SLL = (FJQ, SHJ)
+LKT = (VPF, SSC)
+MXC = (LRF, HCM)
+FTL = (QSR, SVH)
+GCF = (JTF, HJB)
+VHZ = (RRN, TSH)
+LNB = (DQQ, MQX)
+DRQ = (XML, RTK)
+XLG = (LTN, VLD)
+LBL = (VVF, SPR)
+MBB = (NFG, NFG)
+QJC = (GQM, LSB)
+LSR = (BJS, FLB)
+MQH = (TJK, KFR)
+DFN = (LXG, LLL)
+MSN = (KXN, MPV)
+JCT = (MHV, LNB)
+TPG = (CJJ, RRD)
+GCV = (NVT, SNB)
+LNL = (GXX, DJM)
+XFT = (TSH, RRN)
+FSS = (SLC, LSD)
+TKT = (TVC, LPB)
+XBN = (NBX, GCV)
+RQT = (QKF, XRS)
+XCC = (MXL, RLF)
+RTH = (QVB, MDT)
+DBP = (HNV, XCG)
+QQB = (JMF, PBJ)
+KSJ = (NCS, RNM)
+GNQ = (CPX, FXC)
+HHX = (JKT, SVM)
+SGG = (KMK, FRD)
+SMM = (SJS, PLS)
+VPK = (LTM, TKC)
+VLD = (QKB, QCZ)
+LTR = (TFX, FVN)
+VCL = (DKM, TKT)
+HXG = (MTG, SNM)
+KGB = (MRV, LFD)
+JGK = (CNJ, RXF)
+FMV = (FRT, MNF)
+SLD = (KVH, SLL)
+VVL = (TNJ, JXC)
+GDP = (RBF, KHM)
+XDT = (RML, JHK)
+JKP = (NDL, KSJ)
+BNH = (SQD, DCS)
+LFD = (LQC, HLS)
+NHC = (JHT, SSM)
+VPF = (NRN, LBL)
+BHT = (LQS, MCP)
+SNT = (RHL, BDS)
+BQN = (XGL, BLL)
+FVN = (HGP, QKM)
+NXC = (KQJ, FMV)
+NKG = (SJV, SLD)
+HSF = (HPB, NFR)
+QKM = (RRR, PMK)
+PJL = (XBN, PFX)
+MRP = (LCX, FJV)
+XSQ = (FDK, HKD)
+TVC = (GHN, QQC)
+XLX = (DKJ, NNT)
+VSX = (LLL, LXG)
+FQD = (FMF, KPC)
+PNJ = (XCR, BJT)
+QDV = (QRJ, BFS)
+QVG = (GLC, KGF)
+BMK = (RJS, FLF)
+SXQ = (BQV, RJR)
+BGL = (CSB, SBH)
+BJG = (CNH, PQJ)
+RSG = (QFT, VPD)
+VVF = (DRQ, HKC)
+BBT = (LLK, DMV)
+HGQ = (GKG, QPG)
+HMD = (PHT, PCD)
+PPL = (CKL, RCM)
+QLA = (TSH, RRN)
+KBG = (HBT, TBT)
+RHD = (HKG, SSG)
+GQB = (RLF, MXL)
+QFA = (QQR, HDH)
+KPC = (BNH, XHB)
+XNX = (FVH, MNH)
+HBX = (NFD, VJF)
+SVD = (HJB, JTF)
+DMD = (JRN, PJL)
+PKJ = (BJQ, XJJ)
+TFX = (HGP, QKM)
+MCH = (PKD, PFF)
+SGD = (PKQ, TDK)
+RRJ = (KCT, GNQ)
+PJD = (VLM, JJZ)
+PHF = (PQX, FSS)
+PKQ = (NTP, MMR)
+VPD = (QHB, NHC)
+FRD = (GDP, NVD)
+SFH = (HBC, TFR)
+JRN = (XBN, PFX)
+HSB = (MRP, LXX)
+RMX = (NFD, VJF)
+SBH = (JXH, TSQ)
+NTP = (JCG, HHX)
+PSX = (FMX, PCR)
+LCQ = (PKS, VMS)
+LKV = (SMM, PVX)
+SGC = (SVD, GCF)
+CQB = (LDD, QDV)
+FRT = (XCV, HSF)
+KGT = (SGC, VXD)
+TRC = (PSX, NQC)
+BSG = (PKD, PFF)
+CKB = (FJJ, FKD)
+SSM = (JQF, JQX)
+DKJ = (BKD, FGB)
+TKC = (TXS, FQJ)
+JQX = (DVQ, NLN)
+BDC = (KNL, DSV)
+FJV = (MTJ, XBL)
+DND = (CJJ, RRD)
+PPH = (MMQ, LDB)
+FTJ = (LKT, GNX)
+JKV = (RFM, MGK)
+KCR = (LLF, QXC)
+RFN = (LJL, CFX)
+HCF = (NFG, HSR)
+NTV = (JXG, VHP)
+QQR = (DTX, HND)
+BTX = (QVG, FDR)
+JQK = (SXQ, KQL)
+NJC = (SLN, QQH)
+RML = (PDJ, TRV)
+SNF = (JDM, CNK)
+KMK = (GDP, NVD)
+XSH = (DXQ, KNS)
+DTX = (HNQ, FSG)
+BNS = (TPG, DND)
+KHM = (BFG, VDM)
+SBF = (MGK, RFM)
+NFD = (PKJ, LDH)
+BHJ = (VNN, CGL)
+TXS = (FVQ, GKR)
+CRV = (NTQ, SDV)
+GHT = (FVH, MNH)
+RBN = (RQC, MXC)
+KKL = (BDB, CFK)
+NLN = (RBN, HBF)
+QFT = (NHC, QHB)
+QBL = (FLF, RJS)
+RHG = (PNN, CPB)
+MNF = (XCV, HSF)
+SJS = (CRG, PBL)
+FDK = (VHJ, HFH)
+HXM = (JJD, JJD)
+PNN = (QDK, MMJ)
+GCS = (TTK, NXC)
+VJF = (LDH, PKJ)
+GTD = (CBR, RJD)
+RRD = (TPL, XVR)
+JXC = (LMV, PMP)
+NXH = (MKC, CDT)
+HCK = (GNX, LKT)
+BRC = (QLL, RKH)
+KQB = (CRV, MGR)
+TMB = (MCH, BSG)
+XJN = (RSX, JGK)
+HQP = (SFM, BHT)
+HQT = (MBB, HCF)
+THC = (VKN, PHF)
+TPL = (NGD, QQB)
+NGD = (PBJ, JMF)
+GVJ = (RNT, LKV)
+QDK = (LTR, CNQ)
+JXG = (QKH, QJC)
+TQN = (KRL, QCV)
+RDB = (JQS, BRC)
+MPV = (LRL, QKK)
+SJQ = (HKG, SSG)
+XHL = (RNL, FHV)
+LRF = (KQB, FPK)
+GNX = (SSC, VPF)
+VXV = (XLX, RDT)
+MTG = (CCR, CRR)
+NFG = (BHH, BHH)
+DSV = (PXB, PJN)
+CVT = (KPT, DBF)
+RHL = (JTM, XJK)
+CBQ = (GXL, PQB)
+BHH = (JXS, MFQ)
+DMV = (BDC, PNK)
+NSS = (HQP, LBS)
+FVM = (PRP, RFN)
+NCS = (HTP, LVL)
+QPD = (NDT, SLM)
+GJC = (FDR, QVG)
+CFK = (JGG, NMP)
+HDV = (MGD, DBP)
+PNB = (PQB, GXL)
+RXA = (NLJ, JPG)
+CNH = (JSF, BQQ)
+VXL = (HXR, XQQ)
+QKF = (RDP, DHT)
+QTS = (QKF, XRS)
+VDL = (SGD, FRJ)
+FCM = (TQN, GXV)
+BHQ = (GQC, QRR)
+BSD = (FTJ, HCK)
+CJJ = (TPL, XVR)
+PLG = (DTD, BSD)
+LQC = (TKM, TJQ)
+NTM = (KLG, PPL)
+SHJ = (NRL, NMS)
+QDL = (BDS, RHL)
+PCR = (XFP, QKX)
+XCG = (XFH, BKL)
+LMV = (GCS, PXP)
+JJD = (QQV, QQV)
+HGP = (PMK, RRR)
+TNF = (RQT, QTS)
+SFM = (MCP, LQS)
+MNR = (RFN, PRP)
+LLL = (CBQ, PNB)
+RJS = (SNF, KRN)
+BRV = (CVV, DDS)
+GGK = (LHS, PLG)
+HVD = (GBJ, VQQ)
+KQJ = (FRT, MNF)
+PMK = (CGR, PQR)
+MFB = (GGK, CLL)
+HLK = (NTG, KMB)
+BKL = (CQL, DVM)
+SVT = (CSB, SBH)
+FGD = (PNR, NCV)
+LVT = (VCL, XTQ)
+MFQ = (SBL, CQB)
+SCC = (KKH, LBH)
+JMF = (VFB, LTK)
+GLC = (FBS, DNB)
+HFT = (MMQ, LDB)
+PNR = (PTG, KSB)
+SNM = (CRR, CCR)
+TJK = (DTV, KPD)
+PQR = (NJC, CNF)
+VPM = (QDL, SNT)
+DHT = (KGT, CXH)
+RPK = (KML, XRL)
+VFH = (HSB, QBV)
+FNP = (JBQ, JKP)
+JLS = (QLN, JCS)
+XMS = (JGK, RSX)
+FRK = (GGK, CLL)
+PDJ = (GKF, BVN)
+QDH = (JLC, QTG)
+PFX = (GCV, NBX)
+BXB = (MBB, MBB)
+TTK = (KQJ, FMV)
+PKS = (DDC, CTJ)
+KLG = (RCM, CKL)
+CSV = (QVB, MDT)
+NNG = (DXR, BPD)
+HHC = (KCR, QJP)
+LVL = (CSQ, TKJ)
+QHB = (JHT, SSM)
+JDM = (SKK, NFL)
+JCQ = (TNK, LPJ)
+TSQ = (MQH, PRD)
+JTS = (PQJ, CNH)
+RCR = (KCT, GNQ)
+LXG = (CBQ, PNB)
+TKQ = (HXP, TNF)
+PKM = (PBT, SJR)
+GXV = (QCV, KRL)
+HJS = (BBX, RPK)
+CPX = (XSK, XSK)
+JXD = (BTX, GJC)
+CVV = (HXM, VDB)
+SBL = (LDD, QDV)
+HBC = (VPM, KKG)
+DXR = (CVT, KKS)
+VDB = (JJD, BVS)
+XQQ = (VVL, LRZ)
+PQB = (BXS, XSQ)
+NTX = (HXP, TNF)
+SCG = (VMQ, HJS)
+GHN = (SBF, JKV)
+VXR = (SGL, LMC)
+NQF = (VPD, QFT)
+DDS = (HXM, VDB)
+KLM = (LBH, KKH)
+SGL = (QRL, KLQ)
+GKR = (CSV, RTH)
+QDT = (DFN, VSX)
+MNT = (SNH, FPP)
+TDP = (TKV, KVP)
+KNL = (PXB, PXB)
+GMN = (KVP, TKV)
+MXL = (SGG, LCR)
+PKD = (FXX, KVK)
+SXP = (FNK, VPK)
+NTG = (BSX, FDM)
+QSR = (KBG, CKD)
+FHV = (XCL, MBP)
+RDT = (NNT, DKJ)
+SPR = (HKC, DRQ)
+FFN = (JHD, GLR)
+FBS = (QXL, FTF)
+VLP = (FFN, NKT)
+KXC = (SKL, GVJ)
+TKJ = (FQR, FGD)
+LHH = (PHT, PCD)
+CTM = (GHV, QMV)
+VHH = (JQS, BRC)
+MQX = (MJM, QQS)
+BBX = (XRL, KML)
+LKK = (PKM, FPN)
+RNT = (PVX, SMM)
+JSA = (TNJ, JXC)
+RDK = (LBS, HQP)
+RXF = (MNT, DCG)
+HDH = (HND, DTX)
+VKN = (FSS, PQX)
+LSB = (VLP, BXQ)
+BPD = (CVT, KKS)
+TMT = (BSG, MCH)
+QLV = (JBQ, JKP)
+LPJ = (KVD, QSX)
+QDS = (VPK, FNK)
+GQS = (VXV, DNL)
+DTV = (NSS, RDK)
+SNB = (JLB, LLV)
+NMM = (SXP, QDS)
+CSB = (TSQ, JXH)
+PFF = (FXX, KVK)
+VHJ = (XDV, DMD)
+XFX = (KSN, THB)
+CCR = (NQF, RSG)
+VMQ = (BBX, RPK)
+HXR = (VVL, VVL)
+SJV = (KVH, SLL)
+CFN = (KLG, PPL)
+DDH = (RHG, GJN)
+FLG = (HMD, LHH)
+FVQ = (RTH, CSV)
+RTK = (BMK, QBL)
+NSC = (SVH, QSR)
+MKC = (FCM, JKR)
+XTJ = (GHV, QMV)
+CNQ = (FVN, TFX)
+SJR = (BJJ, BHQ)
+MGR = (NTQ, SDV)
+XFH = (DVM, CQL)
+QSX = (GRR, PNJ)
+QKX = (HBX, RMX)
+LBK = (BQN, BRT)
+PXQ = (MRV, LFD)
+LDQ = (SFH, RHV)
+MNH = (HHC, TSV)
+XCV = (HPB, NFR)
+KLQ = (QBJ, XSH)
+FTF = (SCQ, RGC)
+JJQ = (MPV, KXN)
+LJL = (VDV, SJJ)
+DNB = (FTF, QXL)
+CFX = (VDV, SJJ)
+JKT = (DKT, DKT)
+SJJ = (THK, HSK)
+CDL = (JLS, CPK)
+QCV = (XRH, LKK)
+XCR = (GJL, JXD)
+KMJ = (MLJ, PQZ)
+MPS = (DJM, GXX)
+GBJ = (MQN, FQD)
+PNK = (KNL, DSV)
+BRB = (HMD, LHH)
+PBT = (BJJ, BHQ)
+JPG = (JCT, GBH)
+HSR = (BHH, ZZZ)
+DQQ = (QQS, MJM)
+MCP = (SJQ, RHD)
+LTM = (TXS, FQJ)
+KKS = (KPT, DBF)
+DCG = (FPP, SNH)
+TDK = (MMR, NTP)
+QJP = (LLF, QXC)
+NFR = (FNQ, VHR)
+FKD = (FNT, VXL)
+LMC = (KLQ, QRL)
+PBL = (FVM, MNR)
+JHD = (DMF, HVD)
+CRR = (RSG, NQF)
+JJZ = (JVD, JSN)
+RQH = (DXR, BPD)
+HXF = (VCL, XTQ)
+CRG = (MNR, FVM)
+VHR = (QHG, LCQ)
+VCS = (VTX, TGX)
+FPP = (QDH, PSQ)
+KSN = (XFT, XFT)
+BVS = (QQV, PJD)
+RSX = (RXF, CNJ)
+FXC = (XSK, XFX)
+HDJ = (CDL, VGL)
+QQC = (SBF, JKV)
+LPB = (GHN, QQC)
+LRJ = (QHS, JQK)
+SCQ = (RCR, RRJ)
+PQJ = (JSF, BQQ)
+GKG = (VMJ, LRJ)
+SSC = (NRN, LBL)
+NVT = (JLB, LLV)
+KVD = (GRR, PNJ)
+XRL = (CTT, MCX)
+BTS = (VMQ, HJS)
+KRL = (XRH, LKK)
+RRN = (BGL, SVT)
+FHS = (SNM, MTG)
+QPG = (VMJ, LRJ)
+QKK = (TRC, MCG)
+VDV = (THK, HSK)
+GPH = (VXR, GKQ)
+RNL = (XCL, MBP)
+SLN = (THC, THR)
+CPB = (MMJ, QDK)
+NMS = (XTJ, CTM)
+RJR = (BTS, SCG)
+CGL = (VCS, BSR)
+MBP = (MFB, FRK)
+NNT = (FGB, BKD)
+HTP = (CSQ, TKJ)
+GPG = (RML, JHK)
+QRL = (QBJ, XSH)
+BCD = (GSV, QPD)
+QQV = (VLM, VLM)
+PRP = (CFX, LJL)
+TFR = (KKG, VPM)
+LDD = (QRJ, BFS)
+QVM = (VNN, CGL)
+KGF = (FBS, DNB)
+GBH = (MHV, LNB)
+JCG = (JKT, SVM)
+FJQ = (NMS, NRL)
+QXL = (RGC, SCQ)
+NRN = (SPR, VVF)
+FDM = (XMS, XJN)
+RFM = (BRV, CRH)
+NKT = (GLR, JHD)
+HFR = (VHD, LBJ)
+THB = (XFT, VHZ)
+XJJ = (BXB, HQT)
+QTG = (VSV, TKN)
+NQC = (PCR, FMX)
+JLB = (HFT, PPH)
+GXL = (BXS, XSQ)
+PSQ = (QTG, JLC)
+NDT = (BRB, FLG)
+PJN = (RRT, KMJ)
+TBT = (CKB, CCX)
+JBH = (GKQ, VXR)
+XVR = (QQB, NGD)
+BRT = (XGL, BLL)
+PCD = (MPS, LNL)
+SKL = (RNT, LKV)
+TSH = (BGL, SVT)
+JQF = (DVQ, NLN)
+DVQ = (RBN, HBF)
+RGC = (RCR, RRJ)
+QRJ = (TNL, NXH)
+XCL = (MFB, FRK)
+VLM = (JSN, JVD)
+RDP = (KGT, CXH)
+VTJ = (FLB, BJS)
+LCX = (XBL, MTJ)
+JVD = (QFQ, LJQ)
+BKM = (NJK, PBD)
+VMJ = (QHS, JQK)
+DMF = (VQQ, GBJ)
+CDT = (FCM, JKR)
+NTQ = (NTV, VMG)
+QRR = (NSF, NKG)
+NDL = (RNM, NCS)
+KVG = (LPJ, TNK)
+DCS = (BLK, LBK)
+JFQ = (RHG, GJN)
+GKQ = (SGL, LMC)
+JTF = (GPG, XDT)
+SVH = (CKD, KBG)
+RRR = (PQR, CGR)
+RHN = (CHN, XHL)
+HNQ = (GPH, JBH)
+BFG = (GTD, HRP)
+LLV = (PPH, HFT)
+NMP = (BJG, JTS)
+CSQ = (FQR, FGD)
+MRV = (HLS, LQC)
+LDJ = (KMB, NTG)
+PHT = (LNL, MPS)
+DJM = (RCJ, KKL)
+PTG = (VBD, VDL)
+PMP = (PXP, GCS)
+LTN = (QKB, QKB)
+BFS = (NXH, TNL)
+MGD = (XCG, HNV)
+QBV = (MRP, LXX)
+VFB = (LVT, HXF)
+XTQ = (TKT, DKM)
+QBR = (QBV, HSB)
+CPK = (QLN, JCS)
+MCG = (NQC, PSX)
+VMG = (VHP, JXG)
+FNQ = (LCQ, QHG)
diff --git a/2023/rs/code/eight/src/main.rs b/2023/rs/code/eight/src/main.rs
new file mode 100644
index 0000000..9e58f07
--- /dev/null
+++ b/2023/rs/code/eight/src/main.rs
@@ -0,0 +1,66 @@
+use std::collections::BTreeMap;
+
+static INPUT: &str = include_str!("input.txt");
+
+fn gcd(mut a: u128, mut b: u128) -> u128 {
+ while b > 0 {
+ (a, b) = (b, a % b)
+ }
+ a
+}
+
+fn lcm(a: u128, b: u128) -> u128 {
+ a * b / gcd(a, b)
+}
+
+fn main() {
+ let (valueified_instr, valueified_triples) = {
+ let mut iter = INPUT.lines();
+ let instr = iter.next().unwrap().bytes().map(|c| c == b'R');
+ iter.next().unwrap();
+ let triples = iter.map(|s| (&s[0..3], (&s[7..10], &s[12..15]))).collect::<BTreeMap<_, _>>();
+ (instr, triples)
+ };
+
+ let mut last = "AAA";
+ for (n, instr) in valueified_instr.clone().cycle().enumerate() {
+ if last == "ZZZ" {
+ println!("Steps to reach `ZZZ`: {n}");
+ break;
+ }
+ let pair = valueified_triples[last];
+ last = if instr { pair.1 } else { pair.0 };
+ }
+
+/*
+ let mut lasts = valueified_triples.keys().filter(|s| s.as_bytes()[2] == b'A').cloned().map(|a| (a, 0u128)).collect::<Vec<_>>();
+ for last in &mut lasts {
+ for (n, instr) in valueified_instr.clone().cycle().enumerate() {
+ let pair = valueified_triples[last.0];
+ last.0 = if instr { pair.1 } else { pair.0 };
+ if last.0.as_bytes()[2] == b'Z' {
+ last.1 = n as u128;
+ break;
+ }
+ }
+ }
+ dbg!(&lasts);
+ // yes, i could optimize the maths here, but i do not feel like it.
+ let total = lasts.into_iter().fold(1, |a, (_, n)| lcm(n, a));
+ println!("Steps for all to reach `Z`: {total}");
+
+ OK there's totally a way to do this cleverly like above but I can't think of it. This method overshoots, apparently.
+ It assumes the period here is the time it takes to reach Z. What I really need to do is like, find the LCM of the real periods but offset such that the final LCM is n below and blah blah ugh im gonna write the brute forcer and shit and hope it's done.
+ */
+ let mut lasts = valueified_triples.keys().filter(|s| s.as_bytes()[2] == b'A').cloned().collect::<Vec<_>>();
+ for (n, instr) in valueified_instr.clone().cycle().enumerate() {
+ for last in &mut lasts {
+ let pair = valueified_triples[*last];
+ *last = if instr { pair.1 } else { pair.0 };
+ }
+ if lasts.iter().all(|a| a.as_bytes()[2] == b'Z') {
+ println!("Steps for all to reach `Z`: {n}");
+ break;
+ }
+ }
+}