Complete 2023 day 8 part 1

This commit is contained in:
Timothy Warren 2023-12-19 14:23:55 -05:00
parent 770ef4c830
commit 38b84d497e
5 changed files with 970 additions and 0 deletions

8
2023/day8/Cargo.toml Normal file
View File

@ -0,0 +1,8 @@
[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]

49
2023/day8/README.md Normal file
View File

@ -0,0 +1,49 @@
# Day 8: Haunted Wasteland
## Part 1
You're still riding a camel across Desert Island when you spot a sandstorm quickly approaching. When you turn to warn
the Elf, she disappears before your eyes! To be fair, she had just finished warning you about **ghosts** a few minutes
ago.
One of the camel's pouches is labeled "maps" - sure enough, it's full of documents (your puzzle input) about how to
navigate the desert. At least, you're pretty sure that's what they are; one of the documents contains a list of
left/right instructions, and the rest of the documents seem to describe some kind of **network** of labeled nodes.
It seems like you're meant to use the **left/right** instructions to **navigate the network**. Perhaps if you have the
camel follow the same instructions, you can escape the haunted wasteland!
After examining the maps for a bit, two nodes stick out: `AAA` and `ZZZ`. You feel like `AAA` is where you are now,
and you have to follow the left/right instructions until you reach `ZZZ`.
This format defines each **node** of the network individually. For example:
```
RL
AAA = (BBB, CCC)
BBB = (DDD, EEE)
CCC = (ZZZ, GGG)
DDD = (DDD, DDD)
EEE = (EEE, EEE)
GGG = (GGG, GGG)
ZZZ = (ZZZ, ZZZ)
```
Starting with `AAA`, you need to **look up the next element** based on the next left/right instruction in your input.
In this example, start with `AAA` and go **right** (R) by choosing the right element of `AAA`, **CCC**. Then, `L` means
to choose the **left** element of `CCC`, **ZZZ**. By following the left/right instructions, you reach `ZZZ` in 2 steps.
Of course, you might not find `ZZZ` right away. If you run out of left/right instructions, repeat the whole sequence of
instructions as necessary: `R`L really means `RLRLRLRLRLRLRLRL...` and so on. For example, here is a situation that
takes `6` steps to reach `ZZZ`:
```
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)
```
Starting at AAA, follow the left/right instructions. **How many steps are required to reach ZZZ**?

View File

@ -0,0 +1,5 @@
LLR
AAA = (BBB, BBB)
BBB = (AAA, ZZZ)
ZZZ = (ZZZ, ZZZ)

796
2023/day8/src/input.txt Normal file
View File

@ -0,0 +1,796 @@
LRRLRLRRRLLRLRRRLRLLRLRLRRLRLRRLRRLRLRLLRRRLRRLLRRRLRRLRRRLRRLRLRLLRRLRLRRLLRRRLLLRRRLLLRRLRLRRLRLLRRRLRRLRRRLRRLLRRRLRRRLRRRLRLRRLRLRRRLRRRLRRLRLRRLLRRRLRRLLRRLRRLRLRLRRRLRLLRRRLRRLRRRLLRRLLLLLRRRLRRLLLRRRLRRRLRRLRLLLLLRLRRRLRRRLRLRRLLLLRLRRRLLRRRLRRRLRLRLRRLRRLRRLRLRLLLRLRRLRRLRRRLRRRLLRRRR
RBX = (TMF, KTP)
RBP = (MKS, MKS)
CGR = (XDR, VDX)
KBX = (DGP, JKM)
BNJ = (NJC, QRL)
BXQ = (DKX, CJQ)
NDX = (PHJ, TRQ)
KFQ = (KXN, GBQ)
LRF = (CTS, MTT)
RTN = (VMK, JTK)
QKP = (FDS, SFG)
BVB = (BHS, VRQ)
NBT = (BPJ, DFF)
HQM = (QMV, XVG)
XMR = (RKH, NJQ)
PHC = (XHP, DKM)
HTX = (BXK, BQP)
TPJ = (TNQ, QDX)
RDJ = (KHB, MFG)
XTF = (PPR, FHG)
DVA = (DBM, MVD)
HFP = (CXV, VCD)
HPS = (GTD, NBL)
LBK = (FVN, LHX)
KKS = (FKM, LHN)
FJV = (LVN, PLP)
MLH = (SFR, RJK)
SVQ = (RCS, FFD)
PTB = (TMC, QCR)
RFL = (RXP, VRL)
PTH = (XTS, GFG)
QNM = (TJR, MHX)
BJT = (PJG, SHG)
JJD = (FMJ, QVV)
GMX = (CLD, QRM)
DGZ = (BSL, BRS)
BVM = (SFC, JGD)
GNQ = (PLP, LVN)
XPG = (VLH, BCM)
PND = (RXV, VGM)
RNV = (GVL, MTB)
JSG = (QVP, XCX)
QHP = (KQG, BML)
XBK = (NPP, CRN)
QRL = (RQH, BGH)
HDJ = (VRQ, BHS)
XPD = (HSB, LRC)
KJK = (XCV, MDG)
NJB = (RKL, SHQ)
MCQ = (XFT, MRQ)
QRC = (XVS, CSN)
FCT = (DFF, BPJ)
MTF = (PQT, CNQ)
RXG = (QVP, XCX)
MVZ = (QRC, GHJ)
RKL = (QQM, BFT)
VRT = (GMJ, BDK)
BNS = (HQV, HPS)
JSQ = (HTC, PGD)
BHB = (VGQ, BTM)
NLP = (RKB, XQB)
FGF = (CVK, VRT)
FPM = (GDS, LTG)
BCX = (NDX, GSL)
GVL = (VCX, PSP)
KRM = (MHK, JCX)
GLJ = (XNX, RKP)
LBV = (FDC, TPJ)
GSP = (KMC, LQR)
TFR = (HXJ, MFJ)
DLX = (FNK, GLJ)
DKX = (XSR, LHP)
SVR = (KPX, QTM)
JMT = (GXV, RTX)
XSX = (HHD, HHD)
RJF = (BRH, HGP)
BDK = (TGX, HKP)
TFF = (DSX, DSX)
TJR = (BKB, LCB)
BDQ = (CLD, QRM)
NTC = (BQL, BQL)
CVS = (RQC, FFV)
BML = (VNT, JRH)
CBK = (TGB, RTN)
HQV = (GTD, NBL)
PDT = (SRQ, MLD)
RXV = (KJK, FCD)
XTS = (SCG, KQJ)
PXG = (LKG, MTQ)
PCX = (FKJ, FCV)
HKR = (LMK, BJR)
CKK = (XSX, XSX)
TNP = (TDH, JPR)
PCH = (RBP, PQH)
KHB = (RQR, BXQ)
CJZ = (CNC, HJX)
JPN = (FRP, QTB)
RKP = (NKH, FQC)
BDP = (GCM, VKT)
HQX = (TQF, NJB)
PFV = (FPM, VNP)
NFQ = (GFX, GXH)
STX = (MCQ, DNS)
CKX = (CFS, BNS)
NRJ = (SBG, TLK)
DHS = (VBH, VMT)
TVL = (BPQ, NBM)
QTF = (MPS, RJB)
FHV = (LMK, BJR)
JCV = (JSQ, STQ)
RGX = (GVL, MTB)
CTS = (PCB, GJV)
RCS = (TNT, XTF)
PCS = (NJH, RLX)
KNG = (CHP, FNN)
FJL = (KKH, QGQ)
CPK = (KTX, CGR)
BLF = (PCQ, TKN)
FCR = (STF, SVQ)
BSL = (GFJ, CDL)
FKS = (GRG, JSB)
FCM = (LFX, RJF)
XLK = (CDP, CBD)
KNB = (VGQ, BTM)
KGC = (TJR, MHX)
JHM = (JSP, XDN)
HFN = (STF, SVQ)
GCM = (CKX, KPS)
CGV = (MHK, JCX)
TQP = (JRM, XSB)
GSM = (FJV, GNQ)
KBL = (DLX, BGD)
CBC = (MQK, RRF)
NJM = (KLQ, BVL)
THG = (CPG, PND)
DXP = (HDJ, BVB)
DTT = (XDN, JSP)
PLP = (BKF, FGP)
MSZ = (MVD, DBM)
BQC = (NPL, VXF)
CGB = (LRM, MTH)
RLX = (DBT, RJN)
RXP = (HFP, JNS)
TTH = (QNF, KNG)
LHS = (QFR, GTN)
NBL = (THT, VTQ)
DRS = (PJH, STX)
PSP = (CPK, QKF)
PPR = (LQK, VSN)
QHT = (RLG, TDG)
FVM = (MLR, HXF)
DHB = (CQC, BKK)
MVP = (GHJ, QRC)
TDG = (RVX, CDB)
LKN = (HXF, MLR)
CNR = (KCV, CDR)
SMC = (BBR, BMS)
QDP = (LXV, VPS)
LLD = (CGC, NGQ)
KXN = (PRR, PSR)
LRC = (SHB, PBK)
SQD = (LBV, CRP)
QTB = (KNS, JTS)
MTT = (GJV, PCB)
GMV = (JNH, MJF)
DTG = (SQD, KVV)
RTV = (DSB, SJB)
CDL = (FTQ, CPN)
JHR = (JRM, XSB)
BFP = (PFG, MTD)
DTB = (NDX, GSL)
SQM = (CXL, NBD)
NBP = (KBN, LQH)
BTC = (LJT, TCV)
PQT = (PXG, BSF)
QDH = (FPM, VNP)
VPT = (PRT, VHJ)
VKC = (GXK, QSB)
NXB = (QKP, TGK)
FDF = (VRT, CVK)
NTG = (FRV, BQR)
RKB = (PHC, JSD)
MHV = (XXL, THG)
PHV = (SNM, TFR)
XRK = (JNN, LKR)
XVS = (CBK, NNM)
GDQ = (BDQ, GMX)
TKR = (CKJ, LVQ)
XCX = (LSP, FNB)
JCX = (FGF, FDF)
MFJ = (DBB, HBH)
BQP = (HRT, DQD)
VNC = (BDQ, GMX)
SSC = (LQH, KBN)
TJD = (QFV, KRS)
NKL = (CKK, DDC)
NTM = (QHG, MCC)
JBQ = (HXV, JPN)
DGP = (FVM, LKN)
SJB = (LRQ, DMG)
LJT = (MMT, MDL)
RFC = (MVM, JXP)
FFV = (TPG, QMD)
PJH = (DNS, MCQ)
VCD = (FHV, HKR)
MPS = (DHH, LPT)
VHJ = (RGX, RNV)
FLT = (FRF, NHG)
DSF = (SDV, VKC)
HJQ = (CDR, KCV)
BQR = (PDX, PMX)
CRJ = (BPN, KKS)
MQN = (PNN, DHB)
KCC = (KMC, LQR)
BTH = (VLH, BCM)
KNS = (GGM, SJS)
SCG = (MBF, RDR)
VDQ = (JNN, LKR)
XFT = (VPT, FLH)
RDR = (GTF, GJR)
CXS = (RRF, MQK)
XDN = (SSF, VGC)
JPR = (VGX, TCF)
BTF = (LKM, GBG)
GCJ = (VPS, LXV)
FGJ = (XVG, QMV)
MBF = (GJR, GTF)
TPG = (TND, QSF)
BNR = (BHG, SMC)
GJV = (FLB, PCX)
LQF = (BJT, KTN)
VSB = (JVB, FVK)
NHB = (HQX, LLQ)
CKC = (PJD, TRS)
JVB = (QQV, NRS)
BKK = (LSR, LJN)
SBV = (GTN, QFR)
JMK = (MFG, KHB)
LPX = (NBP, SSC)
KLJ = (CDX, VTL)
KQJ = (RDR, MBF)
VMK = (JXJ, BMT)
TRS = (LQM, JJD)
KCM = (XBD, XMH)
JCT = (NFQ, NDJ)
FGM = (HMK, PGQ)
QKK = (RLS, LPX)
QJD = (PDT, RPQ)
LHP = (PLN, MQN)
NPL = (TFF, TFF)
XHP = (PJQ, KBL)
HMK = (JNV, XPS)
KMC = (VCG, NTG)
QDX = (TMM, HHM)
VNP = (LTG, GDS)
PDR = (CDX, VTL)
HVK = (BQC, SCN)
QMV = (BNJ, CRL)
DDR = (KRS, QFV)
RDG = (QHP, QXN)
CRL = (NJC, QRL)
SHB = (SQX, JVV)
TSP = (BPX, FVC)
RRF = (KJB, PTB)
CSG = (FRX, RTP)
RPQ = (SRQ, MLD)
VXS = (MTN, DJQ)
PJK = (NGD, NTM)
QHG = (NXT, DHS)
LSP = (MTR, GGH)
SHN = (JJS, RVC)
TNQ = (TMM, HHM)
NPK = (GCM, VKT)
MJF = (NBT, FCT)
JNN = (PTH, HFK)
NRS = (CLT, HGV)
HSX = (BPX, FVC)
MVM = (DSF, NQS)
PBK = (SQX, JVV)
HHD = (DBM, MVD)
MTD = (DVB, BTX)
PXP = (NPP, CRN)
TMF = (LPF, QPD)
BRT = (FJV, GNQ)
MFQ = (BHG, SMC)
DJQ = (MVP, MVZ)
LKR = (PTH, HFK)
STQ = (HTC, PGD)
DXF = (JBX, TRT)
RJN = (PDR, KLJ)
CGC = (KKL, RJV)
SRG = (QKK, LND)
MCC = (DHS, NXT)
JMG = (RLX, NJH)
NKH = (DGF, FJL)
JXP = (DSF, NQS)
GXX = (CKC, MFL)
MXD = (KBC, FGK)
SCH = (XPG, BTH)
XSR = (MQN, PLN)
KKD = (NBD, CXL)
CLJ = (GCN, GCN)
QVV = (THK, LQV)
VLH = (FFB, STD)
RTP = (CBC, CXS)
RVX = (BLF, PTM)
KBN = (JNF, BTC)
PFX = (JHM, DTT)
NVL = (KCM, DLK)
QRM = (CQK, RBB)
HKP = (SHN, TMV)
VXF = (TFF, JRP)
LDL = (LHM, JMT)
BQL = (DRS, VQQ)
FDC = (TNQ, QDX)
MMT = (MSL, JCT)
CXV = (HKR, FHV)
BKB = (FCM, QTC)
HRQ = (RXG, JSG)
RKH = (JFF, TKR)
VQR = (JGD, SFC)
KCV = (LNG, NCV)
XSB = (DTG, DFK)
JGD = (HLP, FNS)
VCK = (RXP, VRL)
GTN = (BCP, CKB)
QDK = (CBD, CDP)
SNF = (JNH, MJF)
FVK = (QQV, NRS)
HHM = (VXK, PJK)
JRM = (DTG, DFK)
QPL = (XLK, QDK)
SCV = (QHP, QXN)
RQC = (QMD, TPG)
LFX = (BRH, HGP)
FRX = (CXS, CBC)
BTM = (FPK, JVF)
BPN = (LHN, FKM)
LRQ = (LSQ, PMP)
TPV = (LQF, KDN)
XBN = (QDS, DXP)
RBB = (FCR, HFN)
XSM = (LNT, STB)
SBR = (PQT, CNQ)
LVM = (SBV, LHS)
KBC = (JHR, TQP)
DLJ = (FGK, KBC)
LKG = (VJX, HLQ)
NXT = (VMT, VBH)
CBD = (HGN, HBG)
BHS = (VTF, MRV)
BTP = (GBG, LKM)
DSM = (CKK, CKK)
LSR = (CMB, NLP)
NPP = (BCX, DTB)
XCV = (SMS, QJD)
PNM = (BPQ, NBM)
VPS = (JJB, XMR)
JNH = (FCT, NBT)
KTN = (SHG, PJG)
FMJ = (LQV, THK)
GFX = (NBB, NBB)
SRQ = (GNS, QGB)
FQC = (DGF, FJL)
MPA = (BRS, BSL)
BMS = (FKS, SKF)
BMT = (JMG, PCS)
QFV = (SCH, FDJ)
STF = (RCS, FFD)
JTS = (GGM, SJS)
NJQ = (TKR, JFF)
MTQ = (HLQ, VJX)
FGK = (TQP, JHR)
JNF = (TCV, LJT)
LKM = (KGC, QNM)
MXV = (BQP, BXK)
FRF = (LVM, HGK)
GGH = (BHB, KNB)
BGH = (KBX, FDN)
LQH = (JNF, BTC)
JVF = (LDS, DCD)
CLT = (QPL, LFV)
HRV = (TRD, RXH)
NBD = (PXP, XBK)
PJD = (JJD, LQM)
XMV = (BBF, LKX)
BCN = (PBH, HPL)
XMH = (JNG, GCX)
HFK = (GFG, XTS)
VTL = (RFC, VPF)
MSL = (NFQ, NDJ)
THH = (KNG, QNF)
PCB = (PCX, FLB)
GBQ = (PRR, PSR)
NMS = (BQC, SCN)
PDX = (BGP, SFH)
LDS = (TLJ, LLD)
HGV = (QPL, LFV)
LMK = (VKX, JCV)
NBM = (PKR, QCS)
NLR = (LKJ, DGZ)
QDN = (TRT, JBX)
MTH = (HMT, NJM)
CKF = (LKJ, LKJ)
FDN = (DGP, JKM)
CDR = (NCV, LNG)
SGJ = (GBQ, KXN)
TMM = (VXK, PJK)
JSL = (CTS, MTT)
QGB = (TBK, NHB)
TDA = (GHJ, QRC)
GTF = (QDP, GCJ)
TCG = (FVK, JVB)
LXJ = (FVN, LHX)
TQF = (RKL, SHQ)
ZZZ = (VQQ, DRS)
NCV = (CRJ, GBL)
BKF = (CJP, PRL)
QPD = (DQN, JBQ)
MFL = (PJD, TRS)
NHG = (HGK, LVM)
MRV = (MLH, TBV)
XHS = (PSN, HRQ)
JJB = (NJQ, RKH)
TGK = (SFG, FDS)
CGS = (TRD, RXH)
GCN = (NCN, CVS)
PNN = (BKK, CQC)
LSQ = (KCC, GSP)
LND = (RLS, LPX)
CPG = (VGM, RXV)
GSF = (HMJ, RMH)
JRH = (VQR, BVM)
FJB = (DTT, JHM)
FKM = (BFK, XCQ)
LPT = (PRD, CGB)
XVG = (CRL, BNJ)
KRS = (FDJ, SCH)
BNL = (BQL, ZZZ)
JMB = (XVD, MBH)
KKH = (RLN, PHV)
MTB = (PSP, VCX)
NCN = (FFV, RQC)
FVC = (QJC, SRG)
FTS = (THG, XXL)
SFG = (BCN, DBN)
RXH = (XQT, SDR)
MLR = (GDQ, VNC)
TRD = (XQT, SDR)
BGD = (GLJ, FNK)
XDJ = (MPS, RJB)
JMJ = (MDJ, RTV)
RVC = (PXQ, NRJ)
QQV = (CLT, HGV)
MLD = (QGB, GNS)
KPH = (HRQ, PSN)
RLN = (TFR, SNM)
JRP = (DSX, HPD)
SJS = (DSM, NKL)
PGD = (CGS, HRV)
HPL = (GKH, CVN)
MQK = (PTB, KJB)
QCR = (MHV, FTS)
VCG = (BQR, FRV)
LXV = (XMR, JJB)
PKR = (QSH, XMV)
JSB = (DLJ, MXD)
VRL = (JNS, HFP)
PHJ = (BTF, BTP)
CXL = (XBK, PXP)
FNN = (TSP, HSX)
XQT = (VHH, QHT)
LQV = (DQK, JMB)
RLS = (NBP, SSC)
TCV = (MDL, MMT)
QTC = (LFX, RJF)
LRK = (MFL, CKC)
MHK = (FGF, FDF)
RLJ = (HJX, CNC)
TLK = (RFL, VCK)
CNC = (HJQ, CNR)
LQL = (FRX, RTP)
QQM = (MFQ, BNR)
VBH = (HLB, JMJ)
GKX = (TGK, QKP)
KQG = (JRH, VNT)
XDR = (DNF, KJV)
GMJ = (HKP, TGX)
VRQ = (VTF, MRV)
HGP = (VNB, LDL)
LNG = (GBL, CRJ)
BSF = (LKG, MTQ)
BRH = (VNB, LDL)
PJQ = (BGD, DLX)
QKF = (CGR, KTX)
QMD = (TND, QSF)
PQH = (MKS, STP)
FRV = (PDX, PMX)
LPF = (JBQ, DQN)
CQM = (TDH, JPR)
HJX = (CNR, HJQ)
AAA = (DRS, VQQ)
TDH = (VGX, TCF)
TGX = (TMV, SHN)
BDH = (XFV, GSF)
GXK = (BFP, TFH)
BFT = (MFQ, BNR)
NGD = (QHG, MCC)
FPK = (DCD, LDS)
MTR = (KNB, BHB)
SNM = (MFJ, HXJ)
HLP = (RHQ, SVR)
JSP = (VGC, SSF)
NJH = (RJN, DBT)
SKF = (GRG, JSB)
PTM = (TKN, PCQ)
QGQ = (PHV, RLN)
SSF = (NVL, JPB)
PCQ = (LTC, PCH)
KJV = (GMS, XGF)
JSD = (XHP, DKM)
RRB = (LQF, KDN)
GJJ = (FLT, BNV)
FJA = (HJX, CNC)
HLQ = (XRK, VDQ)
KTP = (LPF, QPD)
PRD = (LRM, MTH)
QNF = (CHP, FNN)
DQK = (MBH, XVD)
TMS = (CLJ, XML)
QVP = (FNB, LSP)
BPX = (QJC, SRG)
QXN = (KQG, BML)
VGQ = (JVF, FPK)
BRS = (CDL, GFJ)
NQS = (VKC, SDV)
LFV = (XLK, QDK)
SMS = (RPQ, PDT)
BBF = (CGV, KRM)
VMT = (HLB, JMJ)
QSF = (JSL, LRF)
CJQ = (XSR, LHP)
RDF = (KKD, SQM)
MKS = (CKF, CKF)
STD = (MNM, TMS)
DNS = (MRQ, XFT)
MFG = (RQR, BXQ)
GBG = (QNM, KGC)
JNG = (RDG, SCV)
CVN = (GJJ, QVC)
HMT = (BVL, KLQ)
VTQ = (NTC, BNL)
TGB = (JTK, VMK)
PSR = (NPK, BDP)
MDJ = (DSB, SJB)
CKB = (VSB, TCG)
DNF = (GMS, XGF)
LQK = (XFR, RDF)
RHQ = (KPX, QTM)
VKX = (STQ, JSQ)
BRX = (DDR, TJD)
LJN = (NLP, CMB)
DJR = (HMK, PGQ)
VNB = (JMT, LHM)
DBM = (SBR, MTF)
KLQ = (XBN, MNH)
MDL = (MSL, JCT)
SQX = (TPV, RRB)
CLD = (CQK, RBB)
HPD = (RLJ, CJZ)
LHN = (BFK, XCQ)
KJB = (TMC, QCR)
RLG = (RVX, CDB)
PBH = (GKH, CVN)
DMB = (HHD, MSZ)
SDV = (GXK, QSB)
KPX = (XDJ, QTF)
NBB = (MTN, MTN)
BTX = (BRT, GSM)
HGN = (HJT, RBX)
GDS = (XSM, BGG)
KDN = (KTN, BJT)
GSL = (TRQ, PHJ)
SFR = (XHS, KPH)
JNV = (TVL, PNM)
JNS = (VCD, CXV)
LHM = (GXV, RTX)
TFH = (MTD, PFG)
GHJ = (CSN, XVS)
KNQ = (LRK, GXX)
PRT = (RNV, RGX)
JTK = (BMT, JXJ)
MRQ = (VPT, FLH)
TKN = (LTC, PCH)
VSN = (XFR, RDF)
HXJ = (DBB, HBH)
PRL = (THH, TTH)
GCX = (RDG, SCV)
MNH = (DXP, QDS)
CMB = (XQB, RKB)
CHP = (TSP, HSX)
BCP = (TCG, VSB)
LNT = (HQM, FGJ)
FNK = (XNX, RKP)
HRT = (FJB, PFX)
HTC = (CGS, HRV)
SDR = (QHT, VHH)
CQK = (FCR, HFN)
LVN = (FGP, BKF)
FDS = (DBN, BCN)
QCS = (QSH, XMV)
TRT = (KFQ, SGJ)
RQH = (FDN, KBX)
QJC = (QKK, LND)
MVD = (SBR, MTF)
SBG = (RFL, VCK)
DSX = (RLJ, RLJ)
JBX = (KFQ, SGJ)
JVV = (RRB, TPV)
BBR = (FKS, SKF)
KTX = (VDX, XDR)
CSN = (NNM, CBK)
NNM = (RTN, TGB)
VXK = (NGD, NTM)
DQD = (FJB, PFX)
CDB = (BLF, PTM)
GBL = (BPN, KKS)
BGP = (SNT, BRX)
CRP = (FDC, TPJ)
DFK = (KVV, SQD)
LVQ = (KNQ, FBX)
HSB = (PBK, SHB)
PJG = (TNP, CQM)
JPB = (KCM, DLK)
JJS = (PXQ, NRJ)
XGF = (QDH, PFV)
DKM = (KBL, PJQ)
DVB = (GSM, BRT)
TMC = (MHV, FTS)
TRQ = (BTP, BTF)
FLB = (FCV, FKJ)
BVL = (MNH, XBN)
XPA = (NCN, CVS)
XPS = (PNM, TVL)
CPN = (RDJ, JMK)
RQR = (DKX, CJQ)
SFH = (SNT, BRX)
DBT = (KLJ, PDR)
MBH = (XCS, XPD)
DLK = (XMH, XBD)
HBG = (HJT, RBX)
THK = (DQK, JMB)
DGF = (KKH, QGQ)
BPJ = (GKX, NXB)
MTN = (MVP, MVP)
TMV = (RVC, JJS)
GMS = (PFV, QDH)
FDJ = (BTH, XPG)
FFB = (MNM, MNM)
RTX = (LBK, LXJ)
BGG = (LNT, STB)
LRM = (HMT, NJM)
XVD = (XPD, XCS)
THT = (NTC, NTC)
GXH = (NBB, VXS)
LTG = (XSM, BGG)
GKH = (GJJ, QVC)
TNT = (FHG, PPR)
CDP = (HGN, HBG)
DQN = (HXV, JPN)
FNS = (SVR, RHQ)
DSB = (DMG, LRQ)
DCD = (TLJ, LLD)
FTQ = (JMK, RDJ)
VGX = (SFN, BDH)
VDX = (KJV, DNF)
PMX = (SFH, BGP)
VTF = (TBV, MLH)
LQM = (FMJ, QVV)
VNT = (VQR, BVM)
XML = (GCN, QFZ)
VPF = (MVM, JXP)
TBK = (LLQ, HQX)
PXQ = (TLK, SBG)
LKX = (CGV, KRM)
DBN = (PBH, HPL)
XXL = (CPG, PND)
BHG = (BBR, BMS)
VQQ = (STX, PJH)
VHH = (RLG, TDG)
RJK = (KPH, XHS)
BFK = (MXV, HTX)
VJX = (XRK, VDQ)
GFJ = (CPN, FTQ)
GRG = (MXD, DLJ)
CQC = (LJN, LSR)
RJB = (DHH, LPT)
FGP = (CJP, PRL)
BCM = (FFB, STD)
FBX = (GXX, LRK)
FLH = (VHJ, PRT)
GTD = (THT, THT)
GNS = (NHB, TBK)
QTM = (XDJ, QTF)
VGM = (KJK, FCD)
XBD = (JNG, GCX)
QVC = (BNV, FLT)
FCV = (LQL, CSG)
SCN = (NPL, VXF)
KKL = (HVK, NMS)
MDG = (QJD, SMS)
QSB = (BFP, TFH)
LKJ = (BRS, BSL)
XCS = (HSB, LRC)
HLB = (MDJ, RTV)
TLJ = (NGQ, CGC)
MNM = (CLJ, CLJ)
STB = (HQM, FGJ)
HJT = (TMF, KTP)
TND = (LRF, JSL)
FVN = (QDN, DXF)
SNT = (TJD, DDR)
JKM = (LKN, FVM)
LTC = (RBP, PQH)
STP = (CKF, NLR)
DMG = (LSQ, PMP)
CDX = (RFC, VPF)
CNQ = (PXG, BSF)
PMP = (KCC, GSP)
VKT = (CKX, KPS)
CKJ = (FBX, KNQ)
VGC = (JPB, NVL)
LCB = (QTC, FCM)
TCF = (BDH, SFN)
DDC = (XSX, DMB)
SFN = (XFV, GSF)
HXF = (GDQ, VNC)
BPQ = (QCS, PKR)
FFD = (TNT, XTF)
TBV = (SFR, RJK)
DBB = (FGM, DJR)
FHG = (VSN, LQK)
GGM = (DSM, NKL)
RJV = (NMS, HVK)
NGQ = (RJV, KKL)
CFS = (HQV, HPS)
PFG = (BTX, DVB)
VCX = (QKF, CPK)
XCQ = (MXV, HTX)
DHH = (PRD, CGB)
HBH = (DJR, FGM)
RMH = (GMV, SNF)
HXV = (QTB, FRP)
QFZ = (CVS, NCN)
CVK = (BDK, GMJ)
SHQ = (QQM, BFT)
PGQ = (XPS, JNV)
LQR = (NTG, VCG)
QDS = (BVB, HDJ)
CJP = (THH, TTH)
FNB = (GGH, MTR)
PSN = (RXG, JSG)
LHX = (QDN, DXF)
GFG = (SCG, KQJ)
PRR = (NPK, BDP)
QSH = (LKX, BBF)
KVV = (LBV, CRP)
DFF = (NXB, GKX)
JFF = (CKJ, LVQ)
FCD = (MDG, XCV)
SFC = (FNS, HLP)
KPS = (BNS, CFS)
PLN = (PNN, DHB)
SHG = (CQM, TNP)
GJR = (QDP, GCJ)
NDJ = (GFX, GXH)
XQB = (PHC, JSD)
FKJ = (CSG, LQL)
FRP = (KNS, JTS)
MHX = (BKB, LCB)
HGK = (LHS, SBV)
JXJ = (JMG, PCS)
NJC = (RQH, BGH)
LLQ = (TQF, NJB)
QFR = (BCP, CKB)
BXK = (DQD, HRT)
XFR = (KKD, SQM)
XFV = (HMJ, RMH)
HMJ = (GMV, SNF)
BNV = (NHG, FRF)
GXV = (LBK, LXJ)
XNX = (NKH, FQC)
BJR = (VKX, JCV)
CRN = (BCX, DTB)

112
2023/day8/src/main.rs Normal file
View File

@ -0,0 +1,112 @@
use crate::Direction::{Left, Right};
use std::collections::HashMap;
const FILE_STR: &str = include_str!("input.txt");
const START_LOC: &str = "AAA";
const END_LOC: &str = "ZZZ";
#[derive(Debug, Copy, Clone)]
enum Direction {
Left,
Right,
}
impl From<char> for Direction {
fn from(value: char) -> Self {
match value {
'L' => Left,
'R' => Right,
_ => panic!("Invalid direction char"),
}
}
}
type DirectionMap = HashMap<String, (String, String)>;
#[derive(Debug)]
struct Network {
direction_list: Vec<Direction>,
map: DirectionMap,
}
impl Network {
fn parse(input: &str) -> Self {
let mut lines = input.split('\n');
let direction_list: Vec<Direction> = lines
.next()
.unwrap()
.trim()
.chars()
.map(Direction::from)
.collect();
let map = lines
.skip(1)
.filter(|l| !l.is_empty())
.map(|l| {
let parts: Vec<_> = l.split(" = ").collect();
let key = parts[0].trim();
let raw_dirs = parts[1].replace(['(', ')'], "");
let dirs: Vec<_> = raw_dirs.split(", ").collect();
let left = dirs[0].trim();
let right = dirs[1].trim();
(String::from(key), (String::from(left), String::from(right)))
})
.collect::<DirectionMap>();
Network {
direction_list,
map,
}
}
fn count_steps(&self) -> usize {
let mut count = 0usize;
let mut next_key = START_LOC;
let mut current = self.map.get(next_key).unwrap();
loop {
for x in self.direction_list.iter() {
count += 1;
next_key = match x {
Direction::Left => &current.0,
Direction::Right => &current.1,
};
if next_key == END_LOC {
return count;
}
current = self
.map
.get(next_key)
.unwrap_or_else(|| panic!("Unable to find key {} in map", next_key));
}
}
}
}
fn part_one() {
let network = Network::parse(FILE_STR);
let step_count = network.count_steps();
println!("Part 1: Step count from AAA to ZZZ {}", step_count);
}
fn main() {
part_one();
}
#[cfg(test)]
mod tests {
const EXAMPLE_FILE_STR: &str = include_str!("example-input.txt");
use super::*;
#[test]
fn first_example() {
let network = Network::parse(EXAMPLE_FILE_STR);
assert_eq!(6, network.count_steps());
}
}