This commit is contained in:
Lea 2023-12-08 13:30:18 +01:00
parent d2b97dd56f
commit e7cbc21a45
Signed by: Lea
GPG key ID: 1BAFFE8347019C42
6 changed files with 892 additions and 0 deletions

14
Cargo.lock generated
View file

@ -70,6 +70,20 @@ version = "0.1.0"
name = "day_7-2" name = "day_7-2"
version = "0.1.0" version = "0.1.0"
[[package]]
name = "day_8-1"
version = "0.1.0"
dependencies = [
"regex",
]
[[package]]
name = "day_8-2"
version = "0.1.0"
dependencies = [
"regex",
]
[[package]] [[package]]
name = "memchr" name = "memchr"
version = "2.6.4" version = "2.6.4"

752
day_8/input.txt Normal file
View file

@ -0,0 +1,752 @@
LLRLLRLRLRRRLLRRRLRRLRLRLRLRLRLRRLRRRLRLLRRLRRLRRRLLRLLRRLLRRRLLLRLRRRLLLLRRRLLRRRLRRLRLLRLRLRRRLRRRLRRLRRLRRLRLLRRRLRRLRRRLLRRRLRLRRLLRRLLRLRLRRLRRLLRLLRRLRLLRRRLLRRRLRRLLRRLRRRLRLRRRLRRLLLRLLRLLRRRLRLRLRLRRLRRRLLLRRRLRRRLRRRLRRLRLRLRLRRRLRRLLRLRRRLRLRLRRLLLRRRR
TFN = (SMC, LQT)
JKL = (XDN, KPK)
JMF = (HGP, QKF)
RJR = (VMR, RRM)
FJS = (RMD, HSP)
QKS = (KDN, KDN)
VTN = (PQR, LVV)
PNS = (SDG, XJF)
RQC = (TDX, DSD)
HSH = (QTK, VDS)
SSM = (NFM, PRT)
FDX = (JJJ, SCZ)
MHS = (PBJ, THP)
DPV = (KXL, STJ)
HVP = (DPV, RGP)
TPN = (TJC, KMC)
TFD = (QVD, DRT)
HQH = (TMT, SXJ)
HGP = (TNG, GMK)
FCC = (HGB, MLQ)
MDJ = (CCH, HMG)
QKF = (GMK, TNG)
DBP = (FNP, TRB)
QNQ = (SKD, HRG)
VGC = (LFV, TVS)
NQD = (PTD, TCM)
GSQ = (PPP, KHS)
LKC = (QKG, TTL)
FDD = (TRX, NKV)
QMG = (QSR, SDR)
SXD = (DNN, KJC)
NXD = (RLB, RLB)
SBP = (PRG, CXT)
XDM = (RKH, VRF)
GHD = (JLX, VXS)
XJV = (VXS, JLX)
GXX = (TDJ, NXP)
DMQ = (SLH, RTD)
SMC = (RFR, DPS)
BBC = (HPF, CJL)
GVZ = (CQJ, HRT)
MMT = (VPH, MGD)
LCQ = (HSH, TPX)
NXC = (NXP, TDJ)
NLL = (VJM, QTP)
NQZ = (CRR, KCL)
KLT = (SFS, PSM)
SDR = (FBB, KGM)
GCS = (HNQ, BDH)
HLJ = (JXV, SPG)
SRP = (XXC, RKP)
QJH = (XDC, DBP)
XJF = (NHT, SLL)
QCD = (RQM, LCQ)
QSS = (KHD, QMG)
XNJ = (FJS, GLF)
PFH = (NSP, HSG)
VVD = (JLQ, VKF)
PNT = (PXQ, CMM)
PJG = (DBP, XDC)
TTL = (LFS, NHL)
GJM = (HVL, GMF)
BGM = (QBK, SKV)
DXD = (GNN, HQH)
JPP = (QHM, DXD)
LPH = (JKS, HBQ)
CDG = (LXQ, KTC)
PLF = (HGG, LRS)
JJP = (SRQ, NQD)
PBH = (CMM, PXQ)
HGD = (XGK, XCL)
NNM = (GTK, XCB)
TFG = (JHM, JMK)
VDQ = (PSM, SFS)
NDP = (CGF, LBM)
CGF = (KVF, TVM)
KDN = (KCL, CRR)
RQM = (HSH, TPX)
JKB = (JPP, VGH)
XDC = (FNP, TRB)
VDF = (BKD, NQQ)
TKN = (VGM, BDK)
NSN = (GJV, SPB)
DSD = (QVK, MVX)
VFX = (PKM, VTN)
FRC = (JBH, BCK)
XKX = (PNS, CVL)
VRF = (QHR, FDX)
JCV = (BGP, BGP)
JRC = (JKV, NBL)
HNQ = (QNQ, HFB)
BMV = (DBV, CFH)
FTC = (PKM, VTN)
KHS = (TFD, VPM)
JQX = (VBL, PPX)
HGM = (NFM, PRT)
BGD = (LCQ, RQM)
PSM = (KJB, SJH)
VXL = (TDB, HGD)
LKT = (LDB, MMT)
RJV = (CJL, HPF)
JBF = (FJC, QHH)
RBV = (QKS, CTD)
GBL = (DCX, JRF)
XVX = (XGT, DCJ)
GSD = (JMG, CVR)
RGP = (STJ, KXL)
HRV = (LPG, DMQ)
VPH = (PQF, KLF)
STP = (NMG, BXH)
TTH = (HMV, NCR)
MLQ = (SFP, GCS)
RCR = (LBM, CGF)
CCB = (HQB, VSQ)
QGL = (RRS, RRS)
HVL = (LDR, CXN)
QKG = (NHL, LFS)
XGN = (HGG, LRS)
JCG = (KBS, QLP)
PVX = (XHG, XPC)
TPD = (TDH, QLT)
XQG = (NXD, KSK)
KHL = (GQX, TSK)
GVF = (VBJ, DJL)
SGB = (XXC, RKP)
RKD = (BNP, PTZ)
QNS = (JKS, HBQ)
JXV = (BQX, PKN)
JVJ = (SRQ, NQD)
VLG = (BJL, MTP)
VLJ = (KBP, VGC)
HQL = (PLF, XGN)
DTR = (SKV, QBK)
GJV = (HLP, DQR)
DTX = (GBQ, XDM)
TDH = (KBL, PRK)
KLF = (RPC, BMG)
LBQ = (NRF, MGJ)
XHG = (FBL, JMF)
CBC = (TNT, TJS)
SVP = (LTD, JQX)
KCC = (NMX, NBF)
NFS = (HVL, GMF)
GMH = (RND, CSJ)
FVF = (QVH, XLR)
NHK = (MQT, HFR)
NBN = (VMR, RRM)
CSD = (CSK, JPS)
VQL = (THK, SXT)
HFB = (SKD, HRG)
KHD = (QSR, SDR)
NLV = (SDB, DDZ)
CNP = (JHX, PDP)
PRK = (KPS, DDS)
CQB = (BBP, GCQ)
PCJ = (JRF, DCX)
HSG = (JCV, NTF)
SXJ = (CML, RKD)
SFP = (HNQ, BDH)
DDZ = (GXX, NXC)
HLR = (NKV, TRX)
BJL = (XPH, MSC)
JFS = (KJC, DNN)
NPH = (TBX, QCG)
KBR = (PJX, GVF)
JQH = (VNT, KBT)
MBX = (PTB, BMR)
NXR = (JBT, KMD)
NCR = (PMB, MJR)
THP = (BRT, FDV)
RNG = (KJN, KTH)
RPC = (PRR, RBC)
XMR = (LSD, BMM)
HMG = (SSM, HGM)
PCH = (QJH, PJG)
MMG = (NBF, NMX)
QBJ = (HNS, JNR)
KBL = (DDS, KPS)
VBJ = (XJV, GHD)
GHT = (CVL, PNS)
VGH = (QHM, DXD)
GTK = (NCX, CCB)
BMR = (GMD, FHH)
FDV = (MBK, VJQ)
BKD = (CBQ, RVM)
QTP = (TXR, FVX)
VBL = (HMR, QFM)
QTK = (TPB, SHF)
RTD = (JRC, RNF)
QFR = (MDP, HTC)
MSF = (CSK, JPS)
PKM = (PQR, LVV)
VHK = (KHD, QMG)
VGL = (BCK, JBH)
VNT = (VKH, NLP)
KXN = (VCN, VPS)
HSP = (TMC, CMT)
LSD = (GHT, XKX)
LGN = (GNL, JDP)
QGC = (QLT, TDH)
NKV = (XPS, LKJ)
DJK = (KTH, KJN)
BCK = (NCF, MCQ)
FDS = (PSD, RBQ)
SCZ = (TDV, FKM)
PGQ = (DSV, NJR)
PTD = (VVD, BTH)
SLK = (SMB, GSQ)
MJR = (DMB, MBC)
BGC = (HRQ, MVB)
XLN = (QSS, VHK)
KFG = (MRB, JQL)
NQB = (TRR, SMV)
FMV = (PBJ, THP)
QGJ = (QQB, KNC)
PQR = (LTS, VDF)
THK = (NCK, DKX)
TDX = (QVK, MVX)
QCN = (DHN, STP)
KJN = (QGX, TQC)
CBS = (QSS, VHK)
DNN = (XQG, HGN)
BQX = (SXD, JFS)
CMT = (JGJ, NRC)
FJC = (FSB, LRK)
TPB = (RSH, TDK)
QXD = (XVX, PPF)
BTH = (VKF, JLQ)
CRR = (FPK, JHT)
CCH = (HGM, SSM)
QSP = (QNS, LPH)
RRS = (TTH, RNK)
RFH = (FCS, DPC)
VMR = (JTC, LCM)
TQC = (MRS, TFN)
CMM = (QCD, BGD)
FBL = (QKF, HGP)
KPD = (SPG, JXV)
CFQ = (TVG, JQN)
DCJ = (VFB, KBR)
PSD = (NNG, HQS)
CVR = (TBJ, JKB)
TMT = (CML, CML)
QHR = (JJJ, JJJ)
PRJ = (MTF, XCG)
JHT = (PHH, LQF)
NGS = (VGC, KBP)
QVK = (SBM, QXD)
RXD = (FXD, QKP)
DBV = (XLM, GLV)
RGG = (NGS, VLJ)
TPT = (GLF, FJS)
HTD = (DJC, FCC)
KFS = (MHS, FMV)
DQR = (QHQ, HVX)
NGX = (RGP, DPV)
PQC = (FVB, SLF)
FCK = (VDG, GVC)
TJS = (MXB, NXS)
RSH = (SLK, PTV)
NCF = (DSM, NSN)
VPM = (QVD, DRT)
MSB = (MKK, CNP)
JHD = (NPH, GCL)
JFN = (HVP, NGX)
SXT = (NCK, DKX)
LTS = (NQQ, BKD)
FSG = (LXQ, KTC)
DCS = (CKH, QVM)
FXR = (VDR, GVZ)
LJV = (PXD, DNT)
NMG = (GTD, JPM)
CVL = (SDG, XJF)
DRL = (PLF, XGN)
QKP = (VQG, BJN)
NNP = (JGK, PQC)
JMG = (TBJ, JKB)
FNV = (QVH, XLR)
KFR = (QKP, FXD)
BRT = (VJQ, MBK)
HTC = (LSP, NLV)
RLB = (QGL, QGL)
LSH = (NLL, NHN)
JQB = (JMG, CVR)
FVT = (NLL, NHN)
NVJ = (RCR, NDP)
CBQ = (NNP, SJR)
VGM = (FRC, VGL)
PCV = (KNG, DMN)
NNG = (QFV, VXL)
SPB = (HLP, DQR)
JKV = (QFG, DCS)
LGM = (XDN, KPK)
QMD = (XQN, LBQ)
GDP = (JPK, VNG)
RXL = (KMC, TJC)
TXR = (QDB, NJT)
QGX = (MRS, TFN)
LDB = (MGD, VPH)
KSK = (RLB, QPS)
RKH = (QHR, QHR)
JPM = (FXH, LPJ)
PPP = (TFD, VPM)
LDR = (TRV, JPF)
HVH = (VFX, FTC)
MRS = (SMC, LQT)
VTL = (RRS, ZZZ)
SGX = (KXN, QGK)
NHL = (DJK, RNG)
VKF = (HLJ, KPD)
JQN = (TPT, XNJ)
MSC = (BGM, DTR)
LCM = (FKN, GHR)
SDG = (NHT, SLL)
QHC = (MSF, CSD)
BPX = (CBS, XLN)
GTD = (LPJ, FXH)
TPX = (VDS, QTK)
KCL = (JHT, FPK)
MMV = (NQB, KQK)
JHV = (GTF, NFK)
FMH = (CBS, XLN)
JBH = (MCQ, NCF)
TMC = (NRC, JGJ)
TVS = (JKL, LGM)
NJC = (QBJ, VRB)
SDB = (NXC, GXX)
PCG = (PFH, LQN)
XPS = (RRK, BMV)
SHF = (RSH, TDK)
GLV = (BGC, BND)
TVM = (HTT, CBK)
PDP = (BBV, QFR)
TBJ = (JPP, VGH)
TTC = (QGJ, KTM)
HPF = (QLM, SDX)
RQX = (LDB, MMT)
NXP = (LQV, PSJ)
MDN = (QGC, TPD)
MQT = (XDT, PCG)
MTH = (KFS, SHQ)
SSK = (PJG, QJH)
CBX = (FCL, TRM)
HRQ = (GNV, VPF)
LQF = (NGH, QCN)
BDH = (HFB, QNQ)
VDR = (HRT, CQJ)
HGG = (DTC, TPL)
JQA = (FKM, TDV)
NFM = (JHV, HHR)
HFR = (PCG, XDT)
NHA = (NXC, GXX)
FHR = (PSD, RBQ)
LMB = (DNT, PXD)
NBL = (DCS, QFG)
CSJ = (LGH, MMV)
NHN = (VJM, QTP)
FCL = (GGN, VLS)
PSG = (QBD, TFC)
HVX = (NCL, KVD)
DJL = (XJV, GHD)
KVF = (HTT, CBK)
VNG = (CBX, XJD)
PJD = (MDJ, PKJ)
KVD = (HCG, PRJ)
SLF = (LVD, HRV)
KQK = (SMV, TRR)
TRR = (PJD, NDQ)
LVL = (CDG, FSG)
NXS = (KDD, LDC)
LRS = (DTC, TPL)
SRQ = (PTD, TCM)
HLP = (QHQ, HVX)
LVD = (LPG, DMQ)
XGK = (LMB, LJV)
JGJ = (BVG, DPF)
SSQ = (SGX, FRK)
TJC = (SVG, GMH)
JKS = (NFS, GJM)
SLL = (TPN, RXL)
JNC = (SSK, PCH)
GGN = (PVX, QJB)
HCG = (MTF, XCG)
VPS = (SSC, NNM)
CQJ = (RGD, KMV)
DPC = (PCJ, GBL)
JGK = (FVB, SLF)
XNP = (LBQ, XQN)
HTT = (CSC, PGQ)
KDJ = (PCV, BTT)
CXN = (JPF, TRV)
HGN = (NXD, KSK)
PTB = (FHH, GMD)
VPF = (NHK, JRS)
FTN = (QBJ, VRB)
PQF = (BMG, RPC)
DSM = (GJV, SPB)
TRV = (JFN, HML)
NTF = (BGP, RBV)
BNP = (HVH, SJL)
SMB = (KHS, PPP)
QFV = (TDB, HGD)
VCN = (NNM, SSC)
PDB = (TTC, KMH)
BBV = (MDP, MDP)
JNR = (FCK, LFC)
PPX = (HMR, QFM)
SMV = (NDQ, PJD)
DBM = (PCH, SSK)
DND = (MRG, JBF)
PHD = (MTH, LNP)
LQN = (NSP, HSG)
TVG = (XNJ, TPT)
RVS = (TFG, GLT)
AAA = (TTH, RNK)
DRT = (GXP, PSG)
KMH = (KTM, QGJ)
GCQ = (BCL, RVS)
MGJ = (KHL, TVF)
XQN = (MGJ, NRF)
GLT = (JHM, JMK)
KNG = (FNV, FVF)
QPX = (DMJ, SVP)
JPL = (LNP, MTH)
QGK = (VPS, VCN)
BGP = (QKS, QKS)
NPG = (SBP, MKL)
XGT = (KBR, VFB)
MXQ = (GCQ, BBP)
VRB = (HNS, JNR)
DJC = (HGB, MLQ)
SBM = (PPF, XVX)
LDC = (KFR, RXD)
BVG = (JQJ, QMH)
XDT = (PFH, LQN)
FPK = (LQF, PHH)
GQX = (PBH, PNT)
JBT = (RQX, LKT)
BBP = (RVS, BCL)
DSV = (NPG, BRB)
PXQ = (BGD, QCD)
GNN = (TMT, TMT)
CSX = (XNG, FXR)
LSL = (CFM, PDB)
HSK = (GBQ, XDM)
FSA = (HVH, SJL)
CTD = (KDN, NQZ)
JLQ = (KPD, HLJ)
LSP = (SDB, SDB)
KTH = (QGX, TQC)
XBX = (MRB, JQL)
PSJ = (JQH, FJF)
DFR = (GDP, DVB)
MKK = (JHX, PDP)
NDQ = (MDJ, PKJ)
FCS = (PCJ, GBL)
MKL = (PRG, CXT)
CDF = (HSK, DTX)
TVF = (TSK, GQX)
NJR = (NPG, BRB)
GMK = (GKS, QSP)
SSB = (DBM, JNC)
QLP = (QDX, DFR)
MFG = (NGS, VLJ)
LGH = (KQK, NQB)
KNC = (SSB, CBL)
TFC = (KLL, SRC)
RFR = (VDQ, KLT)
KMC = (GMH, SVG)
KTM = (KNC, QQB)
QSR = (FBB, KGM)
TCM = (VVD, BTH)
RRM = (LCM, JTC)
DMJ = (LTD, JQX)
XLM = (BGC, BND)
KPS = (VBQ, SHM)
PTZ = (SJL, HVH)
KLL = (KFG, XBX)
XJD = (FCL, TRM)
XPH = (DTR, BGM)
CFM = (KMH, TTC)
JJJ = (FKM, TDV)
VDS = (TPB, SHF)
MKR = (BMR, PTB)
HQB = (LVL, JTQ)
QHH = (LRK, FSB)
LPJ = (NVJ, PHR)
VSQ = (LVL, JTQ)
HNS = (LFC, FCK)
BJN = (MXQ, CQB)
RNF = (NBL, JKV)
SDX = (HLR, FDD)
FVX = (QDB, NJT)
FPV = (XNG, XNG)
JBL = (RQC, KLC)
RMD = (TMC, CMT)
PJX = (VBJ, DJL)
SVG = (RND, CSJ)
XCG = (SBQ, RNV)
TRX = (LKJ, XPS)
HMM = (PLB, LGN)
FKM = (BPX, FMH)
DCX = (QPX, GPQ)
LKJ = (BMV, RRK)
LQT = (RFR, DPS)
MVB = (VPF, GNV)
HQS = (QFV, VXL)
NCK = (PBX, LKC)
PBJ = (BRT, FDV)
LLA = (KCL, CRR)
TRB = (CBC, CPJ)
VQG = (MXQ, CQB)
GKS = (LPH, QNS)
CRK = (RCS, SLV)
FBB = (MMG, KCC)
XQK = (NVL, QHC)
CSC = (DSV, NJR)
JHM = (NJC, FTN)
FNP = (CBC, CPJ)
LXQ = (GGJ, TNJ)
GXP = (QBD, TFC)
KLC = (DSD, TDX)
VKH = (QCC, CRK)
FNK = (FCC, DJC)
KBS = (DFR, QDX)
HGB = (SFP, GCS)
XNG = (VDR, VDR)
MXB = (LDC, KDD)
MBC = (SSQ, PFJ)
BGG = (SXT, THK)
KBT = (VKH, NLP)
XTH = (KLC, RQC)
SJH = (JHD, NPX)
SHQ = (MHS, FMV)
NJT = (NBM, CDF)
QBD = (SRC, KLL)
CPJ = (TNT, TJS)
HRG = (RFH, PNK)
LQV = (JQH, FJF)
LNP = (KFS, SHQ)
VLS = (QJB, PVX)
JRF = (QPX, GPQ)
MVX = (SBM, QXD)
XPC = (FBL, JMF)
MNA = (HRT, CQJ)
RND = (LGH, MMV)
PMB = (DMB, MBC)
LFC = (GVC, VDG)
JTQ = (CDG, FSG)
KBP = (TVS, LFV)
HBQ = (GJM, NFS)
TSK = (PNT, PBH)
FVB = (HRV, LVD)
VJM = (FVX, TXR)
JPF = (HML, JFN)
DVB = (JPK, VNG)
FRK = (KXN, QGK)
GPQ = (DMJ, SVP)
KJC = (XQG, HGN)
QVH = (HTD, FNK)
STJ = (HQL, DRL)
SKD = (RFH, PNK)
GNL = (FVT, LSH)
SLH = (RNF, JRC)
XCL = (LMB, LJV)
NFK = (RGG, MFG)
MRG = (QHH, FJC)
BXH = (JPM, GTD)
VXS = (XGH, CFQ)
HML = (HVP, NGX)
VFB = (PJX, GVF)
NGH = (STP, DHN)
VSP = (VGM, BDK)
FHH = (SNM, VLG)
TNJ = (RKG, NXR)
GBQ = (RKH, RKH)
XDN = (TKN, VSP)
LPG = (RTD, SLH)
JNP = (LKR, HMM)
NSP = (JCV, NTF)
NQQ = (CBQ, RVM)
XCB = (NCX, CCB)
MSM = (NBN, RJR)
BMG = (PRR, RBC)
KMD = (LKT, RQX)
RNK = (HMV, NCR)
CBL = (DBM, JNC)
PKN = (SXD, JFS)
QPS = (QGL, VTL)
QDX = (GDP, DVB)
JQJ = (XNP, QMD)
GHR = (FDS, FHR)
DMN = (FNV, FVF)
RKP = (JQB, GSD)
LFV = (LGM, JKL)
DDS = (VBQ, SHM)
QFM = (JBL, XTH)
BCL = (TFG, GLT)
NBM = (HSK, DTX)
FJF = (KBT, VNT)
LTB = (PDB, CFM)
SHM = (CHT, DND)
DHN = (BXH, NMG)
GNV = (JRS, NHK)
NRC = (DPF, BVG)
BPF = (JVJ, JJP)
HHR = (GTF, NFK)
LTD = (PPX, VBL)
PKJ = (HMG, CCH)
DNT = (MDN, BQC)
TPL = (RJV, BBC)
GLF = (RMD, HSP)
JLX = (CFQ, XGH)
KTC = (GGJ, TNJ)
SRC = (KFG, XBX)
LBM = (TVM, KVF)
PFJ = (FRK, SGX)
QCC = (SLV, RCS)
PXD = (BQC, MDN)
QCG = (BPM, XQK)
RRK = (DBV, CFH)
QQB = (SSB, CBL)
JTP = (KBS, QLP)
JPK = (CBX, XJD)
SJL = (VFX, FTC)
RBC = (LDM, XMR)
SKV = (SGB, SRP)
QSB = (RJR, NBN)
GQG = (CNP, MKK)
TDK = (PTV, SLK)
LFS = (DJK, RNG)
JHX = (BBV, QFR)
PLB = (GNL, JDP)
TDV = (FMH, BPX)
QHQ = (KVD, NCL)
DMB = (SSQ, PFJ)
CXT = (JCG, JTP)
RCS = (LSL, LTB)
MBK = (XXT, JNP)
GPH = (KDJ, TPS)
VDG = (GQG, MSB)
DPS = (VDQ, KLT)
BDK = (VGL, FRC)
TBX = (BPM, XQK)
JMK = (FTN, NJC)
SBQ = (BPF, CXS)
XXC = (GSD, JQB)
JQL = (FPV, CSX)
BTT = (KNG, DMN)
SLV = (LSL, LTB)
SJR = (JGK, PQC)
KDD = (RXD, KFR)
GMF = (LDR, CXN)
CML = (BNP, BNP)
MDP = (LSP, LSP)
NVL = (CSD, MSF)
NLP = (CRK, QCC)
DKX = (LKC, PBX)
CBK = (PGQ, CSC)
NHT = (RXL, TPN)
NMX = (VQL, BGG)
MGD = (KLF, PQF)
TDB = (XCL, XGK)
JDP = (LSH, FVT)
GGJ = (NXR, RKG)
DPF = (QMH, JQJ)
PRR = (LDM, XMR)
PTV = (SMB, GSQ)
PHH = (NGH, QCN)
PPF = (DCJ, XGT)
CHT = (MRG, JBF)
QBK = (SGB, SRP)
BMM = (GHT, XKX)
CJL = (QLM, SDX)
BRB = (SBP, MKL)
QDB = (CDF, NBM)
LDM = (BMM, LSD)
PSH = (KDJ, TPS)
QMH = (XNP, QMD)
QLM = (FDD, HLR)
LKR = (PLB, LGN)
ZZZ = (RNK, TTH)
CXS = (JVJ, JJP)
KPK = (TKN, VSP)
QVM = (MSM, QSB)
SFS = (KJB, SJH)
KGM = (MMG, KCC)
RKG = (KMD, JBT)
MCQ = (NSN, DSM)
QJB = (XPC, XHG)
CFH = (XLM, GLV)
LVV = (LTS, VDF)
XLR = (HTD, FNK)
FXH = (NVJ, PHR)
TRM = (GGN, VLS)
TNG = (QSP, GKS)
HRT = (RGD, KMV)
TPS = (BTT, PCV)
PRT = (HHR, JHV)
QHM = (GNN, HQH)
JTC = (GHR, FKN)
KXL = (DRL, HQL)
KMV = (GPH, PSH)
GTF = (RGG, MFG)
FSB = (MBX, MKR)
XXT = (HMM, LKR)
RBQ = (HQS, NNG)
TDJ = (LQV, PSJ)
MRB = (FPV, FPV)
SNM = (MTP, BJL)
DTC = (BBC, RJV)
NRF = (TVF, KHL)
GCL = (TBX, QCG)
NPX = (NPH, GCL)
PNK = (DPC, FCS)
QVD = (PSG, GXP)
HMV = (MJR, PMB)
MTP = (XPH, MSC)
BQC = (TPD, QGC)
PBX = (TTL, QKG)
RGD = (PSH, GPH)
NCL = (PRJ, HCG)
VBQ = (CHT, DND)
NBF = (BGG, VQL)
KJB = (NPX, JHD)
CSK = (PHD, JPL)
SPG = (BQX, PKN)
FXD = (BJN, VQG)
QFG = (QVM, CKH)
CKH = (MSM, QSB)
JRS = (HFR, MQT)
BPM = (QHC, NVL)
MTF = (RNV, SBQ)
PRG = (JTP, JCG)
JPS = (PHD, JPL)
FKN = (FDS, FHR)
RNV = (CXS, BPF)
NCX = (VSQ, HQB)
VJQ = (XXT, JNP)
PHR = (NDP, RCR)
TNT = (MXB, NXS)
QLT = (PRK, KBL)
LRK = (MBX, MKR)
GVC = (MSB, GQG)
XGH = (JQN, TVG)
BND = (MVB, HRQ)
SSC = (GTK, XCB)
RVM = (NNP, SJR)
HMR = (JBL, XTH)
GMD = (VLG, SNM)

9
day_8/part_1/Cargo.toml Normal file
View file

@ -0,0 +1,9 @@
[package]
name = "day_8-1"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
regex = "1.10.2"

34
day_8/part_1/src/main.rs Normal file
View file

@ -0,0 +1,34 @@
use std::collections::HashMap;
use regex::Regex;
fn main() {
let regex = Regex::new("^(?<key>\\w{3}) = \\((?<left>\\w{3}), (?<right>\\w{3})\\)").unwrap();
let mut input = include_str!("../../input.txt").lines();
let mut nodes: HashMap<&str, [&str; 2]> = HashMap::new();
let instructions = input.next().unwrap();
input.next(); // Skip empty line
for line in input {
let captures = regex.captures(line).unwrap();
nodes.insert(
&captures.name("key").unwrap().as_str(),
[
&captures.name("left").unwrap().as_str(),
&captures.name("right").unwrap().as_str(),
]
);
}
let mut current_node = "AAA";
let mut moves = 0;
while current_node != "ZZZ" {
let instructions_pos = moves % instructions.len();
let instruction = instructions.chars().nth(instructions_pos).unwrap();
current_node = nodes[current_node][if instruction == 'L' { 0 } else { 1 }];
moves += 1;
}
println!("Result: {moves}");
}

9
day_8/part_2/Cargo.toml Normal file
View file

@ -0,0 +1,9 @@
[package]
name = "day_8-2"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
regex = "1.10.2"

74
day_8/part_2/src/main.rs Normal file
View file

@ -0,0 +1,74 @@
use std::collections::HashMap;
use regex::Regex;
// i stole both of these functions from some weird programming blog
fn lcm(first: i64, second: i64) -> i64 {
first * second / gcd(first, second)
}
fn gcd(first: i64, second: i64) -> i64 {
let mut max = first;
let mut min = second;
if min > max {
let val = max;
max = min;
min = val;
}
loop {
let res = max % min;
if res == 0 {
return min;
}
max = min;
min = res;
}
}
fn main() {
let regex = Regex::new("^(?<key>\\w{3}) = \\((?<left>\\w{3}), (?<right>\\w{3})\\)").unwrap();
let mut input = include_str!("../../input.txt").lines();
let mut nodes: HashMap<&str, [&str; 2]> = HashMap::new();
let instructions = input.next().unwrap();
input.next(); // Skip empty line
for line in input {
let captures = regex.captures(line).unwrap();
nodes.insert(
&captures.name("key").unwrap().as_str(),
[
&captures.name("left").unwrap().as_str(),
&captures.name("right").unwrap().as_str(),
]
);
}
let mut current_nodes: Vec<&str> = nodes
.clone()
.into_iter()
.map(|node| node.0)
.filter(|node| node.ends_with('A'))
.collect();
let mut move_counts: Vec<i32> = Vec::new();
for i in 0..current_nodes.len() {
let mut moves = 0;
while !current_nodes[i].ends_with("Z") {
let instructions_pos = moves % instructions.len();
let instruction = instructions.chars().nth(instructions_pos).unwrap();
current_nodes[i] = nodes[current_nodes[i]][if instruction == 'L' { 0 } else { 1 }];
moves += 1;
}
move_counts.push(moves as i32);
}
let mut result: i64 = move_counts.remove(0) as i64;
for m in move_counts {
result = lcm(result, m.into());
}
println!("Result: {result}");
}