Compare commits
No commits in common. "094d48df8468cbe93fe3e9fda4d046377a42d2c7" and "8f6aa7fcc71c7af6d19db707745936ba292d003e" have entirely different histories.
094d48df84
...
8f6aa7fcc7
2 changed files with 0 additions and 886 deletions
668
inputs/day8.txt
668
inputs/day8.txt
|
@ -1,668 +0,0 @@
|
||||||
LRRLRRRLRRLLLRLLRRLRRLLRRRLRRLLRLRRRLRLRRLRLRRRLRLRLRRLLRLRLRRLRRRLRRRLRRRLRLRRLLLLRLLRLLRRLRRRLLLRLRRRLRLRRRLRLRRLRRRLRRRLRLRLLRRRLLRLLRLRLRLRLLRRLRRLRRRLRRLRLRLRLRLRRLRRRLLRRRLLRLLLRRRLLRRRLRRRLRRLRLRRLRLLRRLLRRLRLRLRRLRLRRLLRRRLLRRRLLRLRRRLRLRRRLRLRRRLRRRLRRLRRLRRLLRRRLRRRLLLRRRR
|
|
||||||
|
|
||||||
RGT = (HDG, QJV)
|
|
||||||
QDM = (GPB, SXG)
|
|
||||||
DJN = (TQD, BQN)
|
|
||||||
QGG = (GGS, PTC)
|
|
||||||
FJP = (MPB, HFP)
|
|
||||||
KNB = (QHC, XBQ)
|
|
||||||
RGR = (LSQ, LJV)
|
|
||||||
HDP = (RLT, LRK)
|
|
||||||
DBQ = (KTM, MPJ)
|
|
||||||
QSG = (QVF, QVF)
|
|
||||||
JKR = (XTK, RQB)
|
|
||||||
BJH = (VKC, SML)
|
|
||||||
LRF = (NPJ, HKK)
|
|
||||||
JRD = (BQX, LGK)
|
|
||||||
HVD = (CJP, TLM)
|
|
||||||
VCG = (JMS, RJB)
|
|
||||||
PCT = (KJC, RCQ)
|
|
||||||
DRK = (PTR, FSH)
|
|
||||||
BJN = (GVD, XXN)
|
|
||||||
CXL = (FMB, NKM)
|
|
||||||
TVM = (TTX, RCG)
|
|
||||||
PTP = (KQQ, XLR)
|
|
||||||
CKX = (VKR, RDH)
|
|
||||||
TCP = (TPX, BSB)
|
|
||||||
KSC = (JFL, CHL)
|
|
||||||
DTF = (BTQ, TTQ)
|
|
||||||
GFQ = (HKK, NPJ)
|
|
||||||
BKD = (CXB, JSB)
|
|
||||||
DJB = (TMG, DDQ)
|
|
||||||
CQV = (SSX, DFT)
|
|
||||||
BPC = (KNR, CGF)
|
|
||||||
KLT = (BMF, XQC)
|
|
||||||
NLB = (DBD, VCL)
|
|
||||||
HJS = (FXK, FLB)
|
|
||||||
PSL = (PBC, XFX)
|
|
||||||
LVL = (JFD, RJD)
|
|
||||||
JMX = (CGG, RRL)
|
|
||||||
TTQ = (XVC, RCT)
|
|
||||||
NLG = (FXK, FLB)
|
|
||||||
LCD = (JSB, CXB)
|
|
||||||
HVR = (CRV, HHM)
|
|
||||||
HGV = (VCG, JDT)
|
|
||||||
LND = (TTL, QCH)
|
|
||||||
CSX = (DHS, JLB)
|
|
||||||
BRJ = (BCT, XFS)
|
|
||||||
XVN = (RDH, VKR)
|
|
||||||
HQB = (BVD, GPC)
|
|
||||||
PGP = (CFB, HQL)
|
|
||||||
NFB = (BDX, JDK)
|
|
||||||
HJK = (VVX, HTP)
|
|
||||||
KKB = (NSF, GPP)
|
|
||||||
JDV = (XJG, FDR)
|
|
||||||
VGC = (HFV, JMT)
|
|
||||||
BBG = (GTF, KTP)
|
|
||||||
HTB = (BTC, KKC)
|
|
||||||
KPL = (MXJ, MBN)
|
|
||||||
NHD = (GCT, TGP)
|
|
||||||
DMP = (KRH, SPM)
|
|
||||||
LRB = (GNP, GGB)
|
|
||||||
BGA = (MPB, HFP)
|
|
||||||
PBZ = (KXQ, CKP)
|
|
||||||
BQF = (LJC, VGC)
|
|
||||||
KKC = (DJB, MCS)
|
|
||||||
RRL = (QCK, RKN)
|
|
||||||
PDZ = (RGF, BHL)
|
|
||||||
SLA = (BCD, VJK)
|
|
||||||
XRC = (SKL, VBP)
|
|
||||||
HHM = (HSJ, NTR)
|
|
||||||
BNP = (GPP, NSF)
|
|
||||||
GHM = (HLC, KQK)
|
|
||||||
LMV = (VTS, NFQ)
|
|
||||||
QKF = (JNG, THN)
|
|
||||||
PCG = (HSQ, DMP)
|
|
||||||
CKG = (XSX, RDF)
|
|
||||||
RMV = (FQL, HJL)
|
|
||||||
LPG = (RJD, JFD)
|
|
||||||
HFJ = (VQX, LQZ)
|
|
||||||
QRF = (BCR, VSV)
|
|
||||||
JSR = (BJJ, DVJ)
|
|
||||||
TKS = (KTP, GTF)
|
|
||||||
JNG = (DJD, XLM)
|
|
||||||
XDG = (JKR, MRR)
|
|
||||||
PFB = (QLT, PBD)
|
|
||||||
NTR = (HBV, NRX)
|
|
||||||
NMN = (BDX, JDK)
|
|
||||||
MGP = (QMT, VLG)
|
|
||||||
PTA = (LSP, TXX)
|
|
||||||
CRK = (CJP, TLM)
|
|
||||||
NVL = (STQ, QFH)
|
|
||||||
VCL = (XFD, MGN)
|
|
||||||
LJM = (VJH, NXV)
|
|
||||||
GCJ = (RFS, QLN)
|
|
||||||
NSF = (TKV, LKQ)
|
|
||||||
PQN = (QHC, XBQ)
|
|
||||||
GHK = (FNT, LCX)
|
|
||||||
SFK = (FQL, HJL)
|
|
||||||
FNX = (VXK, BJN)
|
|
||||||
SSX = (MGK, KRX)
|
|
||||||
FSH = (FNB, QFL)
|
|
||||||
XFS = (BCK, CKG)
|
|
||||||
VLQ = (XJV, HLM)
|
|
||||||
JLB = (MMR, HMQ)
|
|
||||||
GXX = (HLN, SGX)
|
|
||||||
PKX = (QKF, SHQ)
|
|
||||||
VND = (CDN, VVH)
|
|
||||||
HJG = (FXR, VDR)
|
|
||||||
GGR = (QRF, JMB)
|
|
||||||
BQG = (CRV, HHM)
|
|
||||||
RFS = (BHN, MNL)
|
|
||||||
CSK = (DCX, VXG)
|
|
||||||
RSL = (XCG, JGV)
|
|
||||||
KRH = (CKX, XVN)
|
|
||||||
VBP = (NLF, TVM)
|
|
||||||
AAA = (MQQ, VHH)
|
|
||||||
BVX = (LPG, LVL)
|
|
||||||
QCG = (JKJ, CDR)
|
|
||||||
JMQ = (HLR, GGT)
|
|
||||||
NLF = (RCG, TTX)
|
|
||||||
CXB = (NLG, HJS)
|
|
||||||
VXG = (SDN, FCJ)
|
|
||||||
XFT = (GNP, GGB)
|
|
||||||
SST = (GGS, PTC)
|
|
||||||
NNK = (PTD, HPF)
|
|
||||||
RKN = (XVF, MMX)
|
|
||||||
TGP = (SSN, MRT)
|
|
||||||
TSR = (SFK, RMV)
|
|
||||||
GBL = (NKQ, KVH)
|
|
||||||
NKJ = (CGM, TCP)
|
|
||||||
KVH = (VTK, GKV)
|
|
||||||
VBB = (DXX, JVB)
|
|
||||||
KGC = (HMK, TFL)
|
|
||||||
PNL = (QLT, PBD)
|
|
||||||
TNG = (QSG, TPL)
|
|
||||||
HCV = (KVR, PKK)
|
|
||||||
RBB = (TKG, CQK)
|
|
||||||
BJJ = (GCN, PLQ)
|
|
||||||
JRF = (DHC, XCQ)
|
|
||||||
FLJ = (CKP, KXQ)
|
|
||||||
KVR = (DJS, NKJ)
|
|
||||||
HGT = (KVX, LTP)
|
|
||||||
MGN = (JDS, LNS)
|
|
||||||
FRC = (QLM, FHJ)
|
|
||||||
MBN = (TRQ, MRD)
|
|
||||||
TMG = (CTD, SFH)
|
|
||||||
TNT = (JDG, HGV)
|
|
||||||
DXP = (SSX, DFT)
|
|
||||||
VVD = (JXJ, PGP)
|
|
||||||
CHL = (XSL, SNZ)
|
|
||||||
CGS = (GFQ, LRF)
|
|
||||||
BHL = (FNQ, HFD)
|
|
||||||
XHF = (NHD, PQC)
|
|
||||||
PMH = (CNS, SVM)
|
|
||||||
VKR = (TBT, TLT)
|
|
||||||
LLK = (TQD, BQN)
|
|
||||||
LVJ = (PDD, LML)
|
|
||||||
JPB = (PRK, VCV)
|
|
||||||
HSJ = (HBV, NRX)
|
|
||||||
VJH = (DTL, BRL)
|
|
||||||
SNJ = (DXP, CQV)
|
|
||||||
HQL = (KDL, QFN)
|
|
||||||
XHM = (HVG, ZZZ)
|
|
||||||
RDX = (KTM, MPJ)
|
|
||||||
MQQ = (LSC, DGG)
|
|
||||||
TMM = (GMQ, RTL)
|
|
||||||
JKP = (LRF, GFQ)
|
|
||||||
TKG = (BDN, BDN)
|
|
||||||
FBJ = (HLR, GGT)
|
|
||||||
PTD = (LMV, QBR)
|
|
||||||
FMB = (DQT, RRH)
|
|
||||||
TTX = (LVJ, FXX)
|
|
||||||
BXL = (BTQ, TTQ)
|
|
||||||
QMV = (GND, FGG)
|
|
||||||
HFD = (TBQ, VVD)
|
|
||||||
NFQ = (PMH, DMM)
|
|
||||||
RTH = (TPG, VDP)
|
|
||||||
VHH = (DGG, LSC)
|
|
||||||
HLN = (SPP, SPP)
|
|
||||||
XQD = (PNL, PFB)
|
|
||||||
GVD = (BPC, JJG)
|
|
||||||
XRN = (DHJ, LBD)
|
|
||||||
GNP = (NRC, NRC)
|
|
||||||
JLC = (JHB, DRK)
|
|
||||||
LGK = (BSK, BRV)
|
|
||||||
BSB = (MBM, XHF)
|
|
||||||
PBJ = (FRC, RFH)
|
|
||||||
DRH = (VMR, XVK)
|
|
||||||
RDF = (BHV, NGM)
|
|
||||||
MMR = (HGD, PBJ)
|
|
||||||
RGF = (HFD, FNQ)
|
|
||||||
HTR = (RCQ, KJC)
|
|
||||||
NGM = (FJP, LCZ)
|
|
||||||
PJF = (QKF, SHQ)
|
|
||||||
BCK = (XSX, XSX)
|
|
||||||
PBD = (SXM, HTT)
|
|
||||||
VCV = (GRD, VVT)
|
|
||||||
TFL = (CCX, HQB)
|
|
||||||
THT = (NXX, TSR)
|
|
||||||
JMS = (RCF, XRC)
|
|
||||||
FKG = (XRN, PHG)
|
|
||||||
TBQ = (PGP, JXJ)
|
|
||||||
SML = (TCH, DPF)
|
|
||||||
RJB = (RCF, XRC)
|
|
||||||
KJC = (LND, JNR)
|
|
||||||
HPT = (DLM, MVH)
|
|
||||||
NKM = (DQT, RRH)
|
|
||||||
JSJ = (QFH, STQ)
|
|
||||||
KJJ = (XXT, DBC)
|
|
||||||
FGG = (HPT, GMM)
|
|
||||||
RFH = (QLM, FHJ)
|
|
||||||
TLM = (DKN, QGH)
|
|
||||||
MJV = (QSG, TPL)
|
|
||||||
DHG = (RGT, CVS)
|
|
||||||
BVB = (QLJ, SNR)
|
|
||||||
RMH = (JKR, MRR)
|
|
||||||
XFX = (SNJ, QBD)
|
|
||||||
LNS = (SFQ, GGR)
|
|
||||||
QJV = (LRB, XFT)
|
|
||||||
BHV = (FJP, FJP)
|
|
||||||
JMT = (BJM, NPC)
|
|
||||||
BDN = (JFL, JFL)
|
|
||||||
CHC = (CXL, SXC)
|
|
||||||
VBN = (VBB, CFM)
|
|
||||||
SFQ = (QRF, JMB)
|
|
||||||
XXN = (JJG, BPC)
|
|
||||||
MCS = (TMG, DDQ)
|
|
||||||
CFV = (DHG, NKS)
|
|
||||||
FXK = (JSR, GLR)
|
|
||||||
JMB = (VSV, BCR)
|
|
||||||
VVT = (LST, GCJ)
|
|
||||||
VRL = (DJN, LLK)
|
|
||||||
XLB = (FGJ, PGB)
|
|
||||||
JVC = (XXT, DBC)
|
|
||||||
VQX = (BCD, VJK)
|
|
||||||
DVJ = (GCN, PLQ)
|
|
||||||
BTQ = (RCT, XVC)
|
|
||||||
LCX = (JHK, KPL)
|
|
||||||
FSD = (NNC, XLX)
|
|
||||||
TSQ = (FKM, HFJ)
|
|
||||||
HGD = (RFH, FRC)
|
|
||||||
HJL = (JDV, LNV)
|
|
||||||
FSB = (DBD, VCL)
|
|
||||||
DCX = (SDN, FCJ)
|
|
||||||
BHH = (JPK, GVQ)
|
|
||||||
JHB = (PTR, FSH)
|
|
||||||
THP = (SXC, CXL)
|
|
||||||
LRK = (QCT, FPT)
|
|
||||||
PTC = (LMF, DLF)
|
|
||||||
DHS = (HMQ, MMR)
|
|
||||||
GDK = (SNR, QLJ)
|
|
||||||
CNJ = (JKJ, CDR)
|
|
||||||
SBM = (BCT, XFS)
|
|
||||||
GJP = (RJK, DDX)
|
|
||||||
DFT = (KRX, MGK)
|
|
||||||
XBQ = (BNP, KKB)
|
|
||||||
FGJ = (VRL, CKV)
|
|
||||||
QVF = (XTM, XTM)
|
|
||||||
VJK = (BFB, CKT)
|
|
||||||
VJX = (BKD, LCD)
|
|
||||||
KQK = (GBL, HPK)
|
|
||||||
KKX = (BDC, SKC)
|
|
||||||
CRV = (HSJ, NTR)
|
|
||||||
JNR = (QCH, TTL)
|
|
||||||
HTG = (NQK, GJP)
|
|
||||||
QLN = (MNL, BHN)
|
|
||||||
GMB = (VVX, HTP)
|
|
||||||
JDG = (JDT, VCG)
|
|
||||||
QLT = (HTT, SXM)
|
|
||||||
CLK = (VJB, SRH)
|
|
||||||
GSX = (XKX, RSL)
|
|
||||||
MQX = (RTH, LPL)
|
|
||||||
ZZZ = (VHH, MQQ)
|
|
||||||
PKK = (DJS, NKJ)
|
|
||||||
MJT = (MQX, HTF)
|
|
||||||
GLT = (TCD, HXV)
|
|
||||||
PQX = (TGQ, JBF)
|
|
||||||
VSX = (LTP, KVX)
|
|
||||||
FSV = (FKG, NLC)
|
|
||||||
FKR = (CQD, JPR)
|
|
||||||
CKT = (RDX, DBQ)
|
|
||||||
JFD = (TKS, BBG)
|
|
||||||
CNM = (TBH, XRF)
|
|
||||||
PBC = (SNJ, QBD)
|
|
||||||
MRT = (QCG, CNJ)
|
|
||||||
RCQ = (JNR, LND)
|
|
||||||
JJG = (KNR, CGF)
|
|
||||||
CFP = (JVT, GSX)
|
|
||||||
BTG = (SBM, BRJ)
|
|
||||||
BJM = (CRK, HVD)
|
|
||||||
XVK = (CDS, BQF)
|
|
||||||
BCT = (BCK, CKG)
|
|
||||||
LST = (RFS, QLN)
|
|
||||||
DNM = (VMR, XVK)
|
|
||||||
GPB = (GNX, DJV)
|
|
||||||
FDR = (FTG, LFQ)
|
|
||||||
LCZ = (HFP, MPB)
|
|
||||||
XJV = (FCP, JHV)
|
|
||||||
HQC = (TRG, SCP)
|
|
||||||
RMD = (QMV, NNH)
|
|
||||||
SRH = (FLL, QKV)
|
|
||||||
QBD = (CQV, DXP)
|
|
||||||
RRH = (NCB, TSQ)
|
|
||||||
XVF = (NFB, NMN)
|
|
||||||
QMT = (GLT, NTS)
|
|
||||||
GBX = (TKG, CQK)
|
|
||||||
MFP = (TLH, QXD)
|
|
||||||
XKG = (MHN, NLR)
|
|
||||||
HQH = (HPF, PTD)
|
|
||||||
LLR = (CNR, CRF)
|
|
||||||
LSP = (SVQ, VJX)
|
|
||||||
HSH = (LRK, RLT)
|
|
||||||
TTL = (FKR, QMF)
|
|
||||||
CFB = (KDL, QFN)
|
|
||||||
SXG = (GNX, DJV)
|
|
||||||
LTP = (KJJ, JVC)
|
|
||||||
HSQ = (SPM, KRH)
|
|
||||||
SHG = (DRH, DNM)
|
|
||||||
DHJ = (QXR, GHK)
|
|
||||||
GGK = (PRK, VCV)
|
|
||||||
TRG = (PJN, CFV)
|
|
||||||
TTF = (LJV, LSQ)
|
|
||||||
VVH = (HSH, HDP)
|
|
||||||
QXR = (FNT, LCX)
|
|
||||||
DTL = (FSV, VQV)
|
|
||||||
KVX = (JVC, KJJ)
|
|
||||||
HLR = (BTG, MKN)
|
|
||||||
XCG = (QTJ, HTQ)
|
|
||||||
LML = (JMQ, FBJ)
|
|
||||||
FMS = (XTM, VXJ)
|
|
||||||
CTD = (JHQ, XLB)
|
|
||||||
TCD = (CSK, GLS)
|
|
||||||
MRR = (RQB, XTK)
|
|
||||||
SSN = (CNJ, QCG)
|
|
||||||
VLG = (NTS, GLT)
|
|
||||||
JDT = (JMS, RJB)
|
|
||||||
TPJ = (XFX, PBC)
|
|
||||||
PDD = (FBJ, JMQ)
|
|
||||||
QLJ = (NVL, JSJ)
|
|
||||||
TVX = (JPB, GGK)
|
|
||||||
QCT = (GBX, RBB)
|
|
||||||
GMM = (DLM, MVH)
|
|
||||||
RLT = (QCT, FPT)
|
|
||||||
PFH = (HTG, DNF)
|
|
||||||
DQN = (XCQ, DHC)
|
|
||||||
XQC = (QJQ, JLC)
|
|
||||||
QCH = (FKR, QMF)
|
|
||||||
GMQ = (KPJ, RTF)
|
|
||||||
HVJ = (QMV, NNH)
|
|
||||||
VDP = (TVX, VFB)
|
|
||||||
NXV = (DTL, BRL)
|
|
||||||
JHK = (MXJ, MBN)
|
|
||||||
JPK = (GQN, MFP)
|
|
||||||
SSH = (KQK, HLC)
|
|
||||||
FNB = (GPS, LLR)
|
|
||||||
HTP = (SPG, CSX)
|
|
||||||
HHN = (DNF, HTG)
|
|
||||||
QJQ = (JHB, DRK)
|
|
||||||
PFC = (KRJ, JLV)
|
|
||||||
HFP = (JRD, MMT)
|
|
||||||
HGC = (QCJ, CXG)
|
|
||||||
KLG = (BVX, QSM)
|
|
||||||
LHG = (HLM, XJV)
|
|
||||||
CGG = (QCK, RKN)
|
|
||||||
XVC = (CGS, JKP)
|
|
||||||
FCJ = (TMM, MBL)
|
|
||||||
KLC = (CDN, VVH)
|
|
||||||
CRF = (LVG, FNX)
|
|
||||||
PBP = (GSX, JVT)
|
|
||||||
GLS = (DCX, VXG)
|
|
||||||
DJD = (QGG, SST)
|
|
||||||
BJV = (DMP, HSQ)
|
|
||||||
MNL = (JSG, LNC)
|
|
||||||
DNF = (NQK, GJP)
|
|
||||||
NLR = (SSH, GHM)
|
|
||||||
HSP = (JBF, TGQ)
|
|
||||||
NRX = (DTX, CJK)
|
|
||||||
VVX = (CSX, SPG)
|
|
||||||
LSC = (DCL, QBB)
|
|
||||||
VXJ = (FLJ, PBZ)
|
|
||||||
CDR = (NXN, NMT)
|
|
||||||
SGM = (NXV, VJH)
|
|
||||||
XSX = (BHV, BHV)
|
|
||||||
MGK = (FXG, XTG)
|
|
||||||
VPC = (SKC, BDC)
|
|
||||||
HBV = (CJK, DTX)
|
|
||||||
RQB = (PCT, HTR)
|
|
||||||
FXR = (HKP, LVP)
|
|
||||||
BRL = (FSV, VQV)
|
|
||||||
VXK = (GVD, XXN)
|
|
||||||
SDN = (MBL, TMM)
|
|
||||||
FCP = (HXD, SHG)
|
|
||||||
XTG = (KLT, SPX)
|
|
||||||
LBD = (GHK, QXR)
|
|
||||||
JHQ = (FGJ, PGB)
|
|
||||||
XXT = (KNB, PQN)
|
|
||||||
VKC = (TCH, DPF)
|
|
||||||
GQN = (QXD, TLH)
|
|
||||||
HLM = (JHV, FCP)
|
|
||||||
JDK = (TTF, RGR)
|
|
||||||
VTS = (PMH, DMM)
|
|
||||||
VMR = (CDS, BQF)
|
|
||||||
XJA = (BHL, RGF)
|
|
||||||
MMS = (NLR, MHN)
|
|
||||||
DPF = (PQX, HSP)
|
|
||||||
NNH = (FGG, GND)
|
|
||||||
JSB = (NLG, HJS)
|
|
||||||
XLR = (GMB, HJK)
|
|
||||||
RCF = (VBP, SKL)
|
|
||||||
JPD = (HTF, MQX)
|
|
||||||
CJP = (DKN, QGH)
|
|
||||||
BLC = (HGV, JDG)
|
|
||||||
FTG = (PSL, TPJ)
|
|
||||||
JDS = (SFQ, GGR)
|
|
||||||
FQL = (JDV, LNV)
|
|
||||||
JBF = (CHC, THP)
|
|
||||||
HVG = (MQQ, VHH)
|
|
||||||
LKQ = (NLX, HHX)
|
|
||||||
KRX = (FXG, XTG)
|
|
||||||
JNA = (CKP, KXQ)
|
|
||||||
JPR = (CGD, BJH)
|
|
||||||
CJK = (MSQ, HCV)
|
|
||||||
QSM = (LVL, LPG)
|
|
||||||
BQN = (PCG, BJV)
|
|
||||||
SFH = (XLB, JHQ)
|
|
||||||
XLD = (QNN, LVC)
|
|
||||||
GTF = (HTB, RQV)
|
|
||||||
BMF = (QJQ, JLC)
|
|
||||||
THN = (XLM, DJD)
|
|
||||||
VPB = (FXR, VDR)
|
|
||||||
RQX = (XQD, JDL)
|
|
||||||
LNV = (XJG, FDR)
|
|
||||||
NXN = (DSS, KMF)
|
|
||||||
QTJ = (DKR, KLG)
|
|
||||||
VSV = (KHH, FSD)
|
|
||||||
DBD = (MGN, XFD)
|
|
||||||
DHC = (PHH, HQC)
|
|
||||||
QGH = (VBN, DPJ)
|
|
||||||
NTS = (TCD, HXV)
|
|
||||||
BSK = (BQG, HVR)
|
|
||||||
MRD = (VPB, HJG)
|
|
||||||
BQX = (BSK, BRV)
|
|
||||||
BRV = (BQG, HVR)
|
|
||||||
SVM = (PKX, PJF)
|
|
||||||
KRJ = (NMC, TBX)
|
|
||||||
GTH = (HVG, HVG)
|
|
||||||
SCP = (PJN, CFV)
|
|
||||||
CGF = (VFD, GXX)
|
|
||||||
SHQ = (THN, JNG)
|
|
||||||
JVT = (XKX, RSL)
|
|
||||||
RJK = (RVD, CLK)
|
|
||||||
MKN = (SBM, BRJ)
|
|
||||||
JHV = (HXD, SHG)
|
|
||||||
TLT = (JRF, DQN)
|
|
||||||
QBR = (NFQ, VTS)
|
|
||||||
CNR = (FNX, LVG)
|
|
||||||
LVG = (BJN, VXK)
|
|
||||||
FCQ = (BHL, RGF)
|
|
||||||
JXJ = (CFB, HQL)
|
|
||||||
DJV = (BXL, DTF)
|
|
||||||
DTX = (HCV, MSQ)
|
|
||||||
JLV = (NMC, TBX)
|
|
||||||
STQ = (RMH, XDG)
|
|
||||||
NQK = (DDX, RJK)
|
|
||||||
KTP = (RQV, HTB)
|
|
||||||
RLP = (JDL, XQD)
|
|
||||||
TQD = (PCG, BJV)
|
|
||||||
GGT = (MKN, BTG)
|
|
||||||
VJB = (FLL, QKV)
|
|
||||||
JVB = (MJT, JPD)
|
|
||||||
VQV = (FKG, NLC)
|
|
||||||
FXG = (KLT, SPX)
|
|
||||||
XFD = (LNS, JDS)
|
|
||||||
NKS = (CVS, RGT)
|
|
||||||
QFL = (GPS, LLR)
|
|
||||||
CDN = (HSH, HDP)
|
|
||||||
RTL = (RTF, KPJ)
|
|
||||||
CCX = (GPC, BVD)
|
|
||||||
CXG = (THT, VVN)
|
|
||||||
GRC = (CGG, RRL)
|
|
||||||
MXJ = (TRQ, MRD)
|
|
||||||
SXM = (HQH, NNK)
|
|
||||||
LJV = (SMP, VRJ)
|
|
||||||
RJD = (TKS, BBG)
|
|
||||||
HMQ = (PBJ, HGD)
|
|
||||||
MSQ = (KVR, PKK)
|
|
||||||
GPS = (CNR, CRF)
|
|
||||||
FNT = (KPL, JHK)
|
|
||||||
HDG = (LRB, XFT)
|
|
||||||
LFQ = (PSL, TPJ)
|
|
||||||
VFD = (HLN, SGX)
|
|
||||||
SKC = (CFP, PBP)
|
|
||||||
TKV = (HHX, NLX)
|
|
||||||
GPP = (TKV, LKQ)
|
|
||||||
JSG = (PFH, HHN)
|
|
||||||
BCD = (CKT, BFB)
|
|
||||||
MPJ = (HVJ, RMD)
|
|
||||||
GCT = (MRT, SSN)
|
|
||||||
XTM = (FLJ, FLJ)
|
|
||||||
DKN = (DPJ, VBN)
|
|
||||||
SVN = (VLG, QMT)
|
|
||||||
LQZ = (VJK, BCD)
|
|
||||||
PHS = (GPB, SXG)
|
|
||||||
XCQ = (HQC, PHH)
|
|
||||||
QNN = (FCQ, FCQ)
|
|
||||||
DMM = (CNS, SVM)
|
|
||||||
DBC = (PQN, KNB)
|
|
||||||
JFL = (XSL, XSL)
|
|
||||||
MBL = (RTL, GMQ)
|
|
||||||
VTK = (MGP, SVN)
|
|
||||||
SKL = (TVM, NLF)
|
|
||||||
HXD = (DRH, DNM)
|
|
||||||
GNX = (DTF, BXL)
|
|
||||||
XLM = (SST, QGG)
|
|
||||||
QMF = (CQD, JPR)
|
|
||||||
HMK = (HQB, CCX)
|
|
||||||
MMT = (BQX, LGK)
|
|
||||||
PJN = (DHG, NKS)
|
|
||||||
DGG = (DCL, QBB)
|
|
||||||
SPX = (XQC, BMF)
|
|
||||||
MHN = (SSH, GHM)
|
|
||||||
RDH = (TLT, TBT)
|
|
||||||
NMC = (KKX, VPC)
|
|
||||||
GKV = (SVN, MGP)
|
|
||||||
XSL = (LSP, TXX)
|
|
||||||
TGQ = (THP, CHC)
|
|
||||||
TRQ = (HJG, VPB)
|
|
||||||
VHK = (KRJ, JLV)
|
|
||||||
TPX = (MBM, XHF)
|
|
||||||
QXD = (QDM, PHS)
|
|
||||||
VRJ = (GDK, BVB)
|
|
||||||
KXQ = (RLP, RQX)
|
|
||||||
CNS = (PKX, PJF)
|
|
||||||
TPG = (TVX, VFB)
|
|
||||||
PTR = (QFL, FNB)
|
|
||||||
QHC = (KKB, BNP)
|
|
||||||
CDS = (VGC, LJC)
|
|
||||||
BTC = (MCS, DJB)
|
|
||||||
NLC = (PHG, XRN)
|
|
||||||
BDC = (CFP, PBP)
|
|
||||||
FPT = (GBX, RBB)
|
|
||||||
CQD = (BJH, CGD)
|
|
||||||
XKX = (JGV, XCG)
|
|
||||||
TXX = (VJX, SVQ)
|
|
||||||
SPP = (GTH, GTH)
|
|
||||||
KTM = (HVJ, RMD)
|
|
||||||
JGV = (HTQ, QTJ)
|
|
||||||
HKP = (KLC, VND)
|
|
||||||
GLR = (DVJ, BJJ)
|
|
||||||
LMF = (LHG, VLQ)
|
|
||||||
CLG = (TFL, HMK)
|
|
||||||
KHH = (NNC, XLX)
|
|
||||||
HTQ = (KLG, DKR)
|
|
||||||
QFN = (CNM, TCT)
|
|
||||||
FLL = (TNG, MJV)
|
|
||||||
HFV = (NPC, BJM)
|
|
||||||
NPC = (HVD, CRK)
|
|
||||||
HKK = (KGC, CLG)
|
|
||||||
XRF = (PFC, VHK)
|
|
||||||
GGS = (DLF, LMF)
|
|
||||||
LVC = (FCQ, PDZ)
|
|
||||||
DXX = (MJT, JPD)
|
|
||||||
DCL = (HGT, VSX)
|
|
||||||
LNC = (HHN, PFH)
|
|
||||||
TBT = (JRF, DQN)
|
|
||||||
DKR = (QSM, BVX)
|
|
||||||
KNL = (QCJ, CXG)
|
|
||||||
TLH = (PHS, QDM)
|
|
||||||
NMT = (DSS, KMF)
|
|
||||||
HLC = (GBL, HPK)
|
|
||||||
BDX = (TTF, RGR)
|
|
||||||
HXV = (GLS, CSK)
|
|
||||||
TBH = (VHK, PFC)
|
|
||||||
QBB = (HGT, VSX)
|
|
||||||
TCH = (PQX, HSP)
|
|
||||||
QFH = (XDG, RMH)
|
|
||||||
GND = (HPT, GMM)
|
|
||||||
CVS = (QJV, HDG)
|
|
||||||
FNQ = (VVD, TBQ)
|
|
||||||
NCB = (FKM, FKM)
|
|
||||||
FHJ = (MMS, XKG)
|
|
||||||
VFB = (GGK, JPB)
|
|
||||||
RQV = (KKC, BTC)
|
|
||||||
NLX = (KNL, HGC)
|
|
||||||
TCT = (XRF, TBH)
|
|
||||||
GGB = (NRC, XLD)
|
|
||||||
JKJ = (NXN, NMT)
|
|
||||||
SPG = (DHS, JLB)
|
|
||||||
LVP = (VND, KLC)
|
|
||||||
NPJ = (KGC, CLG)
|
|
||||||
RVD = (SRH, VJB)
|
|
||||||
HTT = (NNK, HQH)
|
|
||||||
PQC = (TGP, GCT)
|
|
||||||
MPB = (MMT, JRD)
|
|
||||||
BCR = (FSD, KHH)
|
|
||||||
BHN = (LNC, JSG)
|
|
||||||
SMP = (BVB, GDK)
|
|
||||||
GPC = (NLB, FSB)
|
|
||||||
NMD = (GTH, XHM)
|
|
||||||
CGD = (SML, VKC)
|
|
||||||
CKP = (RQX, RLP)
|
|
||||||
DQT = (NCB, NCB)
|
|
||||||
KDL = (CNM, TCT)
|
|
||||||
CQK = (BDN, KSC)
|
|
||||||
NXX = (SFK, RMV)
|
|
||||||
RTF = (LJM, SGM)
|
|
||||||
KQQ = (HJK, GMB)
|
|
||||||
KMF = (BVK, BHH)
|
|
||||||
HPK = (KVH, NKQ)
|
|
||||||
PLQ = (MLH, PTP)
|
|
||||||
RCG = (LVJ, FXX)
|
|
||||||
HPF = (LMV, QBR)
|
|
||||||
TBX = (VPC, KKX)
|
|
||||||
NKQ = (VTK, GKV)
|
|
||||||
PRK = (GRD, VVT)
|
|
||||||
TPL = (QVF, FMS)
|
|
||||||
CFM = (DXX, JVB)
|
|
||||||
SGX = (SPP, NMD)
|
|
||||||
MLH = (KQQ, XLR)
|
|
||||||
NNC = (TNT, BLC)
|
|
||||||
XLX = (TNT, BLC)
|
|
||||||
MBM = (NHD, PQC)
|
|
||||||
PHH = (TRG, SCP)
|
|
||||||
QKV = (TNG, MJV)
|
|
||||||
XJG = (FTG, LFQ)
|
|
||||||
QCK = (XVF, MMX)
|
|
||||||
SVQ = (LCD, BKD)
|
|
||||||
SXC = (FMB, NKM)
|
|
||||||
RCT = (CGS, JKP)
|
|
||||||
KNR = (VFD, GXX)
|
|
||||||
FKM = (VQX, VQX)
|
|
||||||
CKV = (DJN, LLK)
|
|
||||||
DDX = (CLK, RVD)
|
|
||||||
GCN = (PTP, MLH)
|
|
||||||
BFB = (DBQ, RDX)
|
|
||||||
SNZ = (TXX, LSP)
|
|
||||||
MVH = (JMX, GRC)
|
|
||||||
HHX = (HGC, KNL)
|
|
||||||
GRD = (GCJ, LST)
|
|
||||||
SPM = (CKX, XVN)
|
|
||||||
LPL = (VDP, TPG)
|
|
||||||
CGM = (BSB, TPX)
|
|
||||||
FXX = (LML, PDD)
|
|
||||||
PGB = (CKV, VRL)
|
|
||||||
MMX = (NMN, NFB)
|
|
||||||
DJS = (TCP, CGM)
|
|
||||||
HTF = (LPL, RTH)
|
|
||||||
DSS = (BVK, BHH)
|
|
||||||
KPJ = (SGM, LJM)
|
|
||||||
DLM = (GRC, JMX)
|
|
||||||
LSQ = (SMP, VRJ)
|
|
||||||
SNR = (NVL, JSJ)
|
|
||||||
DPJ = (CFM, VBB)
|
|
||||||
DDQ = (SFH, CTD)
|
|
||||||
VVN = (NXX, TSR)
|
|
||||||
QLM = (XKG, MMS)
|
|
||||||
QCJ = (VVN, THT)
|
|
||||||
JDL = (PFB, PNL)
|
|
||||||
DLF = (LHG, VLQ)
|
|
||||||
LJC = (JMT, HFV)
|
|
||||||
GVQ = (GQN, MFP)
|
|
||||||
XTK = (HTR, PCT)
|
|
||||||
NRC = (QNN, QNN)
|
|
||||||
PHG = (DHJ, LBD)
|
|
||||||
BVD = (NLB, FSB)
|
|
||||||
VDR = (HKP, LVP)
|
|
||||||
BVK = (GVQ, JPK)
|
|
||||||
FLB = (JSR, GLR)
|
|
218
src/bin/day8.rs
218
src/bin/day8.rs
|
@ -1,218 +0,0 @@
|
||||||
#![forbid(elided_lifetimes_in_paths, unsafe_code)]
|
|
||||||
|
|
||||||
use aoc23::read;
|
|
||||||
use chumsky::prelude::*;
|
|
||||||
use std::collections::{HashMap, HashSet, VecDeque};
|
|
||||||
|
|
||||||
enum Instruction {
|
|
||||||
Left,
|
|
||||||
Right
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Instruction {
|
|
||||||
fn parser() -> impl Parser<char, Self, Error = Simple<char>> {
|
|
||||||
choice((
|
|
||||||
just('L').map(|_| Self::Left),
|
|
||||||
just('R').map(|_| Self::Right)
|
|
||||||
))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct Node {
|
|
||||||
left: String,
|
|
||||||
right: String
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parse_node_name() -> impl Parser<char, String, Error = Simple<char>> {
|
|
||||||
none_of([',', ')', ' '])
|
|
||||||
.repeated()
|
|
||||||
.at_least(1)
|
|
||||||
.map(|chars| chars.into_iter().collect())
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Node {
|
|
||||||
fn parser() -> impl Parser<char, Self, Error = Simple<char>> {
|
|
||||||
just("(")
|
|
||||||
.ignore_then(parse_node_name())
|
|
||||||
.then_ignore(just(", "))
|
|
||||||
.then(parse_node_name())
|
|
||||||
.then_ignore(just(")"))
|
|
||||||
.map(|(left, right)| Self { left, right })
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Debug)]
|
|
||||||
struct Network {
|
|
||||||
nodes: HashMap<String, Node>
|
|
||||||
}
|
|
||||||
|
|
||||||
impl Network {
|
|
||||||
fn parser() -> impl Parser<char, Self, Error = Simple<char>> {
|
|
||||||
parse_node_name()
|
|
||||||
.then_ignore(just(" = "))
|
|
||||||
.then(Node::parser())
|
|
||||||
.then_ignore(just("\n"))
|
|
||||||
.repeated()
|
|
||||||
.map(|nodes| Self {
|
|
||||||
nodes: nodes.into_iter().collect()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn node(&self, node: &str) -> &Node {
|
|
||||||
self.nodes
|
|
||||||
.get(node)
|
|
||||||
.unwrap_or_else(|| panic!("Failed to get node {node:?}"))
|
|
||||||
}
|
|
||||||
|
|
||||||
fn left(&self, node: &str) -> &str {
|
|
||||||
&self.node(node).left
|
|
||||||
}
|
|
||||||
|
|
||||||
fn right(&self, node: &str) -> &str {
|
|
||||||
&self.node(node).right
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parser() -> impl Parser<char, (Vec<Instruction>, Network), Error = Simple<char>> {
|
|
||||||
Instruction::parser()
|
|
||||||
.repeated()
|
|
||||||
.at_least(1)
|
|
||||||
.then_ignore(just("\n\n"))
|
|
||||||
.then(Network::parser())
|
|
||||||
.then_ignore(end())
|
|
||||||
}
|
|
||||||
|
|
||||||
#[derive(Copy, Clone, Debug)]
|
|
||||||
struct Ghost<'a> {
|
|
||||||
node: &'a str,
|
|
||||||
i: usize,
|
|
||||||
steps: u128
|
|
||||||
}
|
|
||||||
|
|
||||||
impl<'a> Ghost<'a> {
|
|
||||||
fn new(node: &'a str) -> Self {
|
|
||||||
Self {
|
|
||||||
node,
|
|
||||||
i: 0,
|
|
||||||
steps: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn advance(&mut self, ghost: Ghost<'a>) {
|
|
||||||
self.node = ghost.node;
|
|
||||||
self.i = ghost.i;
|
|
||||||
self.steps += ghost.steps;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn main() -> anyhow::Result<()> {
|
|
||||||
let (instructions, network) = read("inputs/day8.txt", parser())?;
|
|
||||||
|
|
||||||
// build a lookup map of left/right predecessors
|
|
||||||
let mut left_pred: HashMap<&str, Vec<&str>> = HashMap::new();
|
|
||||||
let mut right_pred: HashMap<&str, Vec<&str>> = HashMap::new();
|
|
||||||
for (node, next) in &network.nodes {
|
|
||||||
left_pred.entry(&next.left).or_default().push(node);
|
|
||||||
right_pred.entry(&next.right).or_default().push(node);
|
|
||||||
}
|
|
||||||
eprintln!("Built pred lookup map");
|
|
||||||
|
|
||||||
// build a lookup map from instruction position and node with the length to the next
|
|
||||||
// finish node
|
|
||||||
let mut dp: HashMap<(&str, usize), Ghost<'_>> = HashMap::new();
|
|
||||||
let mut q: VecDeque<(&str, usize)> = VecDeque::new();
|
|
||||||
for node in network
|
|
||||||
.nodes
|
|
||||||
.keys()
|
|
||||||
.map(|node| node.as_str())
|
|
||||||
.filter(|node| node.ends_with('Z'))
|
|
||||||
{
|
|
||||||
for i in 0 .. instructions.len() {
|
|
||||||
dp.insert((node, i), Ghost { node, i, steps: 0 });
|
|
||||||
q.push_back((node, i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while let Some((node, i)) = q.pop_front() {
|
|
||||||
let ghost = dp[&(node, i)];
|
|
||||||
let i_pred = match i {
|
|
||||||
0 => instructions.len() - 1,
|
|
||||||
i => i - 1
|
|
||||||
};
|
|
||||||
let pred = match instructions[i_pred] {
|
|
||||||
Instruction::Left => left_pred.get(node),
|
|
||||||
Instruction::Right => right_pred.get(node)
|
|
||||||
};
|
|
||||||
for node_pred in pred.into_iter().flatten() {
|
|
||||||
let new = (*node_pred, i_pred);
|
|
||||||
#[allow(clippy::map_entry)] // lint is opinionated garbage
|
|
||||||
if !dp.contains_key(&new) {
|
|
||||||
dp.insert(new, Ghost {
|
|
||||||
node: ghost.node,
|
|
||||||
i: ghost.i,
|
|
||||||
steps: ghost.steps + 1
|
|
||||||
});
|
|
||||||
q.push_back(new);
|
|
||||||
if dp.len() % 1_000_000 == 0 {
|
|
||||||
dbg!(dp.len());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ghost.steps == 0 {
|
|
||||||
dp.remove(&(node, i));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eprintln!("Built ghost lookup map");
|
|
||||||
// for (key, value) in &dp {
|
|
||||||
// eprintln!("\t{key:?}\t = \t{value:?}");
|
|
||||||
// }
|
|
||||||
|
|
||||||
// let mut curr_node = "AAA";
|
|
||||||
// let mut i = 0;
|
|
||||||
// let mut steps = 0_u128;
|
|
||||||
// while curr_node != "ZZZ" {
|
|
||||||
// curr_node = match instructions[i] {
|
|
||||||
// Instruction::Left => network.left(curr_node),
|
|
||||||
// Instruction::Right => network.right(curr_node)
|
|
||||||
// };
|
|
||||||
// i = (i + 1) % instructions.len();
|
|
||||||
// steps += 1;
|
|
||||||
// }
|
|
||||||
// println!("{steps}");
|
|
||||||
|
|
||||||
let mut ghosts: Vec<Ghost<'_>> = network
|
|
||||||
.nodes
|
|
||||||
.keys()
|
|
||||||
.filter(|node| node.ends_with('A'))
|
|
||||||
.map(|node| Ghost::new(node))
|
|
||||||
.collect();
|
|
||||||
let mut progress = 0;
|
|
||||||
loop {
|
|
||||||
if ghosts[0].steps > 0
|
|
||||||
&& ghosts
|
|
||||||
.iter()
|
|
||||||
.skip(1)
|
|
||||||
.all(|ghost| ghost.steps == ghosts[0].steps)
|
|
||||||
{
|
|
||||||
println!("{}", ghosts[0].steps);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
let (ghost_index, ghost) = ghosts
|
|
||||||
.iter()
|
|
||||||
.enumerate()
|
|
||||||
.min_by_key(|(_, ghost)| ghost.steps)
|
|
||||||
.unwrap();
|
|
||||||
if ghost.steps - progress >= 1_000_000_000_000 {
|
|
||||||
progress = ghost.steps;
|
|
||||||
eprintln!("progress: {progress}");
|
|
||||||
}
|
|
||||||
|
|
||||||
// eprint!("{ghost:?}\t -> \t");
|
|
||||||
let ghost = dp[&(ghost.node, ghost.i)];
|
|
||||||
// eprintln!("{ghost:?}");
|
|
||||||
ghosts[ghost_index].advance(ghost);
|
|
||||||
}
|
|
||||||
|
|
||||||
Ok(())
|
|
||||||
}
|
|
Loading…
Reference in a new issue