mirror of
				https://github.com/theoludwig/advent_of_code.git
				synced 2025-09-11 23:11:18 +02:00 
			
		
		
		
	feat: add day 8 - part 1
This commit is contained in:
		
							
								
								
									
										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)); | ||||
| } | ||||
		Reference in New Issue
	
	Block a user