Complete 2023 day 8 part 1
This commit is contained in:
parent
770ef4c830
commit
38b84d497e
8
2023/day8/Cargo.toml
Normal file
8
2023/day8/Cargo.toml
Normal 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
49
2023/day8/README.md
Normal 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**?
|
5
2023/day8/src/example-input.txt
Normal file
5
2023/day8/src/example-input.txt
Normal file
@ -0,0 +1,5 @@
|
||||
LLR
|
||||
|
||||
AAA = (BBB, BBB)
|
||||
BBB = (AAA, ZZZ)
|
||||
ZZZ = (ZZZ, ZZZ)
|
796
2023/day8/src/input.txt
Normal file
796
2023/day8/src/input.txt
Normal 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
112
2023/day8/src/main.rs
Normal 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 => ¤t.0,
|
||||
Direction::Right => ¤t.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());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user