mirror of
https://github.com/theoludwig/advent_of_code_2023.git
synced 2024-12-08 00:45:53 +01:00
feat: add day 8 - part 1
This commit is contained in:
parent
428a6482e0
commit
51f9ac4bfc
4
Cargo.lock
generated
4
Cargo.lock
generated
@ -104,6 +104,10 @@ dependencies = [
|
||||
"array-init",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "day_8"
|
||||
version = "1.0.0"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.9.0"
|
||||
|
@ -3,7 +3,7 @@ members = ["day_*"]
|
||||
resolver = "2"
|
||||
|
||||
[workspace.package]
|
||||
name = "advent_of_code_2023"
|
||||
# name = "advent_of_code_2023"
|
||||
version = "1.0.0"
|
||||
edition = "2021"
|
||||
rust-version = "1.74.0"
|
||||
|
1
day_8/.gitignore
vendored
Normal file
1
day_8/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
/target
|
5
day_8/Cargo.toml
Normal file
5
day_8/Cargo.toml
Normal file
@ -0,0 +1,5 @@
|
||||
[package]
|
||||
name = "day_8"
|
||||
version.workspace = true
|
||||
edition.workspace = true
|
||||
rust-version.workspace = true
|
41
day_8/README.md
Normal file
41
day_8/README.md
Normal file
@ -0,0 +1,41 @@
|
||||
# - Day 8: Haunted Wasteland -
|
||||
|
||||
Source: <https://adventofcode.com/2023/day/8>
|
||||
|
||||
## Instructions - 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:
|
||||
|
||||
```txt
|
||||
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: `RL` really means `RLRLRLRLRLRLRLRL...` and so on. For example, here is a situation that takes **`6`** steps to reach `ZZZ`:
|
||||
|
||||
```txt
|
||||
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`?**
|
732
day_8/input.txt
Normal file
732
day_8/input.txt
Normal file
@ -0,0 +1,732 @@
|
||||
LLLLLLLRRRLRRRLRLRLRLRRLLRRRLRLLRRRLLRRLRRLRRLRLRRLRLRRRLRRLRLRRRLRRLRRLRLRRLLRLLRLRRRLRRLRLLLLRRLLLLRLRLRLRRRLRLRLLLRLRRRLRRRLRRRLRLRRLRRRLRLLLRLLRRLRRRLRRLRRLRRLRLRRRLRLRLRLLRRRLRRRLRRLRRRLLLRRLRRLRRRLRLRRRLRRRLRLRRLRRRLRLRRLRLRRLRRRLRLRRLRLLRRRLLRLRRLRRRLLLRLRRLRRRR
|
||||
|
||||
DGK = (KVQ, XHR)
|
||||
KTC = (TVB, MTH)
|
||||
CGR = (VVK, BKP)
|
||||
LCG = (FQC, KHX)
|
||||
PSZ = (FSF, QSM)
|
||||
FBJ = (FHP, SPX)
|
||||
KJD = (NRQ, VDH)
|
||||
NCM = (JPJ, KNG)
|
||||
TXH = (HNK, VHQ)
|
||||
NND = (TRC, DFM)
|
||||
JQN = (CNX, XLD)
|
||||
RHB = (CDG, GBT)
|
||||
JBN = (PXV, GVN)
|
||||
DFC = (JRN, TXH)
|
||||
TXG = (CHT, VBL)
|
||||
XXQ = (JDC, JGV)
|
||||
SVF = (FVD, LHQ)
|
||||
FVK = (LCG, RNB)
|
||||
XKT = (MPF, XJJ)
|
||||
MHB = (JSJ, VQM)
|
||||
FVC = (HXF, VVN)
|
||||
JJR = (VNS, SLM)
|
||||
RMT = (GDS, XHP)
|
||||
CHT = (PXS, VLF)
|
||||
SFJ = (XGC, LPM)
|
||||
BJL = (XDN, VXN)
|
||||
PQK = (NHS, DVB)
|
||||
PDB = (JPQ, TVJ)
|
||||
RGL = (DNN, NCN)
|
||||
KRN = (SBL, PHL)
|
||||
MTF = (PJL, KQR)
|
||||
BTL = (CCF, LDP)
|
||||
NLV = (CPM, HVL)
|
||||
GCQ = (QMF, JVH)
|
||||
KVH = (VKD, PQG)
|
||||
RLB = (GSS, JVP)
|
||||
QRB = (TNL, DKN)
|
||||
JFV = (RDR, NSB)
|
||||
BFC = (LGH, XLX)
|
||||
HGQ = (SLM, VNS)
|
||||
FQC = (VFQ, BXC)
|
||||
DDS = (XHR, KVQ)
|
||||
VQV = (SFT, BFQ)
|
||||
XFD = (HVV, FLH)
|
||||
TVP = (XQF, KSS)
|
||||
GBH = (NPX, LDB)
|
||||
KHL = (MGS, MMD)
|
||||
NPX = (BJL, SFF)
|
||||
VMG = (DHX, GVC)
|
||||
RTJ = (XRF, BPK)
|
||||
TLM = (NCG, QBB)
|
||||
LXS = (TVB, MTH)
|
||||
XNM = (QFL, KQK)
|
||||
KQR = (QRD, JBN)
|
||||
JQD = (DNN, NCN)
|
||||
QCF = (MXL, MXL)
|
||||
QMH = (NKG, SDJ)
|
||||
NKK = (MCB, RLB)
|
||||
MPJ = (BTL, JTF)
|
||||
TLS = (VPJ, LMD)
|
||||
XJB = (LML, TKZ)
|
||||
HGF = (HBF, QHB)
|
||||
KNJ = (QKM, XLR)
|
||||
XCF = (QCJ, HTN)
|
||||
HFS = (NKC, JFV)
|
||||
QLS = (QBB, NCG)
|
||||
QFL = (NXQ, QBN)
|
||||
MTH = (FLN, LQR)
|
||||
VND = (KMM, MQH)
|
||||
NQQ = (VVH, NDL)
|
||||
BTV = (QSM, FSF)
|
||||
SLT = (NRQ, VDH)
|
||||
NKG = (TBV, XCV)
|
||||
SLM = (LBN, HPK)
|
||||
CMQ = (KKS, VBH)
|
||||
JTF = (LDP, CCF)
|
||||
VFC = (GKH, KPS)
|
||||
KCC = (JVM, MTF)
|
||||
KFP = (MVX, NMX)
|
||||
NQF = (QSK, KCC)
|
||||
GGC = (VBV, TJR)
|
||||
QQS = (NKK, NQC)
|
||||
LXK = (FXC, QBC)
|
||||
DVQ = (TFF, LKB)
|
||||
PBL = (BGQ, FHQ)
|
||||
KHV = (BVJ, XSD)
|
||||
LDB = (SFF, BJL)
|
||||
RJG = (LJB, CJM)
|
||||
RCX = (QTB, PPL)
|
||||
FLH = (HSX, KVX)
|
||||
XTV = (HST, VCC)
|
||||
GDC = (CMH, NCT)
|
||||
RDP = (FKR, GHJ)
|
||||
NXM = (PVV, KRX)
|
||||
SCQ = (MFN, GRB)
|
||||
MRT = (XGT, VLK)
|
||||
DHJ = (XHP, GDS)
|
||||
XFL = (TJK, QMH)
|
||||
XQF = (CCQ, RPH)
|
||||
CLV = (CKD, CCD)
|
||||
CMT = (NCD, XDM)
|
||||
NCT = (SXG, CLF)
|
||||
JSS = (GMJ, LJC)
|
||||
TLQ = (CRC, DXQ)
|
||||
DMJ = (HHB, DRV)
|
||||
JBH = (FVC, HDX)
|
||||
QXK = (QSB, JBH)
|
||||
DQN = (QMD, GDN)
|
||||
SDH = (PRH, BCX)
|
||||
QSB = (HDX, FVC)
|
||||
MTP = (VVG, SPN)
|
||||
CTM = (MFG, GGJ)
|
||||
HND = (MNV, TXG)
|
||||
MJS = (DMJ, QQG)
|
||||
JNL = (LKB, TFF)
|
||||
QLL = (FKM, HNH)
|
||||
PNM = (PQR, NRL)
|
||||
VSF = (LPM, XGC)
|
||||
QBC = (QQS, MVF)
|
||||
BFM = (FBP, BQJ)
|
||||
KNG = (RTJ, CXN)
|
||||
VFQ = (HFS, LBS)
|
||||
LKB = (QVB, TXF)
|
||||
KQD = (CDJ, CDJ)
|
||||
ZZZ = (DHJ, RMT)
|
||||
XKX = (HVP, NJF)
|
||||
GSL = (QMS, DHM)
|
||||
PNT = (CDJ, GJZ)
|
||||
KBN = (CMQ, JBG)
|
||||
DNX = (SFM, GFJ)
|
||||
NMX = (XRR, LKL)
|
||||
VPJ = (PSK, GQL)
|
||||
XQD = (QCF, QCF)
|
||||
HRM = (RHB, XXJ)
|
||||
LCL = (MRT, FMB)
|
||||
DRG = (RNB, LCG)
|
||||
BKP = (QLL, MMQ)
|
||||
FSF = (SLR, XGV)
|
||||
KHX = (BXC, VFQ)
|
||||
SXG = (NHL, KGK)
|
||||
MJD = (TDH, RFP)
|
||||
NRL = (CSG, MPT)
|
||||
FBP = (QGC, GXH)
|
||||
HDT = (LHQ, FVD)
|
||||
BMP = (RMG, JXM)
|
||||
NCN = (SLT, KJD)
|
||||
NXQ = (JPP, QQL)
|
||||
NGV = (HNJ, VVQ)
|
||||
NPN = (MXL, NJK)
|
||||
FVD = (XBQ, NKF)
|
||||
GQM = (QCG, GGC)
|
||||
QBP = (XML, HND)
|
||||
VQT = (BTL, JTF)
|
||||
HKP = (CMH, NCT)
|
||||
JHP = (NDL, VVH)
|
||||
FRL = (SHD, FNH)
|
||||
FLN = (NVL, HGF)
|
||||
MXH = (QSD, KKR)
|
||||
BGL = (XCX, RFC)
|
||||
RSQ = (MKH, TLS)
|
||||
VML = (RJM, CXK)
|
||||
XHP = (MJS, DNP)
|
||||
GRV = (XRN, TVQ)
|
||||
GKH = (BCF, VSD)
|
||||
SPH = (MVX, NMX)
|
||||
TLD = (LFR, GFQ)
|
||||
LML = (QKS, NND)
|
||||
PKT = (VXC, CMF)
|
||||
LLQ = (THT, GRV)
|
||||
CKD = (SPB, QDV)
|
||||
KRM = (JQV, JNG)
|
||||
RNS = (HJJ, MLV)
|
||||
FKR = (FKK, BHN)
|
||||
XNH = (SCQ, KLF)
|
||||
GDN = (LBL, FHT)
|
||||
CRB = (NHQ, QRB)
|
||||
JKQ = (DPT, KBN)
|
||||
NJF = (RJG, NGF)
|
||||
NRT = (NSK, CSL)
|
||||
LJR = (VTT, HCQ)
|
||||
HLK = (DFC, DPV)
|
||||
PQR = (MPT, CSG)
|
||||
DNF = (NJF, HVP)
|
||||
MPV = (HJD, XSF)
|
||||
TBV = (XTJ, SVH)
|
||||
LKX = (XFJ, HBM)
|
||||
KTP = (CGR, RVR)
|
||||
HVL = (BJH, QXK)
|
||||
GJD = (XJJ, MPF)
|
||||
HLC = (VVQ, HNJ)
|
||||
JTX = (NCD, XDM)
|
||||
CSG = (MFF, RKT)
|
||||
PCH = (PGJ, GQM)
|
||||
SFF = (VXN, XDN)
|
||||
TCF = (KNG, JPJ)
|
||||
LDP = (XFD, SBS)
|
||||
XCR = (GJD, XKT)
|
||||
QBM = (GFB, LRH)
|
||||
CLP = (RJM, CXK)
|
||||
MTT = (HST, VCC)
|
||||
TQL = (BPM, GGT)
|
||||
LFR = (HNF, RDP)
|
||||
JHN = (CMT, JTX)
|
||||
XCX = (CHG, CHG)
|
||||
XGT = (HLK, QJF)
|
||||
TQS = (TKL, MNF)
|
||||
KFL = (HGQ, JJR)
|
||||
LHQ = (XBQ, NKF)
|
||||
CCQ = (DBP, HHC)
|
||||
TKL = (VDN, PBP)
|
||||
LBX = (BXM, SDH)
|
||||
XLX = (NGJ, LHJ)
|
||||
GVN = (BPG, TNK)
|
||||
CCX = (HCQ, VTT)
|
||||
KQK = (QBN, NXQ)
|
||||
NQC = (MCB, RLB)
|
||||
MPF = (DFT, SBG)
|
||||
BNH = (MLV, HJJ)
|
||||
CJM = (LBH, TNM)
|
||||
CND = (VKB, PGQ)
|
||||
HXM = (GMJ, LJC)
|
||||
TKZ = (NND, QKS)
|
||||
RKT = (LNQ, KFL)
|
||||
GXH = (RQP, LBX)
|
||||
TFF = (QVB, TXF)
|
||||
LNK = (FDC, MXH)
|
||||
KPK = (BNH, RNS)
|
||||
QQG = (HHB, DRV)
|
||||
MFP = (PQK, NBF)
|
||||
VVK = (QLL, MMQ)
|
||||
GFB = (RHN, LCN)
|
||||
PPD = (QCJ, HTN)
|
||||
FXV = (BPM, GGT)
|
||||
KSS = (CCQ, RPH)
|
||||
KCM = (LTB, PCH)
|
||||
RHN = (FXV, TQL)
|
||||
LFV = (DDJ, NQF)
|
||||
JKG = (BGQ, FHQ)
|
||||
MBS = (RQJ, LDQ)
|
||||
HHC = (NGV, HLC)
|
||||
CCD = (QDV, SPB)
|
||||
RFM = (FTB, HSB)
|
||||
QCG = (VBV, TJR)
|
||||
GRH = (LXK, LGQ)
|
||||
CDJ = (QQJ, BFC)
|
||||
THT = (TVQ, XRN)
|
||||
QRD = (PXV, GVN)
|
||||
VHQ = (SXV, GJL)
|
||||
MLV = (VRM, MCP)
|
||||
XRR = (CLV, PBJ)
|
||||
NMS = (DGK, DDS)
|
||||
JPS = (JKT, KHL)
|
||||
DJJ = (QMS, DHM)
|
||||
MFG = (TLQ, VQD)
|
||||
GPQ = (SHL, BNR)
|
||||
QVB = (GDC, HKP)
|
||||
LNN = (CMF, VXC)
|
||||
VBQ = (LNN, PKT)
|
||||
MMS = (SVV, HRM)
|
||||
BGJ = (HXM, JSS)
|
||||
QCK = (JSJ, VQM)
|
||||
PKB = (XNH, JQH)
|
||||
BCF = (TQR, TLL)
|
||||
JRN = (VHQ, HNK)
|
||||
SHL = (DMK, JBX)
|
||||
LRG = (NSK, CSL)
|
||||
NJV = (FJH, TXC)
|
||||
GHQ = (FSB, HFX)
|
||||
LHN = (TLS, MKH)
|
||||
HBF = (BMP, GLM)
|
||||
DTP = (DVQ, JNL)
|
||||
FXR = (FTB, HSB)
|
||||
PDS = (XLD, CNX)
|
||||
SXV = (CPC, JNF)
|
||||
QMF = (GGF, JDP)
|
||||
JVP = (GPC, DNX)
|
||||
RMG = (HRF, PKB)
|
||||
LRH = (LCN, RHN)
|
||||
HVP = (RJG, NGF)
|
||||
TRC = (VKX, RQL)
|
||||
PJL = (QRD, JBN)
|
||||
HNK = (GJL, SXV)
|
||||
CHM = (NBF, PQK)
|
||||
PGH = (KMM, MQH)
|
||||
SDN = (MFP, CHM)
|
||||
DMK = (VRP, NNX)
|
||||
MRR = (NGK, SMQ)
|
||||
QDV = (NDM, JPT)
|
||||
PGJ = (QCG, GGC)
|
||||
BVJ = (NLV, HBR)
|
||||
PGQ = (BGK, GBH)
|
||||
LKL = (CLV, PBJ)
|
||||
FDC = (KKR, QSD)
|
||||
JDP = (PDB, PTX)
|
||||
NJJ = (HSJ, GRH)
|
||||
TVJ = (HDT, SVF)
|
||||
NJK = (RBV, ZZZ)
|
||||
HHN = (DPP, TLD)
|
||||
QMS = (BLS, TQS)
|
||||
QVR = (CVB, BNJ)
|
||||
FFQ = (RMJ, HGZ)
|
||||
LGQ = (QBC, FXC)
|
||||
JPP = (RSG, KTG)
|
||||
DPV = (TXH, JRN)
|
||||
HBR = (CPM, HVL)
|
||||
NSK = (JQN, PDS)
|
||||
SBS = (HVV, FLH)
|
||||
BFQ = (VBQ, JPB)
|
||||
LBN = (LXJ, CCR)
|
||||
RBD = (KRM, PNX)
|
||||
NQX = (LML, LML)
|
||||
XSA = (QKS, NND)
|
||||
NDB = (HFX, FSB)
|
||||
QMD = (LBL, FHT)
|
||||
XTJ = (JDT, JDT)
|
||||
GLH = (SHL, BNR)
|
||||
FXC = (MVF, QQS)
|
||||
HSX = (NFN, LVG)
|
||||
JNF = (JJH, FNR)
|
||||
CXK = (SPC, TVP)
|
||||
GGF = (PDB, PTX)
|
||||
XBQ = (QNX, JCQ)
|
||||
LJC = (SFJ, VSF)
|
||||
MMD = (XLK, CND)
|
||||
HFG = (JKT, KHL)
|
||||
NHQ = (TNL, DKN)
|
||||
JVM = (KQR, PJL)
|
||||
CGH = (RTC, VFC)
|
||||
HNF = (GHJ, FKR)
|
||||
TMF = (NMS, GJH)
|
||||
NGJ = (NXM, BDB)
|
||||
MRM = (JKQ, MPS)
|
||||
QTC = (JSS, HXM)
|
||||
TNM = (JFF, QXR)
|
||||
DHK = (LJR, CCX)
|
||||
XSB = (MRR, CXC)
|
||||
XRN = (XDP, QBP)
|
||||
XCV = (XTJ, SVH)
|
||||
VVA = (QSM, FSF)
|
||||
NKC = (RDR, NSB)
|
||||
MXL = (RBV, RBV)
|
||||
PTX = (TVJ, JPQ)
|
||||
VRL = (NQX, XJB)
|
||||
RQK = (MPS, JKQ)
|
||||
PBJ = (CKD, CCD)
|
||||
VRP = (DQN, QLC)
|
||||
KLF = (MFN, GRB)
|
||||
XXJ = (GBT, CDG)
|
||||
HST = (QHV, MMS)
|
||||
SFT = (JPB, VBQ)
|
||||
NRR = (LCL, MQR)
|
||||
CSL = (JQN, PDS)
|
||||
LHJ = (BDB, NXM)
|
||||
TXK = (DHK, KLC)
|
||||
CDK = (XCX, XCX)
|
||||
FHT = (NGQ, JHN)
|
||||
QQJ = (LGH, XLX)
|
||||
BQJ = (GXH, QGC)
|
||||
TTA = (QKM, XLR)
|
||||
TVB = (FLN, LQR)
|
||||
PPL = (FRL, NCX)
|
||||
SPS = (XFJ, HBM)
|
||||
SVH = (JDT, VRL)
|
||||
QBB = (PXG, MTP)
|
||||
JSJ = (VVB, NRR)
|
||||
KKS = (RGL, JQD)
|
||||
JDT = (NQX, NQX)
|
||||
GKQ = (LLT, JRH)
|
||||
VVH = (BPT, KRN)
|
||||
JCQ = (CRB, PBS)
|
||||
QXR = (BTV, PSZ)
|
||||
VQR = (RCX, KKP)
|
||||
QSM = (SLR, XGV)
|
||||
JKD = (JDC, JGV)
|
||||
XLD = (LFS, QVR)
|
||||
TJK = (NKG, SDJ)
|
||||
PVV = (HDK, VQV)
|
||||
BDB = (PVV, KRX)
|
||||
MPS = (KBN, DPT)
|
||||
FHP = (PPD, XCF)
|
||||
HTN = (KCM, PXC)
|
||||
GHJ = (BHN, FKK)
|
||||
JCC = (LQM, KVH)
|
||||
LQR = (HGF, NVL)
|
||||
LGM = (DDJ, NQF)
|
||||
NJN = (QCF, NPN)
|
||||
PRH = (DFF, DFF)
|
||||
XDM = (FBJ, PJM)
|
||||
HFN = (KRS, XSB)
|
||||
GLM = (JXM, RMG)
|
||||
RQP = (BXM, SDH)
|
||||
BPG = (QJT, KTP)
|
||||
JPB = (LNN, PKT)
|
||||
DKN = (CJD, BGR)
|
||||
CDG = (GSL, DJJ)
|
||||
XDN = (CGM, VMG)
|
||||
NQP = (SKT, JCC)
|
||||
DNP = (QQG, DMJ)
|
||||
NNX = (DQN, QLC)
|
||||
FTB = (JFL, VJJ)
|
||||
FHQ = (SMJ, XFK)
|
||||
GGT = (KPK, LNT)
|
||||
NGF = (LJB, CJM)
|
||||
QFX = (KCN, TMF)
|
||||
NKF = (JCQ, QNX)
|
||||
DBP = (NGV, HLC)
|
||||
RBV = (RMT, DHJ)
|
||||
NML = (MBV, VCG)
|
||||
KXJ = (MXH, FDC)
|
||||
GFQ = (RDP, HNF)
|
||||
SHD = (CMG, CTM)
|
||||
GTX = (LNK, KXJ)
|
||||
HXF = (KTC, LXS)
|
||||
CMM = (NQP, SBR)
|
||||
SDJ = (TBV, XCV)
|
||||
CHG = (RMJ, RMJ)
|
||||
DPT = (CMQ, JBG)
|
||||
BGR = (RLM, NML)
|
||||
THM = (XQD, NJN)
|
||||
HJJ = (MCP, VRM)
|
||||
NRQ = (JHR, GCQ)
|
||||
KKR = (HSN, NJJ)
|
||||
KVX = (LVG, NFN)
|
||||
LTT = (TLD, DPP)
|
||||
NVL = (QHB, HBF)
|
||||
CXN = (XRF, BPK)
|
||||
KLC = (CCX, LJR)
|
||||
JDC = (DNF, XKX)
|
||||
MGS = (XLK, CND)
|
||||
RLM = (VCG, MBV)
|
||||
VDN = (NMQ, TPR)
|
||||
HSB = (JFL, VJJ)
|
||||
HDS = (KLC, DHK)
|
||||
XSD = (NLV, HBR)
|
||||
HJD = (NJQ, PBQ)
|
||||
CGM = (DHX, GVC)
|
||||
LDQ = (PBL, JKG)
|
||||
RDR = (XHQ, MGQ)
|
||||
GPC = (GFJ, SFM)
|
||||
NQT = (KRS, XSB)
|
||||
TDH = (RBD, XLP)
|
||||
QJF = (DFC, DPV)
|
||||
VNS = (HPK, LBN)
|
||||
QSD = (NJJ, HSN)
|
||||
JHR = (QMF, JVH)
|
||||
SMQ = (FXR, RFM)
|
||||
CMG = (MFG, GGJ)
|
||||
NKQ = (VFC, RTC)
|
||||
VXC = (LHN, RSQ)
|
||||
DHX = (LCT, XNM)
|
||||
TCX = (NQT, HFN)
|
||||
DRV = (TFN, QBM)
|
||||
JPT = (GQX, XCR)
|
||||
HRF = (JQH, XNH)
|
||||
MCS = (BGJ, QTC)
|
||||
PQG = (NCM, TCF)
|
||||
XHR = (PJK, VPN)
|
||||
MLX = (PGH, VND)
|
||||
MKH = (VPJ, LMD)
|
||||
TJR = (VQT, MPJ)
|
||||
VLF = (GLG, QFX)
|
||||
JNG = (KLR, MPV)
|
||||
HDK = (BFQ, SFT)
|
||||
HFX = (MLX, SPL)
|
||||
BXC = (HFS, LBS)
|
||||
CCT = (GTX, HPT)
|
||||
VLK = (HLK, QJF)
|
||||
NCD = (PJM, FBJ)
|
||||
VGT = (JNL, DVQ)
|
||||
LMD = (PSK, GQL)
|
||||
KRX = (HDK, VQV)
|
||||
QNX = (CRB, PBS)
|
||||
NJQ = (GHQ, NDB)
|
||||
TNV = (FBP, BQJ)
|
||||
GNR = (XQD, NJN)
|
||||
KKP = (QTB, PPL)
|
||||
DBX = (KCQ, CPS)
|
||||
VRM = (TLM, QLS)
|
||||
LVG = (BRP, NJV)
|
||||
NHL = (SPS, LKX)
|
||||
MNV = (VBL, CHT)
|
||||
PJK = (HHN, LTT)
|
||||
VBH = (JQD, RGL)
|
||||
GRB = (NKQ, CGH)
|
||||
SKT = (KVH, LQM)
|
||||
TPR = (RXR, KHV)
|
||||
VVB = (LCL, MQR)
|
||||
VKX = (MRM, RQK)
|
||||
LTB = (PGJ, GQM)
|
||||
QCJ = (KCM, PXC)
|
||||
BGQ = (SMJ, SMJ)
|
||||
RCV = (NQQ, JHP)
|
||||
DHM = (TQS, BLS)
|
||||
KRS = (CXC, MRR)
|
||||
JFL = (BLT, PNM)
|
||||
TXC = (NRT, LRG)
|
||||
MVX = (LKL, XRR)
|
||||
QSK = (JVM, MTF)
|
||||
BGK = (LDB, NPX)
|
||||
GJZ = (BFC, QQJ)
|
||||
PXC = (LTB, PCH)
|
||||
HMQ = (BGJ, QTC)
|
||||
RXR = (BVJ, XSD)
|
||||
BXM = (PRH, BCX)
|
||||
FJH = (LRG, NRT)
|
||||
GJH = (DGK, DDS)
|
||||
BPT = (SBL, PHL)
|
||||
RQL = (RQK, MRM)
|
||||
SJB = (RQJ, LDQ)
|
||||
NFN = (NJV, BRP)
|
||||
MND = (NQQ, JHP)
|
||||
NMQ = (KHV, RXR)
|
||||
XGV = (TXK, HDS)
|
||||
SPC = (KSS, XQF)
|
||||
RMJ = (SMR, QRS)
|
||||
CNX = (LFS, QVR)
|
||||
KLR = (HJD, XSF)
|
||||
XLP = (KRM, PNX)
|
||||
LPM = (CMM, PHF)
|
||||
FNR = (CCT, VTP)
|
||||
NGQ = (CMT, JTX)
|
||||
CCR = (BFM, TNV)
|
||||
LCN = (FXV, TQL)
|
||||
HVV = (HSX, KVX)
|
||||
FSB = (MLX, SPL)
|
||||
GGJ = (TLQ, VQD)
|
||||
NHS = (DRG, FVK)
|
||||
RQJ = (PBL, JKG)
|
||||
VCC = (MMS, QHV)
|
||||
HDX = (VVN, HXF)
|
||||
VQM = (NRR, VVB)
|
||||
TFN = (GFB, LRH)
|
||||
QRS = (VQR, MDS)
|
||||
HBM = (VTQ, SDN)
|
||||
CCF = (SBS, XFD)
|
||||
VCG = (HMQ, MCS)
|
||||
NBF = (DVB, NHS)
|
||||
DVB = (FVK, DRG)
|
||||
PGB = (TDH, RFP)
|
||||
XRF = (KFP, SPH)
|
||||
KMM = (PDJ, GQN)
|
||||
KTG = (GGQ, HNR)
|
||||
BJH = (JBH, QSB)
|
||||
JJH = (CCT, VTP)
|
||||
LBH = (JFF, JFF)
|
||||
GLG = (TMF, KCN)
|
||||
TQR = (THM, GNR)
|
||||
MQH = (GQN, PDJ)
|
||||
MQR = (FMB, MRT)
|
||||
FNH = (CTM, CMG)
|
||||
SMR = (VQR, MDS)
|
||||
GDS = (DNP, MJS)
|
||||
LCT = (KQK, QFL)
|
||||
VKB = (GBH, BGK)
|
||||
VTQ = (CHM, MFP)
|
||||
TNK = (QJT, KTP)
|
||||
HNJ = (VVS, GCX)
|
||||
JKT = (MMD, MGS)
|
||||
PBP = (TPR, NMQ)
|
||||
CPS = (KNJ, RFZ)
|
||||
RNB = (KHX, FQC)
|
||||
CMF = (LHN, RSQ)
|
||||
HPK = (CCR, LXJ)
|
||||
MFN = (NKQ, CGH)
|
||||
HHB = (QBM, TFN)
|
||||
DDJ = (QSK, KCC)
|
||||
DFM = (RQL, VKX)
|
||||
FKM = (GKQ, VJG)
|
||||
HSJ = (LGQ, LXK)
|
||||
HPT = (KXJ, LNK)
|
||||
BNR = (JBX, DMK)
|
||||
GJL = (CPC, JNF)
|
||||
DFF = (KCQ, KCQ)
|
||||
MCB = (GSS, JVP)
|
||||
CPC = (JJH, FNR)
|
||||
XLR = (MJK, DSM)
|
||||
SBG = (JDG, XFL)
|
||||
XSF = (NJQ, PBQ)
|
||||
NGK = (RFM, FXR)
|
||||
HSN = (GRH, HSJ)
|
||||
LQM = (PQG, VKD)
|
||||
VXN = (VMG, CGM)
|
||||
PSK = (VGT, DTP)
|
||||
JQH = (KLF, SCQ)
|
||||
RJM = (SPC, TVP)
|
||||
VSD = (TLL, TQR)
|
||||
KCN = (GJH, NMS)
|
||||
QHB = (GLM, BMP)
|
||||
FMB = (VLK, XGT)
|
||||
GBT = (DJJ, GSL)
|
||||
LGH = (NGJ, LHJ)
|
||||
SLR = (HDS, TXK)
|
||||
VVQ = (GCX, VVS)
|
||||
MDS = (RCX, KKP)
|
||||
KVQ = (VPN, PJK)
|
||||
CLF = (NHL, KGK)
|
||||
XFK = (KQD, PNT)
|
||||
CJD = (NML, RLM)
|
||||
MCP = (TLM, QLS)
|
||||
SPL = (PGH, VND)
|
||||
GSS = (GPC, DNX)
|
||||
RPH = (DBP, HHC)
|
||||
HNR = (XXQ, JKD)
|
||||
VBV = (VQT, MPJ)
|
||||
PHF = (NQP, SBR)
|
||||
BRP = (FJH, TXC)
|
||||
AAA = (RMT, DHJ)
|
||||
PBQ = (GHQ, NDB)
|
||||
PXG = (VVG, SPN)
|
||||
PNX = (JQV, JNG)
|
||||
XHQ = (SJB, MBS)
|
||||
VBL = (VLF, PXS)
|
||||
VVG = (MTT, XTV)
|
||||
PXS = (GLG, QFX)
|
||||
MMQ = (FKM, HNH)
|
||||
PHG = (HFN, NQT)
|
||||
MFF = (KFL, LNQ)
|
||||
PJM = (FHP, SPX)
|
||||
SMJ = (KQD, KQD)
|
||||
XGC = (CMM, PHF)
|
||||
PDJ = (QCK, MHB)
|
||||
SPN = (MTT, XTV)
|
||||
BPK = (KFP, SPH)
|
||||
MVF = (NQC, NKK)
|
||||
LJB = (LBH, LBH)
|
||||
GQN = (QCK, MHB)
|
||||
NCG = (MTP, PXG)
|
||||
GQL = (VGT, DTP)
|
||||
NCX = (FNH, SHD)
|
||||
HGZ = (QRS, SMR)
|
||||
GMJ = (VSF, SFJ)
|
||||
RFP = (XLP, RBD)
|
||||
TXF = (GDC, HKP)
|
||||
NBA = (SMR, QRS)
|
||||
QTB = (FRL, NCX)
|
||||
QLC = (GDN, QMD)
|
||||
QHV = (SVV, HRM)
|
||||
XTM = (GRV, THT)
|
||||
VPN = (HHN, LTT)
|
||||
RFZ = (XLR, QKM)
|
||||
CMH = (SXG, CLF)
|
||||
GFJ = (TCX, PHG)
|
||||
VTT = (LGM, LFV)
|
||||
RTC = (GKH, KPS)
|
||||
XFJ = (VTQ, SDN)
|
||||
GCX = (PGB, MJD)
|
||||
MJK = (CLP, VML)
|
||||
QQL = (RSG, KTG)
|
||||
NSB = (XHQ, MGQ)
|
||||
HCQ = (LGM, LFV)
|
||||
GQX = (GJD, XKT)
|
||||
RVR = (VVK, BKP)
|
||||
JBG = (KKS, VBH)
|
||||
JFF = (BTV, BTV)
|
||||
BPM = (LNT, KPK)
|
||||
LNQ = (JJR, HGQ)
|
||||
FKK = (GLH, GPQ)
|
||||
SBL = (CDK, BGL)
|
||||
LNT = (BNH, RNS)
|
||||
JRH = (JPS, HFG)
|
||||
VVS = (MJD, PGB)
|
||||
DPP = (LFR, GFQ)
|
||||
MNF = (PBP, VDN)
|
||||
QKM = (DSM, MJK)
|
||||
JPJ = (CXN, RTJ)
|
||||
QGC = (RQP, LBX)
|
||||
CVB = (MND, RCV)
|
||||
RFC = (CHG, FFQ)
|
||||
KPS = (BCF, VSD)
|
||||
XML = (MNV, TXG)
|
||||
JVH = (JDP, GGF)
|
||||
CRC = (XTM, LLQ)
|
||||
VJG = (JRH, LLT)
|
||||
SPB = (JPT, NDM)
|
||||
JGV = (XKX, DNF)
|
||||
GGQ = (XXQ, JKD)
|
||||
XLK = (PGQ, VKB)
|
||||
JBX = (NNX, VRP)
|
||||
RSG = (HNR, GGQ)
|
||||
GVC = (LCT, XNM)
|
||||
XDP = (XML, HND)
|
||||
CXC = (SMQ, NGK)
|
||||
PXV = (TNK, BPG)
|
||||
NDM = (XCR, GQX)
|
||||
CPM = (BJH, QXK)
|
||||
KGK = (LKX, SPS)
|
||||
BLT = (NRL, PQR)
|
||||
BHN = (GLH, GPQ)
|
||||
BLS = (TKL, MNF)
|
||||
PHL = (CDK, BGL)
|
||||
BCX = (DFF, DBX)
|
||||
HNH = (GKQ, VJG)
|
||||
VKD = (NCM, TCF)
|
||||
DSM = (VML, CLP)
|
||||
DNN = (SLT, KJD)
|
||||
SBR = (SKT, JCC)
|
||||
TNL = (BGR, CJD)
|
||||
DFT = (XFL, JDG)
|
||||
MPT = (RKT, MFF)
|
||||
TVQ = (XDP, QBP)
|
||||
LLT = (JPS, HFG)
|
||||
DXQ = (XTM, LLQ)
|
||||
SFM = (PHG, TCX)
|
||||
BNJ = (MND, RCV)
|
||||
PBS = (NHQ, QRB)
|
||||
JXM = (HRF, PKB)
|
||||
VTP = (HPT, GTX)
|
||||
SVV = (XXJ, RHB)
|
||||
MHA = (QQJ, BFC)
|
||||
MBV = (HMQ, MCS)
|
||||
VJJ = (BLT, PNM)
|
||||
QJT = (RVR, CGR)
|
||||
VVN = (LXS, KTC)
|
||||
QKS = (TRC, DFM)
|
||||
MGQ = (MBS, SJB)
|
||||
NDL = (BPT, KRN)
|
||||
JPQ = (SVF, HDT)
|
||||
VDH = (JHR, GCQ)
|
||||
KCQ = (KNJ, KNJ)
|
||||
XJJ = (DFT, SBG)
|
||||
JQV = (MPV, KLR)
|
||||
VQD = (DXQ, CRC)
|
||||
JDG = (TJK, QMH)
|
||||
SPX = (XCF, PPD)
|
||||
LXJ = (TNV, BFM)
|
||||
LBL = (NGQ, JHN)
|
||||
QBN = (QQL, JPP)
|
||||
LFS = (CVB, BNJ)
|
||||
LBS = (JFV, NKC)
|
||||
TLL = (THM, GNR)
|
9
day_8/input_example_1.txt
Normal file
9
day_8/input_example_1.txt
Normal file
@ -0,0 +1,9 @@
|
||||
RL
|
||||
|
||||
AAA = (BBB, CCC)
|
||||
BBB = (DDD, EEE)
|
||||
CCC = (ZZZ, GGG)
|
||||
DDD = (DDD, DDD)
|
||||
EEE = (EEE, EEE)
|
||||
GGG = (GGG, GGG)
|
||||
ZZZ = (ZZZ, ZZZ)
|
5
day_8/input_example_2.txt
Normal file
5
day_8/input_example_2.txt
Normal file
@ -0,0 +1,5 @@
|
||||
LLR
|
||||
|
||||
AAA = (BBB, BBB)
|
||||
BBB = (AAA, ZZZ)
|
||||
ZZZ = (ZZZ, ZZZ)
|
146
day_8/src/lib.rs
Normal file
146
day_8/src/lib.rs
Normal file
@ -0,0 +1,146 @@
|
||||
use core::str::FromStr;
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Eq, Clone)]
|
||||
pub struct DesertMap {
|
||||
pub directions: Vec<HorizontalDirection>,
|
||||
pub nodes: HashMap<String, (String, String)>,
|
||||
}
|
||||
|
||||
impl FromStr for DesertMap {
|
||||
type Err = &'static str;
|
||||
|
||||
/// Parses a string `string` to return a value of [`DesertMap`]
|
||||
///
|
||||
/// If parsing succeeds, return the value inside [`Ok`], otherwise
|
||||
/// when the string is ill-formatted return an error specific to the
|
||||
/// inside [`Err`].
|
||||
///
|
||||
/// # Examples
|
||||
///
|
||||
/// ```
|
||||
/// use std::str::FromStr;
|
||||
/// use std::collections::HashMap;
|
||||
/// use day_8::{DesertMap, HorizontalDirection};
|
||||
///
|
||||
/// let string = "
|
||||
/// RL
|
||||
///
|
||||
/// AAA = (BBB, CCC)
|
||||
/// BBB = (DDD, EEE)
|
||||
/// CCC = (ZZZ, GGG)
|
||||
/// ";
|
||||
/// let expected_result = DesertMap {
|
||||
/// directions: vec![HorizontalDirection::Right, HorizontalDirection::Left],
|
||||
/// nodes: HashMap::from([
|
||||
/// (String::from("AAA"), (String::from("BBB"), String::from("CCC"))),
|
||||
/// (String::from("BBB"), (String::from("DDD"), String::from("EEE"))),
|
||||
/// (String::from("CCC"), (String::from("ZZZ"), String::from("GGG"))),
|
||||
/// ])
|
||||
/// };
|
||||
///
|
||||
/// let actual_result = DesertMap::from_str(string).unwrap();
|
||||
/// assert_eq!(actual_result, expected_result);
|
||||
/// ```
|
||||
fn from_str(string: &str) -> Result<Self, Self::Err> {
|
||||
let mut result = DesertMap::default();
|
||||
let mut lines = string.trim().lines();
|
||||
let first_line = lines.next().unwrap_or_default();
|
||||
for character in first_line.chars() {
|
||||
result.directions.push(HorizontalDirection::from(character));
|
||||
}
|
||||
lines.next();
|
||||
for line in lines {
|
||||
let mut line_splitted = line.split(" = ");
|
||||
let key = line_splitted.next().unwrap_or_default();
|
||||
let values_line = line_splitted
|
||||
.next()
|
||||
.unwrap_or_default()
|
||||
.replace(['(', ')'], "");
|
||||
let mut values_line = values_line.split(", ");
|
||||
let value = (
|
||||
values_line.next().unwrap_or_default().to_string(),
|
||||
values_line.next().unwrap_or_default().to_string(),
|
||||
);
|
||||
result.nodes.insert(key.to_string(), value);
|
||||
}
|
||||
Ok(result)
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Default, PartialEq, Eq, Copy, Clone)]
|
||||
pub enum HorizontalDirection {
|
||||
#[default]
|
||||
Left,
|
||||
Right,
|
||||
}
|
||||
|
||||
impl From<char> for HorizontalDirection {
|
||||
fn from(direction: char) -> Self {
|
||||
if direction == 'R' {
|
||||
return HorizontalDirection::Right;
|
||||
}
|
||||
HorizontalDirection::Left
|
||||
}
|
||||
}
|
||||
|
||||
const KEY_START: &str = "AAA";
|
||||
|
||||
const KEY_END: &str = "ZZZ";
|
||||
|
||||
pub fn part_1(input: &str) -> usize {
|
||||
let desert_map = DesertMap::from_str(input).unwrap_or_default();
|
||||
let mut steps = 0;
|
||||
let mut current_step_key = KEY_START.to_string();
|
||||
let mut current_direction_index: usize = 0;
|
||||
|
||||
while current_step_key != KEY_END {
|
||||
let current_direction = desert_map
|
||||
.directions
|
||||
.get(current_direction_index)
|
||||
.cloned()
|
||||
.unwrap_or_else(|| {
|
||||
current_direction_index = 0;
|
||||
desert_map
|
||||
.directions
|
||||
.get(current_direction_index)
|
||||
.cloned()
|
||||
.unwrap_or_default()
|
||||
});
|
||||
|
||||
let current_step_value = desert_map
|
||||
.nodes
|
||||
.get(¤t_step_key)
|
||||
.cloned()
|
||||
.unwrap_or_default();
|
||||
current_step_key = match current_direction {
|
||||
HorizontalDirection::Left => current_step_value.0.clone(),
|
||||
HorizontalDirection::Right => current_step_value.1.clone(),
|
||||
};
|
||||
|
||||
current_direction_index += 1;
|
||||
steps += 1;
|
||||
}
|
||||
|
||||
steps
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod day_8_tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_part_1_example_1() {
|
||||
assert_eq!(part_1(include_str!("../input_example_1.txt")), 2);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_1_example_2() {
|
||||
assert_eq!(part_1(include_str!("../input_example_2.txt")), 6);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part_1() {
|
||||
assert_eq!(part_1(include_str!("../input.txt")), 15871);
|
||||
}
|
||||
}
|
8
day_8/src/main.rs
Normal file
8
day_8/src/main.rs
Normal file
@ -0,0 +1,8 @@
|
||||
use day_8::part_1;
|
||||
|
||||
fn main() {
|
||||
let input = include_str!("../input.txt");
|
||||
println!("- Day 8: Haunted Wasteland -");
|
||||
println!("Answer Part 1: {}", part_1(input));
|
||||
// println!("Answer Part 2: {}", part_2(input));
|
||||
}
|
Loading…
Reference in New Issue
Block a user