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