Compare commits
8 Commits
fcc6bb39d0
...
master
| Author | SHA1 | Date | |
|---|---|---|---|
| cb0fe825f4 | |||
| 779df41294 | |||
| efa51586d5 | |||
| 70a56313d0 | |||
| 26ca49660f | |||
| 52b2a4f1af | |||
| d1a50a8d18 | |||
| 4b79613e19 |
16
Cargo.lock
generated
16
Cargo.lock
generated
@@ -6,6 +6,7 @@ version = 3
|
||||
name = "advent-of-code-2023-rust"
|
||||
version = "0.1.0"
|
||||
dependencies = [
|
||||
"itertools",
|
||||
"num",
|
||||
]
|
||||
|
||||
@@ -15,6 +16,21 @@ version = "1.1.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
|
||||
|
||||
[[package]]
|
||||
name = "either"
|
||||
version = "1.9.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
|
||||
|
||||
[[package]]
|
||||
name = "itertools"
|
||||
version = "0.12.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "25db6b064527c5d482d0423354fcd07a89a2dfe07b67892e62411946db7f07b0"
|
||||
dependencies = [
|
||||
"either",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "num"
|
||||
version = "0.4.1"
|
||||
|
||||
@@ -7,6 +7,7 @@ edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
num = "0.4"
|
||||
itertools = "0.12.0"
|
||||
|
||||
# For flamegraph, enable this:
|
||||
[profile.release]
|
||||
|
||||
1000
input/day07.txt
Normal file
1000
input/day07.txt
Normal file
File diff suppressed because it is too large
Load Diff
5
input/day07_example.txt
Normal file
5
input/day07_example.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
32T3K 765
|
||||
T55J5 684
|
||||
KK677 28
|
||||
KTJJT 220
|
||||
QQQJA 483
|
||||
716
input/day08.txt
Normal file
716
input/day08.txt
Normal file
@@ -0,0 +1,716 @@
|
||||
LRLRLRRLRRLRLRRRLRRLRLRRLLLRRRLRRRLLRRLRRRLRRRLRRLRRLRRRLRRLRLRLRRRLRRLRRLLRRRLLRLRRRLRRRLRRLRRRLRRLLRLLRRRLRRLRLRRRLRLRLRRRLLRLRRLLRRRLRRRLRLRRLLRRLRLRRLRRRLRLLRRRLRRRLLRLLRLLRRRLRLRLRLRLRRLRRLRLRRRLLLRLLRRRLRRLLRLRLRRRLLRLRRRLLRRLRRLRLRLRLRRLRRLRRRLRRRLRRLRRLRRRLRLRRRLRLRRRR
|
||||
|
||||
FTD = (QRN, JJC)
|
||||
LMR = (KND, NTK)
|
||||
XMV = (RGS, CGP)
|
||||
KSC = (TGM, CPQ)
|
||||
MTP = (BBX, TVN)
|
||||
MSR = (GGL, GGL)
|
||||
LGX = (DTT, PKP)
|
||||
NLV = (DDK, MCH)
|
||||
KSF = (DQS, CTM)
|
||||
BFB = (JQD, CMG)
|
||||
TGH = (FVM, TNT)
|
||||
SJG = (XVB, LKD)
|
||||
XTK = (XHD, JTP)
|
||||
XVK = (RBH, JGS)
|
||||
RFS = (FPG, LTD)
|
||||
QTQ = (QMH, QDB)
|
||||
LHS = (CRH, RRQ)
|
||||
RJP = (HSR, TBP)
|
||||
CKS = (XCC, XCC)
|
||||
HGP = (VKR, GSB)
|
||||
GNM = (GSM, KJL)
|
||||
JRN = (MGQ, VLL)
|
||||
BBG = (QPL, KKN)
|
||||
RNV = (DTC, RCP)
|
||||
PJJ = (CDX, THL)
|
||||
KNF = (GXG, DCN)
|
||||
XNL = (QKC, FBF)
|
||||
QJS = (SSK, GNR)
|
||||
TNH = (HDQ, KVK)
|
||||
CXT = (SVL, DQN)
|
||||
NKV = (RPS, KPG)
|
||||
NPQ = (TTT, TRL)
|
||||
TVX = (HQV, MXC)
|
||||
PCB = (PRX, KCT)
|
||||
JND = (KKS, DNF)
|
||||
MKB = (TQC, HCQ)
|
||||
JXH = (XLF, TVX)
|
||||
KPG = (CCC, HHJ)
|
||||
PRN = (RVT, CSS)
|
||||
TLQ = (KNF, JHM)
|
||||
SJV = (SGS, TBH)
|
||||
DLM = (JQH, DKV)
|
||||
JHS = (JKJ, SVT)
|
||||
XLG = (HVD, JND)
|
||||
CPV = (DDS, RGG)
|
||||
TTP = (PSS, MDJ)
|
||||
LPC = (QSP, SDT)
|
||||
BPJ = (GGK, NSN)
|
||||
FPL = (KKL, LPS)
|
||||
TNC = (XXB, GQP)
|
||||
PRQ = (SVN, HDB)
|
||||
KKN = (LCV, MGD)
|
||||
QNM = (RLJ, NHT)
|
||||
GMB = (CHK, VLS)
|
||||
KFG = (RKJ, DMR)
|
||||
FML = (HCJ, BDS)
|
||||
DRJ = (BSF, BDF)
|
||||
FBB = (DLR, FQN)
|
||||
VFQ = (THC, MHG)
|
||||
PFF = (TNT, FVM)
|
||||
LVV = (VLG, DHP)
|
||||
CCC = (MSL, KJP)
|
||||
HMS = (FMQ, KBV)
|
||||
FND = (TNH, CCL)
|
||||
GHK = (JFS, TQP)
|
||||
TRJ = (SSN, KSC)
|
||||
XKR = (BMX, DLS)
|
||||
TKQ = (DSB, LFF)
|
||||
HBX = (HQD, XJF)
|
||||
RCF = (MVK, BPC)
|
||||
MFR = (NDL, XBG)
|
||||
FDF = (HFR, JSB)
|
||||
DBH = (XLQ, DRJ)
|
||||
BCP = (XGX, GMR)
|
||||
CNX = (BFB, XBS)
|
||||
PTQ = (XNN, BMK)
|
||||
HJS = (CCL, TNH)
|
||||
NQH = (HPR, DTN)
|
||||
RTL = (FVG, SHS)
|
||||
CDV = (XHD, JTP)
|
||||
XNN = (KFG, NFQ)
|
||||
RPS = (CCC, HHJ)
|
||||
TVN = (SXH, HMK)
|
||||
CBN = (PKP, DTT)
|
||||
DCN = (RCF, BQC)
|
||||
SBD = (XMV, SSF)
|
||||
THV = (DLC, RHV)
|
||||
SXG = (LMJ, SBD)
|
||||
JVK = (VKS, BHS)
|
||||
XTV = (PSC, HXN)
|
||||
BJN = (LSJ, NSX)
|
||||
HQV = (FSR, RNV)
|
||||
SSK = (JNG, BBG)
|
||||
FRJ = (CNX, CTF)
|
||||
VNH = (HJS, FND)
|
||||
QGT = (VKS, BHS)
|
||||
VRH = (HJS, FND)
|
||||
PBD = (PRN, HLR)
|
||||
DNJ = (SXG, QCF)
|
||||
PRX = (JBS, JSH)
|
||||
GCV = (BVC, TXS)
|
||||
GQP = (DMX, CDS)
|
||||
MHG = (DNR, BVH)
|
||||
BSN = (BDS, HCJ)
|
||||
BKQ = (RQB, RQB)
|
||||
LRT = (DPT, KSF)
|
||||
VTL = (XRF, VCB)
|
||||
DQN = (CSP, XBF)
|
||||
LXN = (CNC, MDL)
|
||||
XVQ = (NLJ, SBJ)
|
||||
VBQ = (MDM, BTC)
|
||||
HTB = (KGJ, KQK)
|
||||
NKJ = (LTM, MNJ)
|
||||
CBT = (KSC, SSN)
|
||||
HKL = (JBC, NQN)
|
||||
TGN = (VXR, JQG)
|
||||
MDJ = (GTC, NJF)
|
||||
CGP = (QRH, SJB)
|
||||
LLV = (RBH, JGS)
|
||||
DPT = (DQS, CTM)
|
||||
NNJ = (TVX, XLF)
|
||||
XHD = (XNL, VGB)
|
||||
NVF = (TKL, HXJ)
|
||||
SGS = (SNP, CKJ)
|
||||
RCP = (GGF, NCK)
|
||||
VXR = (XJV, VXX)
|
||||
VRQ = (QKH, DHT)
|
||||
KKS = (PTH, LXJ)
|
||||
KJT = (TNC, HVV)
|
||||
LMP = (VLG, VLG)
|
||||
TKL = (KMV, XPB)
|
||||
CVC = (VVD, PRQ)
|
||||
SKB = (RTL, DRK)
|
||||
GSM = (XKK, JPX)
|
||||
LKD = (NDB, XQN)
|
||||
HRQ = (PRQ, VVD)
|
||||
LKH = (THL, CDX)
|
||||
PXL = (TLV, FRX)
|
||||
HXJ = (XPB, KMV)
|
||||
DTC = (GGF, NCK)
|
||||
DNK = (FBS, FRP)
|
||||
BSB = (HML, BGT)
|
||||
VHM = (CRH, RRQ)
|
||||
VCR = (FML, BSN)
|
||||
LQB = (GGN, GSS)
|
||||
SJL = (QSP, SDT)
|
||||
HBN = (QRJ, LXR)
|
||||
BTD = (CSX, FRQ)
|
||||
QPP = (KNP, VRQ)
|
||||
LDD = (BVC, TXS)
|
||||
KDV = (VRG, TDF)
|
||||
MSM = (NVJ, SJG)
|
||||
KGX = (BBV, SPB)
|
||||
HDP = (HKC, RFB)
|
||||
CNR = (DTF, CBL)
|
||||
DDK = (NBR, SRM)
|
||||
XBF = (DGL, FSC)
|
||||
HDB = (FKJ, BPD)
|
||||
FVM = (XDM, QMF)
|
||||
SCX = (KKL, LPS)
|
||||
XHR = (FML, BSN)
|
||||
VTB = (GPN, HDP)
|
||||
DJC = (FJP, TQJ)
|
||||
PTH = (KXV, KJK)
|
||||
DPG = (SNG, BPJ)
|
||||
KLT = (PBD, LSG)
|
||||
BDN = (FBR, HBN)
|
||||
DPF = (BNM, JVM)
|
||||
JHM = (DCN, GXG)
|
||||
TBP = (PLR, DXS)
|
||||
RGS = (QRH, SJB)
|
||||
RMA = (HDD, CMP)
|
||||
MQZ = (JQM, VVG)
|
||||
XGX = (QTQ, LLX)
|
||||
KJX = (JND, HVD)
|
||||
RXM = (SKB, HSG)
|
||||
LCG = (VGL, LDT)
|
||||
VDK = (JKH, FTD)
|
||||
HRB = (GPN, HDP)
|
||||
ZZZ = (LTD, FPG)
|
||||
VGG = (CML, JQS)
|
||||
FRX = (FSP, VBQ)
|
||||
JTP = (VGB, XNL)
|
||||
DHT = (KJT, PLS)
|
||||
CCL = (KVK, HDQ)
|
||||
BBC = (DLS, BMX)
|
||||
CTJ = (KCQ, LNP)
|
||||
PHJ = (DQP, TLQ)
|
||||
SVL = (XBF, CSP)
|
||||
NXA = (RVD, QNM)
|
||||
NSQ = (PDC, DKQ)
|
||||
SVK = (MVS, HTG)
|
||||
BVH = (NQH, VHL)
|
||||
DLX = (KBR, VPV)
|
||||
SCD = (RHV, DLC)
|
||||
DRK = (FVG, SHS)
|
||||
BDS = (MCL, FLR)
|
||||
PNX = (SPB, BBV)
|
||||
QMC = (TLP, GJX)
|
||||
XKB = (BPM, SQD)
|
||||
PSS = (GTC, NJF)
|
||||
VXK = (GCG, DRD)
|
||||
MFC = (PFF, TGH)
|
||||
RMB = (NDK, PMJ)
|
||||
RGG = (CGV, XVQ)
|
||||
JNC = (BHK, BFQ)
|
||||
BCB = (VLL, MGQ)
|
||||
BCR = (HTB, TLT)
|
||||
RHG = (MKB, XTQ)
|
||||
XXR = (GMB, QRX)
|
||||
XJF = (JNC, QBK)
|
||||
PLR = (TTG, TTG)
|
||||
RDQ = (QLV, LKR)
|
||||
QQK = (LQB, JDB)
|
||||
VCB = (NVF, GLR)
|
||||
RPP = (JGM, PSX)
|
||||
KBV = (BTB, VHG)
|
||||
QPM = (RNB, GBC)
|
||||
CSS = (QLH, BTR)
|
||||
GBC = (VKX, NSQ)
|
||||
JJJ = (SHQ, PMS)
|
||||
CDJ = (HQK, BKR)
|
||||
THL = (HDM, RHG)
|
||||
FGK = (QPM, JSC)
|
||||
HDQ = (CBT, TRJ)
|
||||
TLP = (STK, NPL)
|
||||
GKV = (VKR, GSB)
|
||||
CNC = (BSB, TNB)
|
||||
QSP = (NGF, HXM)
|
||||
PRV = (HDD, CMP)
|
||||
SQD = (BJN, MDQ)
|
||||
DKQ = (PBX, XTV)
|
||||
MXK = (JFS, TQP)
|
||||
TGM = (NPQ, PHS)
|
||||
HBD = (LTM, MNJ)
|
||||
BSF = (NCQ, KLT)
|
||||
GXG = (BQC, RCF)
|
||||
HKV = (JGM, JGM)
|
||||
QHK = (FPL, SCX)
|
||||
SXH = (SVS, MSM)
|
||||
PLS = (HVV, TNC)
|
||||
XJV = (VTB, HRB)
|
||||
HQK = (VNH, VRH)
|
||||
GGL = (RPG, RPG)
|
||||
RQB = (CKS, CKS)
|
||||
NCQ = (LSG, PBD)
|
||||
VPQ = (FRJ, BNT)
|
||||
RVD = (RLJ, NHT)
|
||||
HTG = (DGF, GCQ)
|
||||
KMX = (LCH, SCG)
|
||||
RMD = (JVK, QGT)
|
||||
FKR = (RXM, MTN)
|
||||
VNB = (KBR, VPV)
|
||||
LSG = (PRN, HLR)
|
||||
CTM = (BKQ, RJG)
|
||||
TNB = (HML, BGT)
|
||||
SRM = (HKV, RPP)
|
||||
MSL = (XHR, VCR)
|
||||
SQX = (SGL, NQV)
|
||||
MGQ = (LPC, SJL)
|
||||
GCG = (NJX, KSR)
|
||||
HTX = (HBN, FBR)
|
||||
NJX = (RGL, PND)
|
||||
SGZ = (PNX, KGX)
|
||||
XLF = (HQV, MXC)
|
||||
HQG = (CKV, HKL)
|
||||
BBV = (NXM, HMS)
|
||||
QRJ = (GPS, LKK)
|
||||
CKF = (XCC, SGZ)
|
||||
HKC = (NNJ, JXH)
|
||||
SHM = (NKV, TCS)
|
||||
SVS = (NVJ, SJG)
|
||||
SSR = (GGL, HVG)
|
||||
NVJ = (XVB, LKD)
|
||||
QGP = (QHK, FJH)
|
||||
FRQ = (FBP, TKQ)
|
||||
KMV = (CPV, SMX)
|
||||
LSJ = (LCP, SRJ)
|
||||
CSM = (HKN, DJC)
|
||||
JRK = (BKR, HQK)
|
||||
RNB = (VKX, NSQ)
|
||||
FSR = (RCP, DTC)
|
||||
DKN = (FNQ, TCT)
|
||||
MVK = (XKR, BBC)
|
||||
NDG = (DKN, NFN)
|
||||
MVS = (DGF, GCQ)
|
||||
GDA = (KGX, PNX)
|
||||
DQP = (KNF, JHM)
|
||||
XPB = (SMX, CPV)
|
||||
VXX = (HRB, VTB)
|
||||
JSC = (GBC, RNB)
|
||||
VLS = (NDC, RTM)
|
||||
JFS = (PVF, KJJ)
|
||||
DBK = (LFN, CFJ)
|
||||
MTN = (SKB, HSG)
|
||||
SDK = (QQK, NSR)
|
||||
GMR = (LLX, QTQ)
|
||||
VBH = (FRJ, BNT)
|
||||
GPN = (HKC, RFB)
|
||||
FSC = (KDK, FDF)
|
||||
TKM = (CXB, MTP)
|
||||
VLG = (RFS, RFS)
|
||||
RFB = (NNJ, JXH)
|
||||
QHD = (QRX, GMB)
|
||||
GSS = (VMV, DFT)
|
||||
MCF = (QJS, TDX)
|
||||
DTF = (VQR, LFP)
|
||||
XHM = (CTG, TND)
|
||||
JQH = (BCP, KSH)
|
||||
SBM = (MTN, RXM)
|
||||
KGJ = (SVK, SCT)
|
||||
TDP = (MCD, CQG)
|
||||
BNM = (RQS, JJJ)
|
||||
LTD = (HBX, THT)
|
||||
TQJ = (SJV, MXJ)
|
||||
BPM = (BJN, MDQ)
|
||||
THT = (XJF, HQD)
|
||||
QMF = (XKB, GST)
|
||||
HQD = (QBK, JNC)
|
||||
NHS = (VXR, JQG)
|
||||
THX = (TKM, TKM)
|
||||
GST = (SQD, BPM)
|
||||
QJD = (CKV, HKL)
|
||||
VLL = (LPC, SJL)
|
||||
KXD = (TND, CTG)
|
||||
FBS = (KDV, NVM)
|
||||
KVK = (TRJ, CBT)
|
||||
QMH = (RMV, TTP)
|
||||
RVJ = (KXQ, MCF)
|
||||
HXN = (BMM, TGX)
|
||||
LFF = (DPF, CBF)
|
||||
KJL = (XKK, JPX)
|
||||
QQM = (VHM, LHS)
|
||||
LQQ = (LFV, GNM)
|
||||
THC = (BVH, DNR)
|
||||
QRX = (VLS, CHK)
|
||||
NDK = (FKR, SBM)
|
||||
FKJ = (LRT, PDN)
|
||||
SJM = (XNN, BMK)
|
||||
DRD = (KSR, NJX)
|
||||
JBC = (XTK, CDV)
|
||||
JPX = (NHH, PHJ)
|
||||
SNG = (GGK, NSN)
|
||||
RBN = (NFN, DKN)
|
||||
MSH = (JQH, DKV)
|
||||
RTM = (VGJ, SKL)
|
||||
KNP = (QKH, DHT)
|
||||
TDX = (GNR, SSK)
|
||||
SCC = (LFV, GNM)
|
||||
GKL = (GDM, KKR)
|
||||
BPD = (LRT, PDN)
|
||||
JFJ = (TGP, NLR)
|
||||
VMV = (XPQ, TDP)
|
||||
RBH = (QQM, HRD)
|
||||
BNT = (CTF, CNX)
|
||||
JSP = (NDK, PMJ)
|
||||
FNV = (FTD, JKH)
|
||||
HKN = (TQJ, FJP)
|
||||
SGL = (DBH, XHC)
|
||||
VVG = (MDT, PCB)
|
||||
FVG = (PGF, LPD)
|
||||
RMV = (MDJ, PSS)
|
||||
TQP = (PVF, KJJ)
|
||||
SKL = (VFX, CGD)
|
||||
HDD = (TLG, QGP)
|
||||
SBK = (NSR, QQK)
|
||||
GJX = (NPL, STK)
|
||||
PBX = (HXN, PSC)
|
||||
KCJ = (CNR, NQM)
|
||||
FJP = (MXJ, SJV)
|
||||
NCR = (DNJ, BSR)
|
||||
NFQ = (RKJ, DMR)
|
||||
KSR = (PND, RGL)
|
||||
LCH = (THX, THX)
|
||||
DQX = (LHH, BHD)
|
||||
NHT = (JRN, BCB)
|
||||
SDT = (HXM, NGF)
|
||||
CHK = (RTM, NDC)
|
||||
LTM = (VSD, PXL)
|
||||
KCT = (JBS, JSH)
|
||||
CBF = (JVM, BNM)
|
||||
GPS = (NCR, MHD)
|
||||
VHZ = (MTP, CXB)
|
||||
BBF = (NQM, CNR)
|
||||
HMK = (MSM, SVS)
|
||||
PHS = (TRL, TTT)
|
||||
SNP = (FTN, KRS)
|
||||
BHK = (NDG, RBN)
|
||||
KJP = (VCR, XHR)
|
||||
NLR = (DLM, MSH)
|
||||
SXX = (GKT, KNX)
|
||||
FLR = (GXF, XLR)
|
||||
HCQ = (JJG, MSF)
|
||||
JGM = (QDQ, QDQ)
|
||||
TDF = (QHD, XXR)
|
||||
BSR = (QCF, SXG)
|
||||
HLR = (CSS, RVT)
|
||||
XDM = (GST, XKB)
|
||||
HHJ = (KJP, MSL)
|
||||
NSN = (SBK, SDK)
|
||||
RPG = (RVD, QNM)
|
||||
JQS = (CNJ, QKP)
|
||||
CNJ = (NMT, DNK)
|
||||
VSD = (TLV, FRX)
|
||||
XLR = (CRF, PTX)
|
||||
HSG = (DRK, RTL)
|
||||
FBR = (QRJ, LXR)
|
||||
KXV = (JSP, RMB)
|
||||
GVJ = (XRF, VCB)
|
||||
VLB = (CNC, MDL)
|
||||
DNR = (VHL, NQH)
|
||||
TTT = (XVK, LLV)
|
||||
LLX = (QMH, QDB)
|
||||
RLJ = (JRN, BCB)
|
||||
XBG = (PRV, FQZ)
|
||||
NQN = (XTK, CDV)
|
||||
LXJ = (KJK, KXV)
|
||||
MQN = (BDN, HTX)
|
||||
MBL = (GKT, KNX)
|
||||
QRN = (VNB, DLX)
|
||||
PFG = (VMR, QPP)
|
||||
CDS = (MSR, SSR)
|
||||
GKT = (MQN, LQF)
|
||||
BBX = (HMK, SXH)
|
||||
BMK = (KFG, NFQ)
|
||||
HRD = (VHM, LHS)
|
||||
VQR = (RMM, DBK)
|
||||
JJC = (DLX, VNB)
|
||||
HPR = (LJM, FGK)
|
||||
PLM = (LCB, JFJ)
|
||||
VHG = (CXT, FGG)
|
||||
CQG = (MKM, MDV)
|
||||
HDM = (MKB, XTQ)
|
||||
CRF = (CVC, HRQ)
|
||||
LFV = (GSM, KJL)
|
||||
SCT = (MVS, HTG)
|
||||
PSC = (TGX, BMM)
|
||||
KRS = (LMP, LVV)
|
||||
GNR = (JNG, BBG)
|
||||
NCP = (JQS, CML)
|
||||
KCQ = (FCS, RLD)
|
||||
VGB = (QKC, FBF)
|
||||
TND = (VCX, RDQ)
|
||||
QKC = (LKH, PJJ)
|
||||
QKP = (DNK, NMT)
|
||||
NFN = (FNQ, TCT)
|
||||
VPV = (DXG, KMX)
|
||||
SHQ = (XKX, GKL)
|
||||
RQS = (PMS, SHQ)
|
||||
JBS = (SXX, MBL)
|
||||
JJG = (QMC, VSV)
|
||||
JQD = (VLC, PFG)
|
||||
TCT = (JMX, VFQ)
|
||||
VSV = (GJX, TLP)
|
||||
MXC = (FSR, RNV)
|
||||
JSS = (KFB, SHM)
|
||||
DHP = (RFS, ZZZ)
|
||||
CRH = (XPC, NLV)
|
||||
SVN = (BPD, FKJ)
|
||||
LKR = (FSX, BTD)
|
||||
JNG = (KKN, QPL)
|
||||
NGF = (XHM, KXD)
|
||||
CPQ = (NPQ, PHS)
|
||||
NVM = (TDF, VRG)
|
||||
BMX = (CDJ, JRK)
|
||||
TBH = (SNP, CKJ)
|
||||
CMP = (TLG, QGP)
|
||||
PMS = (GKL, XKX)
|
||||
JGS = (HRD, QQM)
|
||||
LCV = (GKV, HGP)
|
||||
MHD = (DNJ, BSR)
|
||||
DGF = (KCJ, BBF)
|
||||
BQC = (MVK, BPC)
|
||||
VGL = (VXK, BXP)
|
||||
DLS = (JRK, CDJ)
|
||||
FGG = (SVL, DQN)
|
||||
NHH = (TLQ, DQP)
|
||||
DSB = (DPF, CBF)
|
||||
MSF = (VSV, QMC)
|
||||
SSN = (CPQ, TGM)
|
||||
PLA = (VVG, JQM)
|
||||
RVT = (QLH, BTR)
|
||||
PSX = (QDQ, MQZ)
|
||||
SRJ = (FBB, RMK)
|
||||
LQF = (BDN, HTX)
|
||||
XPC = (DDK, MCH)
|
||||
MCD = (MKM, MDV)
|
||||
DBT = (VGL, LDT)
|
||||
HFR = (QFT, VPJ)
|
||||
CFJ = (SKH, LMR)
|
||||
BGT = (PCH, DPG)
|
||||
QLA = (CXB, MTP)
|
||||
FSP = (MDM, BTC)
|
||||
JJF = (MCF, KXQ)
|
||||
NSR = (LQB, JDB)
|
||||
KND = (VDK, FNV)
|
||||
CKJ = (FTN, KRS)
|
||||
QLH = (LGT, QPK)
|
||||
TGP = (DLM, MSH)
|
||||
HVG = (RPG, BBZ)
|
||||
SKH = (NTK, KND)
|
||||
DLC = (PLM, VNF)
|
||||
HVD = (KKS, DNF)
|
||||
FQN = (DXK, CSM)
|
||||
DMR = (JSS, LGG)
|
||||
LNP = (FCS, RLD)
|
||||
QPL = (LCV, MGD)
|
||||
RGL = (TMK, SQX)
|
||||
RLD = (VTL, GVJ)
|
||||
NCK = (RJP, MGN)
|
||||
CDX = (RHG, HDM)
|
||||
CTF = (BFB, XBS)
|
||||
VKX = (DKQ, PDC)
|
||||
FSX = (FRQ, CSX)
|
||||
BTR = (QPK, LGT)
|
||||
MGD = (HGP, GKV)
|
||||
FNQ = (VFQ, JMX)
|
||||
CGV = (NLJ, SBJ)
|
||||
JVM = (JJJ, RQS)
|
||||
QDB = (RMV, TTP)
|
||||
GGN = (DFT, VMV)
|
||||
QFT = (THV, SCD)
|
||||
LFP = (DBK, RMM)
|
||||
RHV = (PLM, VNF)
|
||||
GGK = (SDK, SBK)
|
||||
QRH = (JJF, RVJ)
|
||||
TQC = (MSF, JJG)
|
||||
KDK = (JSB, HFR)
|
||||
VKS = (DQX, XHK)
|
||||
FJH = (FPL, SCX)
|
||||
RMK = (FQN, DLR)
|
||||
STK = (VBH, VPQ)
|
||||
TNT = (XDM, QMF)
|
||||
SCG = (THX, RTK)
|
||||
LGG = (SHM, KFB)
|
||||
GGF = (MGN, RJP)
|
||||
DDS = (CGV, XVQ)
|
||||
DMX = (MSR, MSR)
|
||||
DTN = (LJM, FGK)
|
||||
FGL = (JHS, PGS)
|
||||
CSX = (FBP, TKQ)
|
||||
NDB = (FGL, MTF)
|
||||
LKK = (NCR, MHD)
|
||||
MDQ = (LSJ, NSX)
|
||||
DLR = (CSM, DXK)
|
||||
JPQ = (PFF, TGH)
|
||||
NBR = (HKV, HKV)
|
||||
PTX = (HRQ, CVC)
|
||||
PGS = (JKJ, SVT)
|
||||
XLQ = (BDF, BSF)
|
||||
GLR = (HXJ, TKL)
|
||||
NQM = (DTF, CBL)
|
||||
SVT = (TBX, CTJ)
|
||||
LGT = (HBD, NKJ)
|
||||
TLT = (KQK, KGJ)
|
||||
PMJ = (FKR, SBM)
|
||||
SMX = (RGG, DDS)
|
||||
NJF = (PTQ, SJM)
|
||||
QCF = (LMJ, SBD)
|
||||
DKV = (KSH, BCP)
|
||||
RRQ = (XPC, NLV)
|
||||
BTB = (FGG, CXT)
|
||||
DTT = (VRX, BCR)
|
||||
LPD = (QJD, HQG)
|
||||
LMJ = (SSF, XMV)
|
||||
BKR = (VRH, VNH)
|
||||
XCC = (KGX, PNX)
|
||||
FQZ = (CMP, HDD)
|
||||
MCH = (NBR, SRM)
|
||||
NPL = (VBH, VPQ)
|
||||
LHH = (NCP, VGG)
|
||||
TBX = (LNP, KCQ)
|
||||
HXM = (XHM, KXD)
|
||||
KQK = (SVK, SCT)
|
||||
BHD = (NCP, VGG)
|
||||
GCQ = (BBF, KCJ)
|
||||
JMX = (THC, MHG)
|
||||
SJJ = (MFC, JPQ)
|
||||
JKH = (JJC, QRN)
|
||||
PVF = (GCV, LDD)
|
||||
MNJ = (VSD, PXL)
|
||||
XVB = (XQN, NDB)
|
||||
KKL = (DBT, LCG)
|
||||
MDT = (PRX, KCT)
|
||||
TTG = (NDL, NDL)
|
||||
XRF = (GLR, NVF)
|
||||
VCX = (QLV, LKR)
|
||||
MDV = (RMD, JRT)
|
||||
JSH = (SXX, MBL)
|
||||
CGD = (TGN, NHS)
|
||||
FRP = (NVM, KDV)
|
||||
RTK = (TKM, VHZ)
|
||||
QLV = (FSX, BTD)
|
||||
TRL = (XVK, LLV)
|
||||
BFQ = (RBN, NDG)
|
||||
MDM = (VLB, LXN)
|
||||
HCJ = (FLR, MCL)
|
||||
BVC = (XLG, KJX)
|
||||
TCS = (RPS, KPG)
|
||||
PKP = (BCR, VRX)
|
||||
DGL = (KDK, FDF)
|
||||
VNF = (LCB, JFJ)
|
||||
TGX = (SJJ, MHR)
|
||||
MDL = (TNB, BSB)
|
||||
RJG = (RQB, LQG)
|
||||
LCP = (RMK, FBB)
|
||||
QDQ = (VVG, JQM)
|
||||
TMK = (SGL, NQV)
|
||||
BHS = (XHK, DQX)
|
||||
CMG = (VLC, PFG)
|
||||
SJB = (JJF, RVJ)
|
||||
VPJ = (THV, SCD)
|
||||
RKJ = (LGG, JSS)
|
||||
BDF = (KLT, NCQ)
|
||||
PCH = (SNG, BPJ)
|
||||
CML = (QKP, CNJ)
|
||||
PND = (TMK, SQX)
|
||||
GTC = (PTQ, SJM)
|
||||
BMM = (SJJ, MHR)
|
||||
CTG = (VCX, RDQ)
|
||||
QKH = (KJT, PLS)
|
||||
BBZ = (QNM, RVD)
|
||||
MXJ = (SGS, TBH)
|
||||
HML = (DPG, PCH)
|
||||
KFB = (NKV, TCS)
|
||||
BPC = (BBC, XKR)
|
||||
JQG = (VXX, XJV)
|
||||
VKR = (LQQ, SCC)
|
||||
VVD = (SVN, HDB)
|
||||
MGN = (HSR, TBP)
|
||||
NMT = (FRP, FBS)
|
||||
LCB = (NLR, TGP)
|
||||
JQM = (PCB, MDT)
|
||||
VGJ = (VFX, CGD)
|
||||
GXF = (CRF, PTX)
|
||||
LQG = (CKS, CKF)
|
||||
NXM = (FMQ, KBV)
|
||||
LDT = (BXP, VXK)
|
||||
TLV = (FSP, VBQ)
|
||||
CKV = (NQN, JBC)
|
||||
NQV = (DBH, XHC)
|
||||
FBF = (LKH, PJJ)
|
||||
HSR = (PLR, DXS)
|
||||
XPQ = (MCD, CQG)
|
||||
VRX = (TLT, HTB)
|
||||
CSP = (FSC, DGL)
|
||||
KBR = (DXG, KMX)
|
||||
XBS = (CMG, JQD)
|
||||
KNX = (LQF, MQN)
|
||||
CXB = (BBX, TVN)
|
||||
FCS = (VTL, GVJ)
|
||||
XHC = (XLQ, DRJ)
|
||||
GDM = (GHK, MXK)
|
||||
VFX = (TGN, NHS)
|
||||
LXR = (LKK, GPS)
|
||||
XKK = (PHJ, NHH)
|
||||
LFN = (LMR, SKH)
|
||||
DFT = (TDP, XPQ)
|
||||
NSX = (LCP, SRJ)
|
||||
NDL = (PRV, PRV)
|
||||
MTF = (PGS, JHS)
|
||||
XTQ = (HCQ, TQC)
|
||||
SPB = (HMS, NXM)
|
||||
JKJ = (CTJ, TBX)
|
||||
MCL = (GXF, XLR)
|
||||
NTK = (FNV, VDK)
|
||||
VRG = (QHD, XXR)
|
||||
KJK = (JSP, RMB)
|
||||
QPK = (HBD, NKJ)
|
||||
DNF = (PTH, LXJ)
|
||||
LPS = (LCG, DBT)
|
||||
GSB = (SCC, LQQ)
|
||||
KJJ = (LDD, GCV)
|
||||
FPG = (THT, HBX)
|
||||
FTN = (LMP, LMP)
|
||||
SBJ = (LGX, CBN)
|
||||
AAA = (FPG, LTD)
|
||||
NDC = (VGJ, SKL)
|
||||
VLC = (QPP, VMR)
|
||||
SHS = (LPD, PGF)
|
||||
JSB = (VPJ, QFT)
|
||||
LJM = (JSC, QPM)
|
||||
NLJ = (CBN, LGX)
|
||||
JDB = (GSS, GGN)
|
||||
BXP = (GCG, DRD)
|
||||
PDC = (XTV, PBX)
|
||||
XQN = (MTF, FGL)
|
||||
MHR = (MFC, JPQ)
|
||||
DXS = (TTG, MFR)
|
||||
DQS = (BKQ, RJG)
|
||||
TXS = (XLG, KJX)
|
||||
PDN = (KSF, DPT)
|
||||
VMR = (VRQ, KNP)
|
||||
HVV = (XXB, GQP)
|
||||
VHL = (HPR, DTN)
|
||||
QBK = (BFQ, BHK)
|
||||
XXB = (DMX, CDS)
|
||||
XHK = (BHD, LHH)
|
||||
KSH = (GMR, XGX)
|
||||
DXK = (HKN, DJC)
|
||||
KXQ = (TDX, QJS)
|
||||
DXG = (LCH, LCH)
|
||||
BTC = (LXN, VLB)
|
||||
TLG = (QHK, FJH)
|
||||
JRT = (JVK, QGT)
|
||||
RMM = (CFJ, LFN)
|
||||
MKM = (JRT, RMD)
|
||||
SSF = (RGS, CGP)
|
||||
PGF = (QJD, HQG)
|
||||
KKR = (MXK, GHK)
|
||||
FBP = (DSB, LFF)
|
||||
XKX = (KKR, GDM)
|
||||
FMQ = (VHG, BTB)
|
||||
CBL = (LFP, VQR)
|
||||
9
input/day08_example.txt
Normal file
9
input/day08_example.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)
|
||||
200
input/day09.txt
Normal file
200
input/day09.txt
Normal file
@@ -0,0 +1,200 @@
|
||||
8 10 9 -2 -17 8 190 771 2208 5345 11753 24409 49063 97014 190779 375658 743112 1477240 2945141 5868120 11637263
|
||||
-9 -16 -26 -42 -67 -89 -41 278 1345 4163 10710 24787 53710 111805 227699 459451 925644 1868703 3782952 7672020 15562542
|
||||
28 51 96 170 284 469 798 1415 2573 4692 8485 15300 28049 53554 108059 229471 503402 1116673 2463878 5353430 11394522
|
||||
10 16 22 28 34 40 46 52 58 64 70 76 82 88 94 100 106 112 118 124 130
|
||||
8 24 56 121 238 431 742 1256 2137 3671 6309 10700 17701 28348 43769 65017 92798 127066 166454 207507 243680
|
||||
3 13 33 61 105 197 418 951 2204 5084 11556 25688 55464 115742 232843 451380 844073 1525447 2670475 4539407 7510219
|
||||
15 17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55
|
||||
4 5 21 57 125 255 506 977 1818 3241 5531 9057 14283 21779 32232 46457 65408 90189 122065 162473 213033
|
||||
5 12 36 95 219 453 862 1541 2644 4472 7720 14109 27863 58876 128976 283411 610443 1272472 2551916 4913291 9078231
|
||||
2 19 48 88 142 226 378 659 1139 1866 2825 3907 4925 5735 6545 8524 14856 32421 74326 163554 338048
|
||||
3 2 -4 -12 -13 15 119 394 1027 2386 5231 11268 24599 55319 127898 299662 699808 1609223 3620339 7952681 17068804
|
||||
9 19 41 88 184 362 655 1088 1698 2633 4409 8432 17912 39299 84354 172945 336675 623603 1104781 1884372 3117140
|
||||
11 10 7 2 -5 -14 -25 -38 -53 -70 -89 -110 -133 -158 -185 -214 -245 -278 -313 -350 -389
|
||||
19 24 24 19 9 -6 -26 -51 -81 -116 -156 -201 -251 -306 -366 -431 -501 -576 -656 -741 -831
|
||||
9 32 76 155 293 539 990 1835 3446 6555 12569 24088 45704 85172 155057 274974 474551 797258 1305258 2085449 3256879
|
||||
4 22 61 126 216 323 429 496 442 104 -778 -2444 -4602 -5001 3844 41336 151368 424562 1035747 2304666 4791100
|
||||
0 0 9 40 118 299 697 1509 3030 5661 9946 16758 27950 48215 89776 183216 400828 904162 2036175 4492208 9625134
|
||||
13 25 39 60 106 222 501 1112 2341 4666 8915 16616 30800 57904 112321 227047 477565 1032763 2257999 4913736 10521598
|
||||
6 22 40 69 146 357 871 2004 4337 8920 17613 33667 62784 115219 210184 385179 715340 1352050 2596670 5035253 9774610
|
||||
2 9 16 23 30 37 44 51 58 65 72 79 86 93 100 107 114 121 128 135 142
|
||||
-1 -2 -8 -29 -74 -137 -160 57 1057 4150 12265 31578 74476 164761 346652 700523 1371301 2621840 4937055 9232612 17279510
|
||||
7 3 -1 -5 -9 -13 -17 -21 -25 -29 -33 -37 -41 -45 -49 -53 -57 -61 -65 -69 -73
|
||||
18 35 77 152 275 474 797 1337 2301 4165 8004 16198 33941 72398 155095 330403 695128 1437759 2915603 5788900 11248491
|
||||
7 28 76 166 310 512 772 1122 1725 3072 6312 13746 29508 60444 117184 215382 377075 632084 1019348 1588046 2398322
|
||||
-3 10 34 68 126 257 565 1229 2528 4882 8928 15661 26685 44639 73889 121610 199423 325802 529526 854522 1366528
|
||||
6 4 15 51 125 266 551 1157 2441 5079 10347 20719 41097 81174 159640 311114 596708 1118810 2039715 3601703 6142457
|
||||
12 35 71 120 182 257 345 446 560 687 827 980 1146 1325 1517 1722 1940 2171 2415 2672 2942
|
||||
-2 4 33 113 285 614 1209 2261 4127 7519 13909 26350 51070 100480 198753 392053 767092 1484370 2836777 5350987 9959291
|
||||
-6 -2 3 9 20 44 93 183 334 570 919 1413 2088 2984 4145 5619 7458 9718 12459 15745 19644
|
||||
12 25 49 95 174 290 437 612 857 1353 2630 6055 14955 37103 90000 211717 482514 1066813 2292543 4797075 9788236
|
||||
-4 4 16 26 29 26 31 88 318 1047 3127 8672 22628 55944 131699 296469 640572 1332626 2675974 5196610 9773547
|
||||
14 20 26 42 100 265 654 1485 3185 6596 13338 26437 51445 98542 186642 351540 662034 1251569 2380155 4556366 8781478
|
||||
17 28 52 116 263 555 1079 1958 3381 5702 9728 17440 33609 69151 147721 318136 676961 1408280 2851676 5615220 10758379
|
||||
27 38 47 50 36 -21 -161 -409 -683 -567 1192 7716 25976 70370 168856 372991 773719 1525352 2880909 5242830 9234076
|
||||
9 24 52 89 130 174 242 430 1026 2727 7008 16735 37199 77905 155712 300326 563743 1036074 1871316 3328125 5832568
|
||||
18 30 58 130 290 604 1169 2128 3710 6351 11024 20036 38775 79266 167002 353463 738166 1506184 2990058 5769178 10825356
|
||||
23 37 62 108 193 352 660 1280 2553 5166 10476 21162 42594 85792 173866 355862 735855 1532471 3197482 6646280 13695427
|
||||
-7 -9 1 33 93 192 372 760 1668 3760 8302 17494 34850 65539 116523 196223 313307 474021 677271 906407 1116355
|
||||
4 13 35 70 118 179 253 340 440 553 679 818 970 1135 1313 1504 1708 1925 2155 2398 2654
|
||||
13 32 68 135 266 535 1087 2173 4187 7702 13502 22607 36288 56069 83713 121189 170617 234188 314056 412199 530246
|
||||
15 39 72 119 196 333 580 1029 1874 3542 6945 13932 28069 55954 109395 208956 389625 709697 1264414 2206485 3776346
|
||||
23 48 100 198 372 668 1150 1905 3070 4928 8170 14508 27993 57733 123378 265976 568880 1196482 2462432 4942379 9645683
|
||||
22 37 58 84 123 216 478 1175 2866 6656 14639 30679 61822 120915 231510 436964 817030 1517731 2805360 5166426 9499429
|
||||
9 38 78 125 175 224 268 303 325 330 314 273 203 100 -40 -221 -447 -722 -1050 -1435 -1881
|
||||
10 28 69 152 306 570 993 1634 2562 3856 5605 7908 10874 14622 19281 24990 31898 40164 49957 61456 74850
|
||||
10 30 66 140 289 566 1040 1795 2928 4546 6762 9690 13439 18106 23768 30473 38230 46998 56674 67080 77949
|
||||
10 33 71 120 172 215 233 206 110 -83 -405 -892 -1584 -2525 -3763 -5350 -7342 -9799 -12785 -16368 -20620
|
||||
10 22 42 79 147 285 585 1232 2574 5271 10644 21490 43883 90886 189731 395088 813105 1645355 3271757 6413156 12459158
|
||||
10 22 42 75 127 213 369 668 1240 2296 4156 7281 12309 20095 31755 48714 72758 106090 151390 211879 291387
|
||||
-4 -11 -10 7 44 101 174 255 332 389 406 359 220 -43 -466 -1089 -1956 -3115 -4618 -6521 -8884
|
||||
6 13 27 55 126 305 707 1511 2974 5445 9379 15351 24070 36393 53339 76103 106070 144829 194187 256183 333102
|
||||
20 33 58 101 165 248 350 501 838 1791 4500 11709 29625 71674 165847 368562 789903 1638140 3296401 6452952 12322160
|
||||
23 39 62 92 129 173 224 282 347 419 498 584 677 777 884 998 1119 1247 1382 1524 1673
|
||||
8 23 43 75 141 283 577 1166 2326 4597 9059 17933 35875 72670 148631 305041 623716 1262615 2518947 4938203 9498009
|
||||
5 6 14 50 148 354 723 1323 2267 3805 6514 11618 21442 39941 73131 129065 216721 342776 504702 677906 793712
|
||||
17 39 77 145 271 506 944 1760 3284 6161 11714 22748 45250 91860 188860 390266 806371 1661427 3408743 6955423 14089337
|
||||
8 11 17 19 16 30 134 493 1416 3421 7337 14514 27296 50072 91574 169956 324336 641639 1319313 2809709 6143224
|
||||
20 40 82 157 276 450 690 1007 1412 1916 2530 3265 4132 5142 6306 7635 9140 10832 12722 14821 17140
|
||||
26 51 92 152 243 410 767 1551 3215 6604 13286 26131 50219 94068 170936 299469 502108 798261 1187076 1611454 1890399
|
||||
5 4 -3 -16 -37 -71 -118 -146 -26 614 2709 8433 22564 55138 126495 276803 584082 1198534 2408270 4765262 9325584
|
||||
16 24 24 20 20 33 68 136 256 466 840 1512 2708 4787 8292 14012 23056 36940 57688 87948 131124
|
||||
2 4 17 50 116 232 419 702 1110 1676 2437 3434 4712 6320 8311 10742 13674 17172 21305 26146 31772
|
||||
9 21 50 100 171 262 381 562 889 1527 2760 5036 9019 15648 26203 42378 66361 100921 149502 216324 306491
|
||||
13 19 47 108 224 444 870 1714 3432 7027 14700 31188 66405 140452 292753 598086 1193703 2323675 4409173 8156732 14720782
|
||||
9 14 24 54 143 367 864 1895 3980 8163 16475 32679 63396 119726 219493 390258 673259 1128452 1840842 2928308 4551141
|
||||
2 1 4 10 10 -19 -107 -262 -420 -378 302 2477 7844 19892 45891 100715 213678 440047 879496 1704492 3202470
|
||||
23 51 106 201 353 596 998 1681 2859 4937 8750 16060 30476 59057 115120 223470 430907 828331 1597490 3107587 6107791
|
||||
20 41 78 134 207 294 404 583 954 1767 3431 6461 11241 17567 24329 30972 45742 113631 394186 1354910 4215913
|
||||
24 44 85 162 305 572 1065 1962 3594 6612 12299 23081 43291 80299 146385 262490 466732 834112 1520337 2853824 5518005
|
||||
13 25 53 116 249 517 1041 2041 3906 7306 13366 23927 41924 71916 120808 198810 320683 507327 787771 1201630 1802099
|
||||
21 36 51 65 78 93 132 286 825 2400 6393 15550 35227 75980 158961 326806 664625 1338584 2663715 5218371 10030592
|
||||
-2 10 41 111 263 574 1177 2302 4346 7998 14498 26240 48213 91352 180004 367865 770694 1631114 3442799 7181181 14719595
|
||||
18 37 69 128 236 416 695 1128 1861 3265 6203 12558 26282 55463 116296 240439 488096 970361 1885949 3579504 6631284
|
||||
16 22 39 87 214 510 1121 2263 4236 7438 12379 19695 30162 44710 64437 90623 124744 168486 223759 292711 377742
|
||||
9 12 25 49 89 160 301 608 1312 2951 6717 15102 33027 69744 142059 280147 539226 1025523 1957432 3810972 7658912
|
||||
20 23 28 51 127 324 759 1624 3256 6337 12400 24960 51801 109240 229543 473023 946556 1830019 3410988 6125145 10594043
|
||||
13 41 81 141 250 464 868 1574 2715 4435 6875 10155 14352 19474 25430 31996 38777 45165 50293 52985 51702
|
||||
9 25 60 119 218 394 712 1273 2236 3882 6772 12095 22397 43107 85819 175561 367114 781429 1685305 3661271 7960379
|
||||
4 -3 -16 -36 -64 -101 -148 -206 -276 -359 -456 -568 -696 -841 -1004 -1186 -1388 -1611 -1856 -2124 -2416
|
||||
12 22 40 66 101 159 289 616 1428 3364 7800 17594 38458 81425 167274 334550 654272 1257026 2382572 4469306 8312199
|
||||
16 36 62 92 124 156 186 212 232 244 246 236 212 172 114 36 -64 -188 -338 -516 -724
|
||||
-7 -6 1 14 33 58 89 126 169 218 273 334 401 474 553 638 729 826 929 1038 1153
|
||||
21 41 85 171 323 570 943 1470 2169 3039 4049 5125 6135 6872 7035 6208 3837 -795 -8595 -20689 -38453
|
||||
0 2 3 7 42 189 631 1728 4124 8892 17723 33165 58918 100191 164127 260302 401304 603398 887283 1278947 1810626
|
||||
6 27 66 133 252 474 900 1733 3392 6747 13590 27567 55991 113275 227215 450074 877438 1679215 3149022 5780661 10383546
|
||||
9 31 60 105 196 390 771 1445 2548 4325 7416 13619 27615 60490 136517 305923 669051 1423011 2953492 6016853 12099022
|
||||
10 10 21 57 143 333 754 1693 3747 8052 16589 32520 60419 106134 175917 274623 403748 562914 764993 1088463 1815555
|
||||
0 11 47 123 250 438 717 1186 2100 4005 7931 15653 30030 55432 98265 167604 275944 440079 682119 1030655 1522082
|
||||
4 2 5 13 19 5 -59 -207 -444 -647 -311 2028 9979 31542 83085 196006 427388 876388 1708621 3191415 5743531
|
||||
21 28 30 24 16 36 154 489 1199 2436 4246 6390 8058 7444 1146 -16649 -55239 -128788 -258066 -472604 -813324
|
||||
2 1 3 8 31 126 434 1265 3232 7490 16224 33728 68807 139949 285947 586660 1201702 2439383 4874513 9541916 18242623
|
||||
11 15 11 0 -8 20 173 655 1882 4654 10510 22528 47110 97732 202274 416411 846705 1688621 3286965 6229712 11491728
|
||||
22 34 53 83 132 217 384 759 1656 3781 8578 18756 39018 77011 144606 259984 452078 771652 1319659 2317357 4271044
|
||||
-1 10 40 92 174 315 592 1169 2349 4640 8836 16114 28148 47241 76476 119887 182651 271302 393968 560632 783418
|
||||
11 27 70 166 357 711 1348 2493 4581 8479 15978 30885 61394 125101 259370 542362 1135062 2364307 4885498 10000015 20273388
|
||||
16 34 71 142 262 448 727 1148 1805 2912 5045 9795 21275 49208 114707 260357 566838 1179102 2346051 4478772 8233684
|
||||
-1 3 10 20 33 49 68 90 115 143 174 208 245 285 328 374 423 475 530 588 649
|
||||
8 19 45 96 187 347 635 1155 2072 3652 6373 11169 19859 35758 64343 113626 193536 313097 473469 653950 786771
|
||||
16 27 57 113 198 323 534 953 1841 3719 7634 15727 32332 65876 131823 256818 484209 881806 1555374 2678560 4566449
|
||||
6 15 32 61 113 206 365 622 1016 1593 2406 3515 4987 6896 9323 12356 16090 20627 26076 32553 40181
|
||||
12 22 41 78 161 360 818 1788 3675 7089 12934 22598 38391 64551 109515 190999 347381 663416 1328773 2771447 5959410
|
||||
20 37 57 82 120 202 409 905 1974 4070 7921 14798 27191 50372 95791 188266 381292 790377 1667237 3566548 7718806
|
||||
13 31 51 84 169 384 851 1731 3207 5457 8622 12766 17791 23206 27605 27891 19281 389 -3571 134438 850205
|
||||
12 30 69 155 343 727 1450 2720 4851 8376 14327 24862 44585 83254 161329 321456 652505 1340181 2773452 5766664 12017378
|
||||
7 33 73 127 195 277 373 483 607 745 897 1063 1243 1437 1645 1867 2103 2353 2617 2895 3187
|
||||
14 28 57 126 266 511 910 1580 2847 5550 11627 25187 54445 115233 237408 476507 934644 1797152 3395149 6309420 11538196
|
||||
12 20 31 64 149 337 730 1545 3236 6713 13717 27432 53431 101047 185216 328782 565363 943750 1538049 2477213 4031782
|
||||
4 9 15 22 30 39 49 60 72 85 99 114 130 147 165 184 204 225 247 270 294
|
||||
8 16 40 86 162 281 478 850 1629 3313 6920 14505 30198 62187 126285 251980 492162 938034 1741020 3143748 5522366
|
||||
16 27 42 65 100 151 222 317 440 595 786 1017 1292 1615 1990 2421 2912 3467 4090 4785 5556
|
||||
6 20 54 122 238 416 670 1014 1462 2028 2726 3570 4574 5752 7118 8686 10470 12484 14742 17258 20046
|
||||
9 24 58 124 248 479 909 1713 3230 6126 11716 22596 43907 85957 169853 339829 690242 1423895 2975313 6264575 13205537
|
||||
10 30 69 129 215 346 572 997 1808 3310 5967 10449 17685 28922 45790 70373 105286 153758 219721 307905 423939
|
||||
5 6 12 44 147 410 1009 2300 5014 10641 22129 45070 89636 173785 328969 611348 1125520 2076190 3879935 7401246 14436738
|
||||
4 23 58 126 255 497 955 1823 3438 6343 11360 19672 32913 53265 83561 127393 189224 274503 389782 542834 742771
|
||||
-3 3 14 23 25 25 43 111 257 471 648 503 -547 -3539 -10163 -23009 -45867 -84085 -144990 -238377 -377071
|
||||
24 32 45 77 159 360 827 1863 4068 8584 17521 34717 67143 127585 239871 449153 842175 1587195 3012500 5760444 11088242
|
||||
-1 -10 -11 17 100 263 524 900 1447 2377 4337 9008 20296 46552 104484 225721 467367 928352 1773957 3271571 5841540
|
||||
7 9 21 54 125 261 505 927 1647 2882 5033 8829 15541 27268 47277 80348 133031 213663 331917 497560 717981
|
||||
10 25 59 126 244 435 733 1209 2021 3494 6227 11208 19891 34148 55951 86561 124900 164655 189507 165690 30862
|
||||
17 39 65 91 129 232 527 1254 2820 5913 11798 23063 45363 91274 188528 397238 845276 1799567 3807034 7968541 16464470
|
||||
10 5 8 41 136 332 666 1164 1850 2805 4324 7237 13480 27024 55294 111236 216218 403981 725888 1257753 2108568
|
||||
23 28 45 103 240 500 936 1633 2784 4889 9214 18760 40184 87465 188797 399575 827065 1677498 3345611 6582649 12805268
|
||||
16 36 75 162 343 693 1348 2572 4878 9227 17344 32245 59237 108076 197887 368248 703127 1380167 2768016 5612597 11386394
|
||||
9 25 48 72 98 137 208 331 515 741 940 966 564 -667 -3316 -8207 -16451 -29503 -49224 -77948 -118554
|
||||
8 11 19 51 147 387 916 1974 3939 7405 13332 23309 39939 67244 110732 176273 266070 368619 437421 350083 -164985
|
||||
1 18 58 126 237 431 788 1443 2601 4552 7686 12508 19653 29901 44192 63641 89553 123438 167026 222282 291421
|
||||
6 14 44 113 249 499 946 1753 3263 6207 12115 24099 48316 96714 192312 379634 745628 1461428 2864106 5612169 10971811
|
||||
3 -1 -4 15 107 376 1022 2428 5329 11117 22350 43537 82253 150582 266772 456790 755159 1204011 1848664 2727187 3850311
|
||||
-2 11 36 86 184 371 731 1440 2846 5587 10754 20106 36344 63451 107105 175172 278286 430523 650176 960638 1391400
|
||||
2 12 49 136 307 612 1119 1915 3118 4931 7803 12816 22494 42330 83446 166930 330518 638386 1194857 2162772 3787073
|
||||
14 23 56 129 259 471 826 1484 2816 5579 11168 21959 41757 76363 134274 227530 372722 592175 915320 1380269 2035607
|
||||
-3 10 37 93 208 427 810 1432 2383 3768 5707 8335 11802 16273 21928 28962 37585 48022 60513 75313 92692
|
||||
14 26 51 89 140 204 281 371 474 590 719 861 1016 1184 1365 1559 1766 1986 2219 2465 2724
|
||||
13 18 22 22 18 15 24 62 151 316 582 970 1492 2145 2904 3714 4481 5062 5254 4782 3286
|
||||
2 9 33 96 243 556 1172 2313 4353 7978 14545 26820 50378 96085 184258 351319 660028 1214703 2183217 3828008 6548853
|
||||
16 14 18 44 112 244 468 833 1440 2494 4382 7782 13808 24196 41536 69555 113456 180318 279562 423488 627888
|
||||
26 51 102 207 421 842 1643 3133 5872 10895 20161 37455 70161 132626 252290 480413 910142 1705891 3149624 5711711 10156653
|
||||
-8 -9 -5 6 26 57 101 160 236 331 447 586 750 941 1161 1412 1696 2015 2371 2766 3202
|
||||
6 11 36 109 272 579 1093 1890 3099 5048 8652 16275 33429 71844 154659 324750 657532 1279953 2397844 4334305 7582398
|
||||
12 13 19 49 142 372 874 1886 3822 7408 13943 25807 47456 87359 161694 301190 563352 1053519 1959875 3609765 6557578
|
||||
3 11 30 60 101 153 216 290 375 471 578 696 825 965 1116 1278 1451 1635 1830 2036 2253
|
||||
2 5 14 38 86 167 290 464 698 1001 1382 1850 2414 3083 3866 4772 5810 6989 8318 9806 11462
|
||||
12 14 25 57 123 242 448 813 1520 3071 6796 15951 37865 87827 195703 416649 847748 1652956 3099403 5608869 9829151
|
||||
11 19 46 109 234 461 861 1576 2893 5363 9976 18403 33316 58797 100847 168006 272095 429091 660146 992761 1462126
|
||||
12 23 46 76 103 123 168 360 988 2610 6216 13584 28159 57134 115970 237426 488356 999153 2012874 3963868 7599263
|
||||
10 27 58 116 238 503 1059 2170 4308 8331 15813 29644 55142 102218 189816 355285 674142 1300799 2549636 5050248 10033414
|
||||
-1 -4 -11 -23 -41 -66 -99 -141 -193 -256 -331 -419 -521 -638 -771 -921 -1089 -1276 -1483 -1711 -1961
|
||||
25 51 96 173 317 600 1159 2245 4300 8080 14874 26942 48463 87669 161677 307220 603675 1220565 2511928 5198007 10707121
|
||||
6 28 60 95 122 126 88 -15 -210 -528 -1004 -1677 -2590 -3790 -5328 -7259 -9642 -12540 -16020 -20153 -25014
|
||||
14 27 46 83 176 401 886 1840 3627 6937 13133 24885 47239 89311 166843 305910 548124 957743 1631160 2709319 4393682
|
||||
16 28 49 81 128 208 369 702 1349 2526 4627 8552 16517 33764 71801 154073 325302 666144 1315301 2501803 4590846
|
||||
28 43 66 110 191 336 602 1103 2052 3863 7434 14852 30927 66172 142094 299937 614308 1213403 2307810 4230074 7487335
|
||||
17 21 36 76 171 394 901 1991 4208 8544 16875 32885 63920 124479 242406 469310 897323 1685023 3096214 5556282 9732049
|
||||
20 27 37 61 114 218 416 815 1700 3806 8912 21041 48724 109025 234339 483377 958252 1830189 3377111 6037213 10483638
|
||||
0 13 36 73 134 248 489 1018 2144 4402 8643 16149 28862 50022 85992 151103 279532 552483 1156778 2504561 5466066
|
||||
7 5 0 -5 0 33 133 396 1045 2545 5774 12261 24502 46365 83595 144430 240339 386893 604780 920975 1370076
|
||||
13 9 9 34 128 365 862 1820 3630 7095 13832 26934 52012 98876 184552 339505 621668 1148550 2168444 4210603 8385165
|
||||
-5 -12 -23 -30 -18 35 158 387 765 1342 2175 3328 4872 6885 9452 12665 16623 21432 27205 34062 42130
|
||||
5 9 17 39 105 283 715 1694 3815 8241 17147 34472 67267 128237 240613 447347 827905 1527761 2808205 5127421 9268133
|
||||
25 37 57 106 230 518 1137 2397 4859 9508 18054 33532 61594 113281 210702 398013 761477 1464303 2804527 5307542 9869150
|
||||
11 17 46 114 241 455 798 1334 2159 3413 5294 8074 12117 17899 26030 37278 52595 73145 100334 135842 181657
|
||||
4 -1 -4 12 78 257 677 1583 3423 7014 13911 27274 53877 108552 223482 466589 976170 2023577 4123518 8225636 16048444
|
||||
0 1 0 -3 -8 -15 -24 -35 -48 -63 -80 -99 -120 -143 -168 -195 -224 -255 -288 -323 -360
|
||||
11 18 29 49 92 206 522 1339 3257 7370 15531 30701 57394 102230 174608 287511 458455 710594 1073993 1587081 2298296
|
||||
13 15 9 -12 -48 -79 -45 193 934 2793 6973 15712 33032 66133 128347 245886 473338 927958 1861532 3802331 7819427
|
||||
2 6 10 14 18 22 26 30 34 38 42 46 50 54 58 62 66 70 74 78 82
|
||||
11 27 52 97 186 362 709 1407 2852 5898 12324 25725 53226 108808 219736 438752 866576 1692276 3264166 6213201 11668991
|
||||
4 13 42 103 207 362 569 822 1123 1528 2245 3810 7372 15123 30914 61103 115686 209767 365428 614065 999261
|
||||
15 21 37 86 203 434 831 1439 2272 3276 4278 4921 4586 2303 -3346 -14328 -33259 -63497 -109221 -175488 -268259
|
||||
11 16 28 64 160 393 913 1979 3985 7464 13083 21703 34688 54819 88416 149606 268111 502480 961366 1836266 3450112
|
||||
19 28 52 114 257 565 1198 2452 4861 9361 17538 31985 56799 98260 165752 273013 439839 694418 1076536 1641980 2468565
|
||||
15 15 13 12 12 1 -45 -137 -191 184 2178 8829 27103 71775 172317 384631 810367 1627833 3140255 5849526 10566770
|
||||
12 11 5 -6 -22 -43 -69 -100 -136 -177 -223 -274 -330 -391 -457 -528 -604 -685 -771 -862 -958
|
||||
14 26 38 50 62 74 86 98 110 122 134 146 158 170 182 194 206 218 230 242 254
|
||||
13 19 31 63 138 294 607 1239 2530 5172 10540 21334 42843 85426 169298 333601 653532 1273267 2471552 4797589 9360217
|
||||
11 3 -4 4 47 149 343 691 1325 2507 4689 8539 14934 25131 41979 74636 152691 362315 929342 2395398 5968245
|
||||
18 22 40 91 193 361 613 998 1668 3038 6128 13283 29669 66335 146381 317205 674569 1409654 2901085 5895585 11864268
|
||||
11 37 82 161 309 586 1087 1974 3560 6490 12081 22905 43732 83003 155088 283716 507161 886051 1515060 2540273 4184711
|
||||
25 39 52 67 92 144 269 587 1366 3134 6880 14520 30088 62684 133303 289715 637379 1401437 3047748 6514061 13642856
|
||||
4 -4 -20 -50 -102 -185 -302 -435 -512 -331 602 3393 10381 26381 61265 135375 290656 612718 1272684 2603156 5230544
|
||||
16 37 62 103 197 413 863 1725 3295 6108 11215 20791 39404 76543 151493 302640 605473 1208410 2406047 4790866 9565986
|
||||
18 28 36 48 72 117 192 305 462 666 916 1206 1524 1851 2160 2415 2570 2568 2340 1804 864
|
||||
6 31 75 155 307 590 1091 1932 3290 5463 9049 15351 27179 50290 95789 183908 349686 651191 1181055 2082235 3569067
|
||||
13 24 44 80 152 311 679 1524 3380 7215 14639 28129 51229 88660 146248 230547 347999 503434 697670 923926 1162710
|
||||
10 22 32 51 114 303 788 1898 4249 8981 18195 35742 68605 129235 239371 436181 782284 1383028 2418714 4208909 7345156
|
||||
7 30 81 174 320 532 841 1335 2242 4084 7930 15770 31017 59118 108216 189751 318817 514002 796327 1186766 1701670
|
||||
14 27 59 134 293 607 1198 2270 4163 7468 13293 23865 43815 82762 160259 314926 620952 1217673 2362755 4528740 8580085
|
||||
8 12 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88
|
||||
8 0 -4 18 98 273 583 1076 1829 3005 4987 8667 16029 31260 62764 126655 252582 493110 938366 1738280 3135532
|
||||
-3 4 19 42 73 112 159 214 277 348 427 514 609 712 823 942 1069 1204 1347 1498 1657
|
||||
14 24 32 37 53 130 397 1139 2922 6787 14546 29230 55761 101947 179931 308262 514798 840698 1345812 2115835 3271653
|
||||
7 23 56 112 206 369 661 1190 2131 3727 6237 9780 14024 17718 18228 11631 -5265 -28077 -27602 87844 547546
|
||||
23 36 62 118 231 444 832 1544 2899 5581 11011 22063 44521 90194 183657 376560 777027 1608138 3321360 6812948 13832967
|
||||
8 0 -5 4 43 136 319 644 1176 1961 2930 3727 3573 1607 -1170 4025 48104 214582 698717 1914790 4680631
|
||||
6 17 37 64 93 116 122 97 24 -117 -349 -698 -1193 -1866 -2752 -3889 -5318 -7083 -9231 -11812 -14879
|
||||
-2 -7 -2 33 136 369 821 1608 2870 4765 7460 11119 15888 21877 29139 37646 47262 57713 68554 79133 88552
|
||||
18 20 30 66 151 310 570 972 1603 2653 4499 7817 13726 23977 41217 69385 114336 184842 294188 462668 721393
|
||||
3 0 -3 -6 -9 -12 -15 -18 -21 -24 -27 -30 -33 -36 -39 -42 -45 -48 -51 -54 -57
|
||||
16 28 38 46 52 56 58 58 56 52 46 38 28 16 2 -14 -32 -52 -74 -98 -124
|
||||
3
input/day09_example.txt
Normal file
3
input/day09_example.txt
Normal file
@@ -0,0 +1,3 @@
|
||||
0 3 6 9 12 15
|
||||
1 3 6 10 15 21
|
||||
10 13 16 21 30 45
|
||||
140
input/day10.txt
Normal file
140
input/day10.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
FF-7F-7.|FJ7L-7-.FL-F7|-7FFF77J.|7F--J-FF7-L..-7FF-LF7F|-F|7-L-FLJ7-FF-JFF-7-7.-J-.--7.-F---FJ-|..-J7.|J-77-F7---77FFLJ7.LFJF7.FL|-J--7-LJ-|
|
||||
J.-L-JF-L7J|LL|7FL7LL||.LJ--J7JFL|J7|7.JLJ|L-L7L7-7J|L7|L||..|7L.L7.FL7-L--L-JLJ..FLJ|F7L|7-JJ-LLLJJLF..F77FLJ7FF7-L7|-L7-|7|.FFJJJ7L-LJ|..J
|
||||
||..L7.LL-7J-.F77F7JF|--L.|7LJ-J.L-FF7J...|||JFJLJ7.L-L77L|.7.||7-J7J7LFJ.7F||-|.7LL77.JLJJ7|F|F|..F.|.FLLL-.---F-7.F7J.7-JLL7--77.|FFJ.7F7J
|
||||
F-7J.L-7LFJJ7.LF-F77.|LFLFFJ|JJL7JLL|JLF--7J7-L.|FJ.LF-J--L-|.L7LL|7.-J|L|--F7JL7L.LLJFL-J7.77-7777F-F7F7F-J7F|.J|L7L|LFJLJ7L77|-|77-F-F-7L|
|
||||
.-7||7J7.JJFF-.|FJ|.LL.J.|LFJ.L-LJFFL7FJF-J|F7|-77J.F7LF-F|77-F|7..F-JFL.J|||7.FFJ.FJFFJLJ7FLJJ||FF7FJL--7J.||-FL-JL-JFL.LJ|J.L.|.L777|.FL77
|
||||
JJ.J-L-77.L||L7|LJF-7|F.FJ7|L-7LL7..LFJFJF7FJ|F--777F7JJJLF7--JJ.F.FL-|7-LFFJL7LJ..J-JL7F7L|7|-7-J|LJF-7FJ-F7J|LFJF7|.|FJ.FL7FF|-F.J7---7LFJ
|
||||
LLL|.FLJF-7LJ|J||...LJJ-7JF|.||.LJ.FFL7|-|||FJL-7L--JL777..L-77--JF|J7L7.7.J7FLJ|L77F|-FF77||F7JL-L-7L7LJJJL77F|JF|||F|-|F|7.F7JL|F-FJ|LL--7
|
||||
F|||FFJ7|7--|-7JF7-FJ||-F7JJ--7F|FF7LFJ|FJLJL7F7|F--7FJF|.J|F--7L-7.|LFJL..|L||JJ7|--L-FJL77.F|7F7F-JFJ.LJJ.L-|7-FLLJ||7|L77F-JF77J-|-F-L-7J
|
||||
L-L7-|7LFL.L|J.|L-7F77-.7J..||77|--F7L7|L7F7FJ|LJL7LLJJ7|FL--|FL-FFF7J||JF-J7L7JL|J|.||L7FJJ7LFF7-L7FJLF..|F-JJ|LJJFLF-7J.J.77FJLF..FJFJ.F-.
|
||||
FL|LJL|7L7F-||.FJLLJ||-7JF7-|JL|JF7||J||LLJ||FJF7FJ-F7FF--7|7.|.--FJ|F7|F7-F-F-7.F7F-F-7|L7LFF-J|7|||F7F77F7.|L7.|FL-|||LF|L77L--LL7.-JLJ-.|
|
||||
|L|7F-F-.J7-FJ-L-.F|J77|F7|-J7|LF7FJL-J|F7FJ|L-J||F-JL7L-7|F77L7JLL7LJ|FJL777L7L7JFF7L7|L7|F7L7FJF7||||||FJL77.L---J.L7|.F|JFJ..77L77-L.|L7.
|
||||
|L|L-7L---JFJ|L-|7FL7|LJL|JJ|F7J||L---7||||FJF7FJLJF7FJF-J||L7-|FF7L-7||F-J.FJL7|F7||FJ|FJLJ|FJ|7|LJ||||||F-JF77.||LF7||-FFFL--|J7FL|F|LJF|7
|
||||
-7-JJ|JFL.|JJF7-L7LJ7|-.-JJLFJL7||-F7FJLJ||L7||L7F-JLJ-|F7||FJ-F7|L7FJLJ|JF7F7FJLJ|||L7LJF--JL7L7L7FJ|LJLJL7FJ|F-7|.F7F7-FJ.F7-J-FL.LF7FLF-J
|
||||
.L|J|LF-|-|.L-JFF7-L7J|.L|L-|F-J||FJ|L--7|L7LJ|FJL---7-LJ|||L-7|||FJL-7FJ-||||L--7||L7L-7L-7F7L7|J||||F----JL7||FJ77|LJ|F7|-7|LJLJJ7L|LJ|L|7
|
||||
|||.7-|F|FL7FJ-|L.|7|---77-FJ|LFJ|L7|F--JL7L-7LJF----JF7FJ||F-J|LJL7F7|L-7||||F7L|LJFJF7|F-J||FJ|FJL-J|F7.F7FJ||L7F7L-7LJ|-JF7JLF-----|-F-7J
|
||||
L|L-.-7-|L7.-.FJF-LLJ-.|F-7L7|FJFJ-||L-7F7L--JF-JF7F7J||L7||L7LL7F-J|LJF-J|||||L7L-7L-J|||F7||L7|L---7||L7||L7LJFJ||F-JF-J|J||F---7..FLJ|FLJ
|
||||
.L7.FL|.7LF-|-JLLJLJ|7FFL7L-JLJFJF7|L-7LJL7F-7|F-JLJL7|L7|||FJF-JL77L-7L7L|LJ|L7|F7L--7||||LJL7||-F7FJLJFJ|L7|F-J.|||F7|F---JL7|F--7.F-7-77J
|
||||
.FF7FFL7LL|J|FLFJ--|77L-FL----7L-J|L-7|7F7LJ-|||F----JL7||LJL7L7F-JF7FL7L7L-7L7|||L-7FJ|||L7F-J|L7||L--7L7L7LJL7F7||||LJ|F----JJJJ|J--7LFFL7
|
||||
-J.FFJ-|F-J|L--|-|FLFL-.F7F--7|F7FJ-FJ|FJ|F-7||||F7-F-7||L7F-JFJ|F7||F7|FJF7L7LJ|L7FJL7LJ|FJ|F7L7|||F7|L7L-JF--J|||LJL7FJL---7|.L77--J|-JJL7
|
||||
LLFJFJJ|-J-L7LFF-J-L|-FF||L-7|||LJF7L7LJFJL7||LJ||L7L7|||FJL7FJFJ|||LJ||L-JL7L-7L7|L-7L-7LJFJ|L7|LJ|||F7|F--JF--J|L-7FJL7F---JF7JLJ-|J.FFJF7
|
||||
FLJ|LF7.|F7-|-FJ-7|.LF7FJL7J|||L7FJL7L7FJ-FJ|L7FJL7L7|||LJF-J|FJFJ|L7FJL---7L7F|FJ|F-JF7L7FJL|FJL-7||||LJL-7LL7F-JF-JL7FJL----JL-7J7LF--7.LJ
|
||||
L--7.FJ-F--.F7LF---7-||L-7|FJLJFJL-7|FJ|F7L7L-JL7FJFJ|||F-JF-JL7L7|||L-7FF7|FJFJL-J|F7|L-JL7FJ|F7FJ||||F7F7L7FJL-7L--7||F-7F-----J7-F|7.J-J|
|
||||
LJJJ--JFJ-|F|-7|F|.J7|L--JLJF-7L7F7||L7LJ|-L-7F-JL7||||||F7L-7FJFJ|FJF-JFJLJL7L7F7FJ||L--7FJL7LJ|L7|||||LJL-J|F-7|F-7|LJ|JLJ.F7JLJLFLL7.LJFJ
|
||||
F|-7-|LF-FFJ|.7----.-L-7F7F7L7L7LJ|||||F-JF7FJ|LF7|L7|||||L77|L7L7|L7L-7L7F--JF||||FJL7F-J|F7|F-JFJ|||||F7F--JL7LJL7LJF7L7F--JL7LF-7.J7FJF|.
|
||||
JJJ||.FFF7.FL-F7JLFL-F7LJ||L-J-L-7|||FJL7FJLJFJFJLJFJ||||L7L-JFJFJ|FJF-JFJL-7F7LJ|LJF-JL-7||LJL-7|FJ|||LJ||F---JF--JF-JL-JL--7FJ...|-7FF7FF|
|
||||
.F-J.--7J|77..FF7-|.FJ|F7LJ7F7F7-||||L7FJL--7L7L--7|L|||L7|F--JF|FJ|FJF7L7F-J||LFJF-J.F--J|L-7F7LJ|FJLJF-J|L---7L--7L---7F7F-JL-7-JLLF-JLLF7
|
||||
L7FLF-F--L-|FFL||JJ.L7|||F7FJLJL-J||L7||F7F-JFJF--JL7|LJFJ|L7F-7||FJL-J|FJL-7|L7L7L--7L--7L7FJ||F7||F--J7FJF---JF7FJF---J||L7F--JJL7L|F7.LL|
|
||||
.L7FL-|||.|.FF.||F7.FJLJ|||L7F7F-7|L7LJ|||L-7L7L--7FJ|F-JJL7|L7|||L--7FJL7F-JL7|7|F--JF7.|FJL-JLJ|||L--7FJFJF--7||L7L---7||F||F7|FFL-F|J7.FJ
|
||||
JL7|F-J7-J-F7JF|LJL7L--7||||LJLJF||7L-7LJ|F-JFJF--J|FJL7F7FJL7|LJ|F7FJ|F-J|F7FJL7||FF-JL7||F7F7F7|||F--JL7|LL-7|||FJF-7FJ|L-JLJL-7777F.|FL7|
|
||||
L||L||F.F|.F7F7L--7L7FFJ|||F--7F-JL---JF-JL-7L7L--7||F-J||L7FJL7FJ||L7||F-J||L-7||L7L--7||||||||LJLJL--7L|L--7|||LJFJJLJL|F-7F---J.J-L-77-F7
|
||||
FF7-F--777FJ|||F--JFJFJFJ|||F-JL------7|F7LFJFJF7FJLJ|F-J|FJ|F7|L7|L7||||F7|L-7||L7|F7FJLJLJ||||F7F-7F-JFJF-7||LJF-JF-7F7|L7|L77|LLJ.JLLJ.LF
|
||||
|L77L-7L-7|FJ||L--7L7L7|FJLJL7F7-F7F7FJ||L7L7|FJ|L7F7LJF7|L7LJ|L7LJFJ|LJ||LJF-J|L7||||L---7FJ||LJ|L7LJF7L7L7LJL-7L-7|FJ|LJFJL7L77J..7|.LL77|
|
||||
|7.F|||F7LJ|FJ|LF-JFJ|||L--7FJ||FJ||||FJ|FJFJ|L7L7LJ|F-JLJ7L7FJL|F-JFL-7|L7FJ-FJFJ|LJ|JF7FJL7||F-JFJF7||JL7L7F7FJF-J||FJF7L-7L7|-.-L|FJ-LJFJ
|
||||
F77.F7LJL-7|L7L7L-7|JFJL7F7|L7||L7LJ||L7||FJFJFJFJ.FJL7F--7FJL-7|L7F7F7||FJL7FJFJ-|F-JFJ||F-J||L-7L7|LJ|F7|FJ|||FJF7|LJFJL-7L7LJJ.LLLJJFF7J|
|
||||
||77||F---JL-JFJF-JL7L-7LJLJFJ||-L-7||FJ||L7|F|FJF7L7FJL-7|L7F-J|FJ||||||L-7|L7|F7||F7L7|||F7||F7|FJL-7||LJ|FJ||L-JLJF7L--7|FJ7LL|.|.|-7J|--
|
||||
|L7F||L--7F--7L7L--7L77L---7L7|L---JLJL7|L7|L7||FJ|FJL7F7|L7|L7FJ|FJ|||||F7|L7|||||||L-J|||||||||||F-7|LJF-JL7LJF----J|F--JLJFF7JLLF|7.LL|.|
|
||||
L7L-J|F7-LJF7|FJF--JFJF77F7|FJ|F----7F7|L7LJJ||LJFJL7LLJ|L7|L7||FJL7||||||||.LJ||||||7F-J|LJ|||||||L7||.FJF7FJF7L--7F7||F7F7F7||7.FLJLF-7LFJ
|
||||
LL7F7LJ|F7FJLJL7L--7L7||FJLJL7LJFF7FJ|||FJF--JL-7L-7L--7L-J|FJLJL7FJLJ||LJ|L7F-J|LJ|L7|F7L7FJ|LJ|||FJ|L7L-JLJFJ|F7FJ||LJ|LJ||||L7-|J||.|L-L.
|
||||
|FLJL7FJ||L--7FJ7F-JFJ||L---7|F7FJLJFJ||L7L7F7F-JF-JF--JF--JL--7.|L-7FJ||FJFJL-7L-7L7|||L7||FJLFJ||L7L-JF-7F7L7|||L-JL-7|F-J|LJFJJJF-.7-7|..
|
||||
F7JF7|L-JL---JL--JF7L-JL--7FJLJ|L--7|FJ|FJLLJ||7FJF7L--7L--7F--JFJF-JL7L7L7L7LFJF-JJ||||FJ||L-7L7|L7L--7L7LJL-JLJL--7F-J||JFJF-JJFLF7F77L7-F
|
||||
FF7|LJF7F----7F7F7|L7F--7FJL-7FJJF7LJL7LJFF--J|FJFJ|F-7||F-JL--7L7L7-|L7L7L7L7L7L--7||LJL-J|F-JFJL7L-7FJ7L---------7|L--JL7L7|F-----7-FL7|LF
|
||||
FJLJF7|LJF---J|||||LLJF-JL-77|L--JL---JJF7L7F-JL7L7|L7LJFJF7F-7L7L7L7F-JFJ.L-J.|F--J||F----JL-7L7FJF-J|F------7F-7FJ|F---7L-JLJF----JJ|.F.7.
|
||||
L--7||L7-L-7F7|||LJF7FJF7F7L7L--7F------J|FJ|FF7|FJL7L-7L7|||FJFJFJFJL7FJJF7F--JL--7LJL-7F7F-7L7|L7L-7|L-----7LJJLJFJL--7L-----JF-7-J.F7L-7J
|
||||
LJFJ||FJF--J|LJ||F-JLJFJ||L7L---JL7F----7|L7L7|LJ|F7L7FJ-|||||FJFJFJ7FJL-7|LJF--7F-JFF7LLJ||FJFJ|FJF-J|F-----JF---7L7F7FJ|F7F7F7|FJ.|7LJ-LJ.
|
||||
L-L7||L7L7F7|F-J|L7F-7|JLJFJF-7F--JL---7LJJ|FJ|F7LJL7|L-7LJ||LJ|L7L-7|F--JL-7|F-JL---J|F--J|L-JFJL7L7FJL------JF--JFJ||L-7|LJLJLJL77J-.JJ|-J
|
||||
|7LLJL-JFJ|LJL-7|LLJF||F-7L-J-||LF-----JF7FJL7||L7F-J|F7L7FJL--7FL7FJ|L-7JF-J|L-7F7F7FJL--7L--7|F-JLLJF--------JF7LL-J|F7LJF7F7F7FJ.J.L-FL-7
|
||||
LL77.L|JL7|7F--J|F7F7LJL7|F7F-JL7|F7F7F7|||F-JLJFJL-7||L7||F7F7|F-J|FJF7|FJF7|F-J||||L-7F-JF7FJ||F---7L---------JL-7F-J|L-7|LJLJ||L7|7|FL-LJ
|
||||
FJ--F-JLLLJFJF7FJ|LJL---JLJLJF--JLJLJLJLJ|LJFF-7L7F-J||FJ|||LJ||L7FJL7||||FJ|||F7|||L--JL-7||||LJL--7L----7F7F-----JL7FJF7|L-7F-J|7L--FL-77|
|
||||
-|J|F-7||F-JFJLJJL--7F7F7F7F7|F---------7L---JFJJ|L-7LJL7||L-7||FJL7FJ|||||FJ|||LJ|L--7F--J|||F7F7F7L--7F7LJ|L------7LJ|||L--JL-7L7.L-7JF|FF
|
||||
L|.FL||-7L7FJF7F7F7.LJ||||||LJL7F------7L7F---JF-JF7L7F7||L7FJ|||F7|L7|LJ||L7||L77L7F7|L7F7|LJ|LJLJL---J||F7L-------JF-7|L--7LLLL-JJ.|JLFLJL
|
||||
-7-L-JJJF-J|FJLJLJL7F7LJ||||F-7||F-----JF||F7|FJF7|L7LJ||L7||F||LJ|L7||F-J|FJ|L7L-7LJLJFJ|||F-JF----7F7FJLJL-7F---7F7L7||F--J7J-F|FLF.FFL-L.
|
||||
FJFJ7L-.L7FJL-7F--7|||F-J|LJL7LJ|L---7F-7|LJL7L-J|L7|F7||FJ|L7|L7FJFJLJL-7||FJFJF7L--7.L-JLJL--JFF--J|LJF-7F7LJF-7LJL-JLJL7F7FF77LLJ|F7J77|.
|
||||
|L7F-JL-J|L77L||F-JLJ|L7FJF--JF-JF7F-J|FJL---JF-7L-JLJLJ||-L7||FJL7L---7FJ|LJ-L7||F--JF-77F7F7F-7L--SJF7L7LJ|F7|F|F---7F-7LJL-J|7.|--J.F7777
|
||||
L.FJF|7|7L7L7FLJL---7|FLJJL7F7L7FJLJJFJL7F--7FJFJF----7FJL-7||||F-JF---JL7|F--7|||L--7L7L-JLJ|L7|7F---JL-JF7LJLJFJL-77||||F----J-.F.FJ-7LL-7
|
||||
|LJ|-|--7LL-JF7F----JL7F-7FJ||FJL----JF7||F-JL7L7L7F--J|F--J||||L-7L----7|||F7LJ||F--J7L----7L-JL-JF------JL7F-7L7F7L7|L7|L----777FFLJ7L-J|J
|
||||
|J7JFJJJ|FF7.||L7F---7||FJL-JLJF------J|LJL-7.|FJFJL-7.LJJF7LJ|L7FJF-7F7|LJLJL-7||L--7F7F7F-JF7F7F7|F------7||FJ-LJL7|L-JL-----JF--7LL777.L|
|
||||
.F--L7F-7L|L-JL7LJ7F-J|||F7F7F-JF7F7F7.L---7L7|L7|F7FJF7F7|L-7|FJL7L7||||FF----J||F--J||||L--JLJLJLJL----7FJLJL7F7|-LJ-F-----7F7L-7L77F7J-77
|
||||
F7|.LL-L|||F--7L-7FJF7LJLJ|||L--J||LJL7F7F7L-J|FJ||LJFJLJ|L-7||L7FJFJLJ||FJF-7F7|||JF-J|||F-7F--7F-------J|F7F7LJL7F7FFJF7F-7|||F7|FJF||||LL
|
||||
7L7FJFF-LFJ|F-JF7LJFJL7F-7||L7F77LJF-7LJLJL7F7|L-JL77|F-7|F7||L-JL7L--7||L-JLLJ|||L7|F7LJLJFJL7FJL----7F-7LJLJ|F-7LJ|FJFJLJ||||||LJL7FJL7J7J
|
||||
|.L7|LJ|JL-JL--JL7FJ7FLJ||LJFJ||F--J.L7F7F7LJLJF7F7L7||||LJLJL---7|F-7|LJFF7.F-J|L-JLJL---7|F7|L7LF---JL7L---7|L7|F-JL7L-7F7LJ||L-7FJ|F-J-|7
|
||||
JFFJLJ|LFJLLLF---J|F7F7F7L-7|7||L--7F7LJ||L7F7FJLJL7LJL7L-7F-7F7FJ||LLJ-LFJ|FJF7|F--7F-7F-JLJ|L7L7L--7F-JF---JL-JLJF7FJF-J||F7||F-J|FJL-7J||
|
||||
|7LF|.|-F7J-FL----J|LJLJL--JL7||.F7LJL7FJL7LJ|L7JF7|F-7L-7||JLJ|L7LJ||7.LL7LJFJLJL-7|L7|L---7|7L7|LF7|L7FJF-------7||L7L-7||||||L-7LJF--J.FJ
|
||||
F7L7JL.LLLF7F7F----JF7F7F7F-7LJL-JL---JL7FJF-JFJFJ||L7L7FJLJ7|7|FJJLFJ7L-LL7FJF----JL-JL----JL--J|FJLJFJL7|F------J||L|F-J|||||L7LL7FJFF7JJJ
|
||||
.LJL.|L-7.|LJ|L--7F-JLJLJLJ7L---------7FLJFL--JLL7|L-JFJ|F7||F-||JF.|FJJLLLLJ-|F--7F7F7F7F--7F7F7LJF-7L-7LJ|7F---7L||FJ|F7|||||FJF-J|F7||..F
|
||||
|....-7FJ7L-7L---JL7F----------------7L---7F7JF7FJL--7L7LJL7-|.LJJL-.L7JF77.|JLJF-J|LJLJLJF7||||L7FJFL--JF7L7L7F-JFJ|L7LJLJLJLJL-JF7LJLJL-7J
|
||||
7.F77.L-L7|.|F7F7F7|L7F7F7F7F--7F---7L7F--J||FJLJF7F7L7L7F7L7-7LJJF|-7F-JL7...|JL-7|F-7F--JLJ|||FJL7F7F7FJL7L-J|F7L7|FJF------7F7FJ|F7F7F7|7
|
||||
J7.|J..||L7-LJ||||||.LJLJLJ||F-J|F7FJ.LJFF-JLJF-7|LJL-JL||L7|.L.L-7.L7JF|-LJF|J7|LLJL7|L-7F-7|LJL-7||LJ|L-7|F--J|L7|||FJF7F7F7LJLJFLJ||LJLJ7
|
||||
L7F7|FLF7.LFJL||LJLJF7F7JF7LJL--J|LJF7JF-JF-7FJF|L----7FJL7LJ--J|F7-F777|7|LF77LF7F--JL--J|FJL7F-7LJL-7L--J|L---JFJ|LJL-JLJLJL7F----7|L-7F|J
|
||||
LL|LJ7-|7F-J..||F-7FJLJL7||F7F7F7L--JL-JF7L7|L-7L--7F-JL--JJ-|7|F|.LLLLLLF7.|L7-||L7F----7|L7FJL7L-7F-JF--7L7F7F7L-JF--7F7F7F7LJF7F7|L-7|J.|
|
||||
-JJF|JF-JJ.F7-LJL7LJF7F7LJLJLJ||L---7F-7|L-J|F-J.F7LJF7F7F7J.LLJ7|FF7FJL|.L-L7L-JL7LJF7F-J|FJ|F7L-7|L--JF-J|LJLJ|F-7L7|LJ||LJL7FJLJLJ|LLJ--L
|
||||
.|FL|FJ7L7FJ|LLF7L--JLJL-----7|L---7LJ-|L--7|L-7FJL7FJLJLJ|L7-|L--|JL7FL--|FL|F--7L--JLJF-J|FJ|L--JL--7LL7LF7F77LJFL7L--7|L--7|L-----77-|7-L
|
||||
F-L-J7FLJ||F77FJL7F7F7F7F----JL---7L7F7L--7||F-J|F-J|F--7FJF7-L-JLJ7LJJFFFL-7LJF-JF-----JF7LJLL-7F7F-7L--JFJLJL----7|F--JL7F-JL--7F--J7--.-7
|
||||
|-L7J.F7||--J-L-7LJ||||LJF7F-7F--7L-J||F-7LJ|L--J|7FJL7FLJL||FJ7.77|7-|-|.LLJ7LL--JF7F7F-J|F7F--J|LJ.L-7F7|F-7F7F7FJ|L--7FJL----7|L-7L|||-LJ
|
||||
.LL|J-FL7J.|L|F7L-7LJLJF-J||FJ|F-JF--JLJFJF7L7F-7|FJF7L7F7-||7JJ|JFJ|F-JJ7JLJ|7LF--J|||L-7|||L---JFF---J|LJL7||LJLJFJF--JL7F7F--J|F-J7LL77.J
|
||||
7.L|L-J|LFFF--J|F7L7F7FJF-J|L7|L7FJF-7F7L-JL7|L7|LJFJL7LJL-JL7-F77L77JF-J|-J.F--JF-7LJ|F7|||L7F7F-7L---7|F--J|L---7L-JF--7LJ|L-7-LJ7LJ|.L77.
|
||||
LF.7JF-|.|JL--7LJL-J||L7L--JFLJFLJLL7||L----JL-JL-7L-7L--7F--JFJL7-7.LFJFF7|F|F--J-L-7LJ|||L7|||L7||F7|LJL--7|F---JF--JF7|F7|F7L-7-77FL7-|.F
|
||||
||FJFF7JF--7F-JF--7FJL7|F--7F-------J|L---7F----77L-7L--7LJF-7L7FJF77.L77|FF-J|JF----JF7LJL7|LJ|FJ|FJ|F7F---JLJF7-FJF7FJ|LJ||||F7L7.L|JJ7-|J
|
||||
|J-FFF7-|F7LJF7|F-J|F7|||F7LJF---7F7-L---7LJF--7L--7|F7FJF7|FJFJ|FJL7-J77LLL--J.L7F7F-JL--7|L-7LJFJ|FJ||L-----7||FJFJLJLL7FJLJ||L7|77|L-J.|7
|
||||
|L-FJLLFLJL7FJLJL7FJ|LJ|LJL7FJ-F7LJL----7L-7L-7L-7FJLJLJFJ|||-L7LJF-J7F-J-.|7F-7|LJ|L7F---JL--JF7L-JL7||JF----J|||FJF7F-7LJF7|LJJLJLFLFJ--J-
|
||||
|7F|7.LLJFFJL7JF7||F|F7L7F-J|F-JL-------J-FJF7L-7||.F--7L7|||F7L7FJF7-|.||.LFJFJF--JFJ|F-7F-7F7|L7F-7LJL-JLF7F7||||7|||FJF7|L-7F7-F7J.|FF7J|
|
||||
|-|J77FJ7LL7FJFJLJL7LJL-JL--JL-----7F--7F7L-JL7FJ|L7L7FJFJLJ||L-J|FJL-7F7-F7L7L7L--7|FJ|.||LLJ||FJ||L7F----J||||LJL7|LJL7|LJF7||L-7.-LLJ|F-J
|
||||
LJ.JL|7L7FL||-L--7FJJF7F----7F7F---J|F-J||F7F7LJ-L-J.|L7L7F-JL--7LJF--J||-F-7L7L7F-J|L7L7||F--J|L7|F-J|F----J|||F--J|F-7||F-JLJ|F-J-|..|7|-|
|
||||
L-7||LJ.FLFJ|-LF-J|F-JLJF7F7LJ|L----JL--JLJLJL--7F--7L7|FJL-7LF7|F-JF-7||FJFJFJFJL7FJJL7|||L7F-JFJ||F-J|F7JF-JLJL---JL7LJ|L7F-7||J7FF7.---7J
|
||||
LL-7LFJ-|.L-J|.L--JL----JLJL-7|F7F7F7F7F--7F----JL-7L7|||F7FJFJ||L-7L7|||L7L7L7L-7||7F7LJLJ7LJF7L7|LJF-J|L7|F------7F7L--JFJL7|||JF7JF-7.LL7
|
||||
J.L|.|.LL|L|F|-L7F----7F7F7F-JLJLJLJ|||L-7LJF---7F7L7LJ|||LJ|L7LJF-JFJLJL7|FJFJF-JLJFJL-7JF---JL-J|F7L--JFJ|L-7F--7LJL7F-7L-7||||F-7.|7L-7J-
|
||||
|LJLJ...|L|.F7FLFJF7F7LJ|||L-------7LJL--JF7|F--J||FJF7LJL-7F7L-7L7-|F7F7|||FJFJF7F7L7F7L7|F---7F7||L----J-|F-J|F7L7F7LJJL-7LJLJLJFJ.--J|.|.
|
||||
F|LFL-FJ7F|7|.||L7|||L-7LJL--------JLF----JLJL--7||L-J|F---J|L-7L7L7LJLJ|LJ|L7|7||||7LJ|FJLJF7FJ|LJ|F----7FJL7FJ|L7LJL7-F7F|F--7F7|.F|JLFF77
|
||||
JJ.-J|.LJ-J-L-F-FJ|LJF7L-------7F7F7FJF7F-------J||FF7||F7F7L7FJJL7|F7F-JF-JFJL-J|||F-7||7JFJ|L7L7FJ|F---JL7FJ|FJ.|F-7L-JL7LJF7LJLJ-|--F|LL.
|
||||
F7-J.77-||L-J|F7L-JF-JL--------J|LJLJFJLJF---77F7|L7|||LJLJL7||F7FJLJ|L-7L-7L7F7FJ||L7||L7FJFJ|L-JL-JL7F---JL-JL-7||L|F-7FJF-JL--7-7J|7FJJ.F
|
||||
LL7|--JFLF.7-FJL---JF7F---7F7F7FJF---JF7-|F--JFJ||FJ||L7F---J||||L7F7L7FJF-JFJ|LJFJL-J||FJL7L7F7F7F---J|F--7F----J||FJ|7|L-JF----JF7|FJL77-F
|
||||
LJFF-|777L7F7L-7F7F-JLJF-7LJ||||-L---7||FJL--7L7||L7||FJ|F7-FJ|||LLJ|FJL7L-7L7L-7L---7LJ|F-JFJ||||L--7FJL7J|L---7L||L7L7L7F7L-----JL7J.F7JJ|
|
||||
L7.|||L-7.FL7.|LJLJF7F7L7|F7LJLJF7F--J|LJF--7L-J||FJ|||FJ|L7L7||L-7FJ|F-JF-JFJF7|F-7||F-J|F-JFJLJ||F7LJF7L7|F7F7L7LJ|L-JFLJL7F7F-7F7|.FLJJ.|
|
||||
FJ--7FL-F7FJ|7|7F7FJLJL7||||F-7J||L---JF7|F7L7F-J|L-J||L7L7|FJLJF-JL7|L-7L7FJFJLJL7|FJL7FJ|F7L--7|FJL--JL-JLJLJL7L7JF--7F7F7||LJFLJ||7FJ|-FF
|
||||
FJ.LFJ77F-7F-7F7||L---7|||||L7L-JL---7FJLJ|L7|L7FJF-7||FJJ||L--7|F7FJ|F-JFJL7L-7F-J|L-7|L7|||F--J|L----7F7F7F7F7L-JFJF-J|||||L-7FF7LJ7|.-.|J
|
||||
|--7FL-7L7|L7||||L7LF-JLJLJL7L-7F7F7||L---JFJL7|L-JFJLJ|F7||LF-JLJ|L7|L-7L7FJF-JL-7|F-J|FJ|||L--7|FF7F7LJLJLJLJ|F-7|FJF7||||L--JFJL7F7JFJFJ.
|
||||
7--LLJ.F-JL-JLJ|L7L7L---7F-7|F7LJLJL7L7F-7FJF-JL--7L7F-J|||L7|F7F-JL|L7FL7|L7L7F7FJ|L7FJL7LJL7F7|L7|LJL--------J|FJ||FJLJLJL-7F-JF-J||L||-J7
|
||||
LFFJ.L-L-7F--7FJLL7|F7F-J|FJLJL-----JJLJFJL7L-----JFJL-7||L7|||LJF7FJFJF-J|-L7LJ||FJFJ|F7L-7FJ||L7|L7F-----7F7F7|L-JLJF-7F---JL7FJF-JL--7-7.
|
||||
-7F7-.LJ-LJF-JL---JLJ|L--JL---7F-----7F7L-7|F7F--7FJF--J|L7|LJL7||||FJ7L-7|F7|F-J|L7L7||L7FJ|FJ|FJL7LJFF---J|LJLJF----JLLJLF-7FJL-JF-7F7|.FF
|
||||
FLL---7|.LJL7F7F7F7F7L------7JLJF---7LJL-7LJ||L-7|L7||F7L7||F-7L7||||F7F7|LJLJL-7L7|FJ|L7||FJ|FJL7FJF7FJF7F7|F---JF7|F7FF7FJFJL7F--J7LJLJ--|
|
||||
L7L7||J|..|FJ|LJ||||L--7F7F7L--7L--7L----JF7||F-JL-JL7||FJ|LJJ|FJ|LJ|||||L7F-7F7|FJLJFJFJLJL7||.FJL7||L-JLJLJL----JL-J|FJ|L7|F7|L----7J.FF7|
|
||||
LJ.LJL-|7FFL7|F-J|LJ|F-J|||L7F7L--7L----7L||||L-----7|||L7|FF7|L7L-7||||L-JL7||LJL--7L7L7F--J|L7L-7LJL7F---7F7F--7F---J|FJFJ||||F----JJ|-|-7
|
||||
.|-|7|JL77.FLJL--J|F-JF-JLJ|LJL--7L----7|FJLJ|F-7F-7|||L-JL7|LJFJF7|LJ|L--7FJ|L7F7F7L7L-JL-77|FJF-JF--JL--7|||L-7LJF7F7||J|FJ|LJ||F7F7LJFJ.J
|
||||
7L7J-|.L|7-JJ|-F---JF-JF7LF7F----JF--7LLJ|F--JL7|L7|||L7F7FJL7FJFJ||F-JF7F||.L-J||||JL-7F--JFJL7L-7L--7F--JLJ|F-JLFJLJLJL-JL-JF7L-JLJ|F|-||J
|
||||
L7L-.||JJ|.L-J7|F---JF-JL-J|L---7FJF-JF-7|L7F7FJL7|||L7LJ||F-JL7L7|||F7|L-JL7F7FJLJ|F7FJ|F7FJF-J7FJF--JL---77|L---JF-7F------7||F7F--JF7FFF-
|
||||
.L-L77|F--.F-LFJ|F7F7|F---7|F7F7||L|F7|FJ|FJ||L7FJ|||FJF7||L-7FJ||||||||F---J||L--7|||L7|||L7||F7|FJF7F7JF7L7L--7F7L7|L-----7|||||L---JL-7|7
|
||||
F|-|.LL--|7LF7L-J||||LJF--JLJ||LJ|FJ||||FJL7|L7|L-JLJL7|||L7FJL7FJ|||||||F-7FJL7F7|||L7||||FJ|FJLJ|FJ||L7|L-JF7J|||FJL7F--7FJLJLJL7F-----JJ-
|
||||
|J.F7L|.|F7|.|.F-J|||F7L-7F-7|L-7|L7|LJ|L-7||FJL----7||||L7|L-7||.||||||LJ7|L-7||LJ||FJ|LJ||L||-F-JL7|L7||F--JL7LJ|L-7|L7JLJ7|F7F7LJF7-|J-|.
|
||||
|FL|--JF7FJ-L7FL-7LJLJ|F7LJFJ||FJL7|||FJF7|||L7F7F7FJFJ|L7||F-J|L7|||||L-7FJF7|||F-J|L7|F-JL7|L7|F7FJ|FJ|LJF7F7L7FJF7|L7L-7F7FJLJ|F-JL-77FF|
|
||||
L|J|L|.L|L7|.LF7FJF7F7LJL-7L7L7L7FJ||FJFJLJ||FJ|LJLJJL7|FJ||L-7L7|||LJ|F7|L7|||||L-7L7|||F-7|L7|LJ|L7|L7L7FJLJL7||FJ||FJF7LJ||F--J|F---JJF||
|
||||
.|JF7-F7.|L-JJ|LJFJLJ|F7F7L-JFJL|L7||L7|F7FJ|L7L-----7||L7||F7L7||||F-J|||FJ||||L7||FJ||||7||FJL7FJFJL-J7|L--7|LJ||FLJL7||F7LJL---JL-77-|JL-
|
||||
.F7-F-JFF-JF.FJF7|F--J||||F-7L--JFJLJ-|LJ||FJJ|F-7F-7|LJFJ||||FJLJ||L7FJ||L7|||L7L7|L7||LJFJ|L7FJL7L--7F-JF-7L-7FJL--7FJ|||L7F7F7F7F7|7.|J-|
|
||||
-|L-L7.F77|L-L7||||F7FJLJLJLL7F7FJFF--JF7|||F-JL7LJFJL7FL7||||L--7|||||||L7||||.|FJ|FJ|L7-|FJ|||F7L7F-J|F7L7|F-JL7F--JL7|LJ7LJLJLJLJLJLJJ|.L
|
||||
||F7|L7..FF7J|||LJLJLJ-F-----J||L-7L7F7||||||F-7L-7|F7L-7|||||F7FJ||FJL7L7|LJ|L7||FJL7L7|FJ|F-J|||FJ|F7LJ|FJLJF--JL--7FJL-----------7L77-FL.
|
||||
-.LL|JJF7|L|-F||.|7LF7LL--7F-7||F-JFJ|||LJ||||J|F-J||L7FJLJLJ|||L7||L7FJF||.FJFJ||L7FJLLJL7||F7LJ|L7LJ|F7LJJF7L7F7F7FJ|F7F7F-7F7F-7FJ.|---.F
|
||||
FF-7JF-7-L.|7FJ|FFF7|L7F--J|7LJ|L7LL7|LJF-J|LJFJL7FJL7|L-7F--J||FJ||FJL-7|L7L7|FJ|F|L--77-||LJ|F7L7L-7LJL---JL7LJ||LJ.||||LJFJ|LJ|LJ.FJFJ-7|
|
||||
LF-|.F-J-LFJ-L-JF7|||FJL---JF--JFJF-J|F-JF7|7FJF-JL7FJL7FJ|F--J|L7||L7F7||FJFJ|L7L7|F-7L7FJ|F-J||FJF-JF-7F--7FJ.FJL--7LJ|L7-L7L7|F-7FLLF-7JL
|
||||
.LFJ-|.|7.7LFFF-JLJLJL----7FJF-7|FL7FJL7FJ|L7L7L--7||F7|L7||F--JFJ||FJ|||||JL7|7L7|LJFJFJL7|L7FJ||FJF7L7|L7FJL-7L-7F-J|LL7L-7L7L-JFJ7J-|L7-.
|
||||
F-JJ.----FJLF-JF-7F7F-7F-7LJFJFJ|F-JL7L|L7|FJFJF7FJ|||LJFJ||L7F7L7LJL7|||||F-J|F-JL-7L7|LFJ|FJL7||L7||FJL7|L7F7L-7|L-77F7L--J-L7F-JL7J.F7|||
|
||||
L.|7|J7|.L-7L-7|-LJ||J||FJF7|FJFJL7F7|FJFJ||7|FJ|L7||L7FJF||FJ||FJ7F-J|||||L--JL--7FJJ|L7L7|L7FJ|||LJ|L7FJL7LJL7FJ|F7L-JL--7F-7||J|F-.F-J.-7
|
||||
|-F|-JFJL-77JLLJJ.FJL7LJL-J||L7|FFJ|||L7|FJL7LJFJFJLJ.||LFJ||FJ|L-7|F7|||LJF------J|.FJFJ.LJFJ|-|L7FFJFJ|F7L7.FLJFLJL7F-7F-J|FJLJF7-LFFJJ.FJ
|
||||
F.F||LF7|-|.LFJ|.FL7FJF----J|FJL7|FJ||FLJL7FJF-JFJF---JL7L7|||7|F7|||||||JFJF7F7F-7L7L7L--77L7|FJFJFJFJFJ|L7L----7F--JL7|L--JL---JL7.7JL..-7
|
||||
|F-J-JL-7-|7.JJF-F-J|FL--7F-JL-7||L7LJF---JL7|F7L7L-7F-7L7|||L7||LJ||LJ|L7|FJ||LJFJFJJL7F7|F-J|L7L7L7L7L-J||F----JL7F-7|L7F-7F-7F7FJ7L7JL..|
|
||||
LLJF7F7.L7F|-L-L7L--JF7F-J|F---J||FJ|FJF7F7FJLJL7L-7||LL7||||FJLJF7LJF-JFJ||FJ|F-JFJF-7||||L7FJF|FJ.L7|7F--JL-----7||FJL7LJL||LLJLJJ7|.-J77|
|
||||
FL7L7J|7LF7JJ|.F|LF--JLJF7|L7F-7|LJF7L7|LJ|L--7FJF7||L7||||||L-7FJL-7L-7L7LJL-J|F-JF|FJLJLJ-LJF-JL7F-JL7L7F-7F----J||L-7L--7LJJ-JLJLLJ7.|L-J
|
||||
|.|FL.|7.LJ.||FFF7L7F-7FJ||FJ|FJL--J|-LJ|FJF7FJL7||||FJFJ|||L7FJL--7L-7|FJF----JL---JL-----7F-JF7FJL-7FJ7||-|L----7||F-JF7FJ.|J-J-|LJ-L-FJJ|
|
||||
F7J|JFF7777.FF-FJL-J|FJL7||L-JL7F--7|7LF7L7||L7|||LJ|L7L7|||FJL--7-L-7LJL7L7F7F7F-7F--7F--7|L7FJ|L--7|L-7||FJF-7F7|LJ|F7|||J.F7LL--7|..FLJ-F
|
||||
L7.J7-L-F7LJLL-L----J|F-J|L-7|||L-7LJF-JL-J|L-JFJ|F-JFJ-LJ||L7F7FJLF-JF-7L7LJ|||L7|L-7||F-JL7LJFJF--JL7FJ||L7L7||LJ-LLJLJ||---7.FJ|7|-LL...J
|
||||
F--LJL.F|J|-7..LJ-F--JL7|L7FJF-JF-J.LL7F--7L--7L-JL-7|J.J.LJFLJ|L-7L7FJFJFJF-J||FJ|F-J||L-7FJJLL7L-7F-J||LJFJFJ|L7J7|7LLJLJ.LFJ-||LJ.|J|-|FJ
|
||||
LF..-7.JJFLFF-7-|LL---7|7LLJJL7FJJLJ-LLJF-JF-7L-7F7LLJ--J7L|-|LL--JFJL7|FJJ|F7|||FJL7J||J|LJ-F--JF7||F7L7F7|FJ-L7|.FL7F|J||77|77F7-----JFF-.
|
||||
||F---|7FF7.LJL-7-J7LL||7LJ||-LJJJFL--F7L-7|FJF-J||7|J-|.J7L.L.F|LLL--J||J7LJ|||||F-JJ||LJ-LJL7F-J|||||FJ|LJL--7||-J-JLJ.7LFLJ7-L-J||...-J-|
|
||||
||L7-7|F.L|F7F.LF7-FJL|L7|LLJ7||7.L-|7||-FJ|L7L--JL7|..F7LJJJ-L7LJ.L|LLLJJF|L||||||-|FLJ-L7L-7LJLFJ|LJLJLL--7F-J||7.LL-7-LFF-|L|LFFJF77.F--7
|
||||
|-LL-F--7-|||-FJ|J7||FL-J-7.L.F7--7.FF||FJFJJ|F7F--JF--|..J7LF-FJ.FL7J|F|-7-|LJ|||||LF|J.|||L7-JFL-J7JL|7|F7||F7||--7FF|7-|LFF7F-||FF7F-|FFJ
|
||||
|L7|-7FJ|||7.||F|F-77-JFLJ||..FJ|F-FF-JLJFJF-J|LJJ7L|JLJ-F-FF.F-JL7LJ7LJ||L-J7LLJ|L7|LJJ.|J||LJ|7F|L|-JLLL|LJLJ|LJ7-|--.JFJ-7L7.FJ|-J|FJL7--
|
||||
L7||.|7LJ-J--.F7F-.||L.F-F-LL--7F|.FL--7FJ-L--J.LF-F7J7J|JF|7.F|7-J7FFJ.||F.LFJ|FJFJJ.|JFL-L|J7|7F|-L-J7|.L7F-7L--7.F.FL--J-|FJ-J7|.FLJJ|L|J
|
||||
LFJJL---|FJ.|-J||LFFJ|.|LJ||LLLJF7F|.J7LJ|FJ|.J7-|-L|FFF|7L----J|.L-|JFLJ7L|-|F-L-J-|-7||.77L---7J.LLL.F7FL|L7L---J..FJ.JL7--L77|-7.LJ-F|FJ7
|
||||
.LL-F|.-7-J7.L|.J.|L|-F77.FJ-7-L7L--7L77L||F7JJL-|7J|FL||LJ-7JL-J-JJL77L-J.|-J7J-|.-----J-J7F-|7|F7.7F-L-FF|FJJ|F|FJFF-|LLJFJ7|77.J-|-F-7L.F
|
||||
FFJF7LFLF-LF-F7.L---L..L-|J|7..|LF.LJF||-LJ7|J-J7.F7L-7L|-FF7|L.|.|L|-7LL-|JFL|F-J.|7FLF|7LL7.J7L7||-7|L.|LLJJ.F|JLJL|.||||||F||F-|F|F|LJFF|
|
||||
FJL7.FF-L7-7FJ|F.||7..|-||F7-7F-JL-.L-7JJFF-J7J.L-L7.LJL7-JJLF.FJ.--|FJ-J|L7J||F7L7--7.7J7-LL|.F7LJ|7FJ.LJFL|--7J7.77FF-L-|-JJ|7|.||LFF..FJJ
|
||||
L.F--LL7LF-J|JFL-----FL-FLJLL|J.F-J77FJJF|-|||7.|.F7J.|-|||-F7J7.F|FFJJJFF-7.F7|F.LJFJ.|.F7J.|..L7.|-LJ-|FJ7L77|FFFFJJLJJ.-.L--|77FF-LLJF|7J
|
||||
J-|J.LJL-J....--F-|7.L-FJ.J.--J7.7-L-|LL-LJL-J-7-J-|-JLF-JJ-FJLLF-F-7.7-FL---JL|J7L-7-F--L.--F77-7JJLL-7----JLL--7-|J.LL-7JJJ.LL|JLL-|JLL7JJ
|
||||
140
input/day11.txt
Normal file
140
input/day11.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
............#..................#..........................................................#..........................#......................
|
||||
.................................................................#...............#..............#...............#......................#....
|
||||
...................................#.....................#..................#............................#...................#..............
|
||||
#.....................#.....................#...............................................................................................
|
||||
........................................................................................#............#......................................
|
||||
.....#..............................................#.......................................................................................
|
||||
.......................................#................................#..........#...........#......................................#.....
|
||||
..................#...........#.............................................................................................................
|
||||
.............................................#............#.................................................................................
|
||||
.#............................................................................#..................................#..........................
|
||||
............#......................#....................................................................#...................#.............#.
|
||||
.......#............#....................#........#...................................#......................#..............................
|
||||
...................................................................#................................#.......................................
|
||||
..............................#.................................................................................................#...........
|
||||
..#...........................................................................................#.......................#.....................
|
||||
..............................................................................#.............................................................
|
||||
.......................................#.........#............#...........................#................#..............................#.
|
||||
........................................................#.............#.....................................................................
|
||||
.....#..........................#....................................................................#....................#.................
|
||||
....................#.......................#...................................#...............#...............#......................#....
|
||||
...............#..................................................................................................................#.........
|
||||
..#......................................................................#...................................................#..............
|
||||
.................................................#............#.........................................#.............#.....................
|
||||
....................................#.......................................................................................................
|
||||
...........#..........................................................................#.....................................................
|
||||
.................#..........................................................................................................................
|
||||
.............................................#............................#....................................................#............
|
||||
.........................#.......#..........................#...............................................................................
|
||||
.......#............#....................................................................................................#..........#.......
|
||||
...................................................................#................#...........................#...........................
|
||||
..............#....................................#..........................#..............#..............................................
|
||||
..#....................#....................................................................................#........#......................
|
||||
.........................................................................#......................................................#...........
|
||||
......................................#.........#...........................................................................................
|
||||
..........#.................................................................................................................................
|
||||
.....................#......................#...............#.................................................#.............................
|
||||
...............................#...................................................#....................................#.................#.
|
||||
.............................................................................................#..............................................
|
||||
...................................................................#........................................................................
|
||||
................#..........#.....................#..................................................................................#.......
|
||||
...................................#............................................#..................#........................................
|
||||
.....#.....................................................................#...............................#.....#..........................
|
||||
............#.........................................................................................................#.....................
|
||||
.....................#.............................#.......................................................................#................
|
||||
..............................................................#...............................#..........................................#..
|
||||
.....................................#.......#.................................................................#............................
|
||||
...............#...................................................................#.....#..............................#...................
|
||||
...#.....................#.........................................#......#...........................#.....................................
|
||||
.........#......................................................................................#.............................#.............
|
||||
..........................................................#.................................................................................
|
||||
..................................#.......#...........................................#......................#......................#.......
|
||||
.............................................................................#..............................................................
|
||||
.....#...........................................#..................................................#....................#..................
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
.................#...................#........................#......#..................................#...................................
|
||||
..........................#.........................#.....................................#......#.........................#................
|
||||
..............................................#...........................#.....................................#...........................
|
||||
#.....................#.................#............................................................................................#......
|
||||
...............................#..........................#.....................................................................#...........
|
||||
..........#.........................#.............................#...........#....................................#........................
|
||||
.....................................................#......................................................................................
|
||||
.............................................................................................#..............................................
|
||||
............................................................................................................................................
|
||||
...............#...........#..........#.....#..................#.......................#......................#.......#..............#......
|
||||
........#...........#.............................#.....#...................................................................................
|
||||
............................................................................................................................................
|
||||
.#................................#.............................................#................................................#..........
|
||||
............................................................................................................................................
|
||||
..........................................................................#...............................................................#.
|
||||
..............................#...............#......................................#........#.............#.........#.....................
|
||||
...#................................................#.......................................................................................
|
||||
............................................................................................................................................
|
||||
.......................#...............#...........................................................#..........................#.............
|
||||
.................................................#...........#......................................................#.......................
|
||||
...........#............................................................................#...................................................
|
||||
.....#..................................................#.....................................#.............#..............................#
|
||||
..................#..........#..............................................#..........................#..............................#.....
|
||||
....................................................#.......................................................................................
|
||||
..#............................................................................................................#................#...........
|
||||
.............................................................#........#..........#.....#....................................................
|
||||
...........#..........#............#.......#...............................................................................#................
|
||||
............................................................................................................................................
|
||||
......................................................#..............................................#......................................
|
||||
.........................#.....#...............................................#................................#................#..........
|
||||
...#.......................................................................................................#...........................#....
|
||||
........#...........................#....................................#...............#..................................................
|
||||
..........................................#.......................#.........................................................................
|
||||
............................................................#.............................................................#.................
|
||||
...........................#...................................................................#.....................#......................
|
||||
...............#.................#............#.............................................................................................
|
||||
...#......#..........................................#..................................#...............#...................................
|
||||
.................................................................#......................................................................#...
|
||||
.......................#..................#...............#..................#..............................................................
|
||||
.................................................#...................................#.............#............................#...........
|
||||
................#...........................................................................................................................
|
||||
...................................#.........................................................#........................#.............#.......
|
||||
.............................................................#..........................#......................#............#..............#
|
||||
...#..................#.............................#..........................#............................................................
|
||||
........#......................................#............................................................................................
|
||||
..............#............#...........#............................................................#.......................................
|
||||
....................................................................#.......................#...............................................
|
||||
.#....................................................................................#........................................#.......#....
|
||||
...........#...................#............................................................................................................
|
||||
.........................#..........#.......#.........#..................#..................................#...............................
|
||||
................................................................#....................................................#......................
|
||||
...#.............................................................................................#.....#....................................
|
||||
.................................................#....................#.....................................................................
|
||||
.......................#.........#..................................................#.......#...................#........#..................
|
||||
........................................................................................................................................#...
|
||||
...........#................................................#..............................................#................................
|
||||
.....................................#..........................................................#...........................................
|
||||
....#.......................................#....................................................................................#..........
|
||||
...................#..............................................#.........#..........#.............#......................................
|
||||
............................................................................................................................................
|
||||
............................................................................................................................................
|
||||
.............#.......................................#...............#......................#......................#...............#........
|
||||
...............................................#............................................................................................
|
||||
....#.................................#.......................................................................................#.............
|
||||
............................#.................................................#......#.....................................................#
|
||||
...................#..............#.......#...............#.....................................................#.........#.................
|
||||
..................................................................#.....................................#...................................
|
||||
...................................................#..............................#......#.......#..............................#...........
|
||||
.......................................#.....................#..............#......................................#........................
|
||||
.................#..........................................................................................................................
|
||||
..............................................#.......#.................#.................................#.................................
|
||||
.........#...............#.............................................................#.................................#.............#....
|
||||
..#..............................#..................................#.......................................................................
|
||||
...............................................................#...........#.......................................................#........
|
||||
............................................................................................................................#...............
|
||||
................#...........#............#.........#........................................................................................
|
||||
........#.............#........................................................................................#...........................#
|
||||
..........................................................#...............................#..............#...........................#......
|
||||
...............................#................................................................#...........................................
|
||||
..................#.............................................#.........#..........................................#......................
|
||||
.....#................................................#.........................................................................#...........
|
||||
............................................#.....................................#.........#...............................................
|
||||
.......................................................................................................................................#....
|
||||
#..........#.............#......#.................................#...................................#.....................................
|
||||
.....................................#.........#.........................#.....#............................................................
|
||||
10
input/day11_example.txt
Normal file
10
input/day11_example.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
...#......
|
||||
.......#..
|
||||
#.........
|
||||
..........
|
||||
......#...
|
||||
.#........
|
||||
.........#
|
||||
..........
|
||||
.......#..
|
||||
#...#.....
|
||||
1000
input/day12.txt
Normal file
1000
input/day12.txt
Normal file
File diff suppressed because it is too large
Load Diff
6
input/day12_example.txt
Normal file
6
input/day12_example.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
???.### 1,1,3
|
||||
.??..??...?##. 1,1,3
|
||||
?#?#?#?#?#?#?#? 1,3,1,6
|
||||
????.#...#... 4,1,1
|
||||
????.######..#####. 1,6,5
|
||||
?###???????? 3,2,1
|
||||
279
src/day10.rs
Normal file
279
src/day10.rs
Normal file
@@ -0,0 +1,279 @@
|
||||
use std::collections::HashSet;
|
||||
|
||||
use crate::day_solver::DaySolver;
|
||||
use crate::util::{Coord, Grid};
|
||||
|
||||
pub struct Day10 {
|
||||
grid: Grid<char>
|
||||
}
|
||||
|
||||
impl Day10 {
|
||||
|
||||
pub fn create(input: String) -> Self {
|
||||
// let lines = input.lines();
|
||||
|
||||
// Put the input into the day struct
|
||||
return Day10 {
|
||||
grid: Grid {
|
||||
width: input.lines().next().unwrap().len(),
|
||||
data: input.replace("\n", "").chars().collect(),
|
||||
default: Some('.')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn is_connected_south(&self, p: &Coord<usize>) -> bool {
|
||||
let c = self.grid.get(&p.x, &p.y);
|
||||
return c == &'|' || c == &'F' || c == &'7' || c == &'S';
|
||||
}
|
||||
|
||||
fn is_connected_north(&self, p: &Coord<usize>) -> bool {
|
||||
let c = self.grid.get(&p.x, &p.y);
|
||||
return c == &'|' || c == &'L' || c == &'J' || c == &'S';
|
||||
}
|
||||
|
||||
fn is_connected_east(&self, p: &Coord<usize>) -> bool {
|
||||
let c = self.grid.get(&p.x, &p.y);
|
||||
return c == &'-' || c == &'L' || c == &'F' || c == &'S';
|
||||
}
|
||||
|
||||
fn is_connected_west(&self, p: &Coord<usize>) -> bool {
|
||||
let c = self.grid.get(&p.x, &p.y);
|
||||
return c == &'-' || c == &'J' || c == &'7' || c == &'S';
|
||||
}
|
||||
|
||||
fn build_loop_dist_grid(&self) -> Grid<Option<usize>> {
|
||||
let mut dist_grid: Grid<Option<usize>> = Grid {
|
||||
data: vec![None; self.grid.data.len()],
|
||||
width: self.grid.width,
|
||||
default: Some(None)
|
||||
};
|
||||
let start_pos = self.grid.find(&'S').unwrap();
|
||||
dist_grid.set(&start_pos.x, &start_pos.y, Some(0));
|
||||
let mut to_search = Vec::new();
|
||||
let mut searched = HashSet::new();
|
||||
to_search.push((start_pos, 0));
|
||||
while !to_search.is_empty() {
|
||||
to_search.sort_by_key(|(_, d)| usize::MAX - d);
|
||||
let (cur, dist) = to_search.pop().unwrap();
|
||||
let neighbor_dist = dist + 1;
|
||||
if self.is_connected_north(&cur) && cur.y > 0 {
|
||||
let north_pos = Coord::new(cur.x, cur.y - 1);
|
||||
if !searched.contains(&north_pos) && self.is_connected_south(&north_pos) {
|
||||
dist_grid.set(&north_pos.x, &north_pos.y, Some(neighbor_dist));
|
||||
to_search.push((north_pos, neighbor_dist));
|
||||
}
|
||||
}
|
||||
if self.is_connected_south(&cur) {
|
||||
let south_pos = Coord::new(cur.x, cur.y + 1);
|
||||
if !searched.contains(&south_pos) && self.is_connected_north(&south_pos) {
|
||||
dist_grid.set(&south_pos.x, &south_pos.y, Some(neighbor_dist));
|
||||
to_search.push((south_pos, neighbor_dist));
|
||||
}
|
||||
}
|
||||
if self.is_connected_west(&cur) && cur.x > 0 {
|
||||
let west_pos = Coord::new(cur.x - 1, cur.y);
|
||||
if !searched.contains(&west_pos) && self.is_connected_east(&west_pos) {
|
||||
dist_grid.set(&west_pos.x, &west_pos.y, Some(neighbor_dist));
|
||||
to_search.push((west_pos, neighbor_dist));
|
||||
}
|
||||
}
|
||||
if self.is_connected_east(&cur) {
|
||||
let east_pos = Coord::new(cur.x + 1, cur.y);
|
||||
if !searched.contains(&east_pos) && self.is_connected_west(&east_pos) {
|
||||
dist_grid.set(&east_pos.x, &east_pos.y, Some(neighbor_dist));
|
||||
to_search.push((east_pos, neighbor_dist));
|
||||
}
|
||||
}
|
||||
|
||||
searched.insert(cur);
|
||||
}
|
||||
return dist_grid;
|
||||
}
|
||||
}
|
||||
|
||||
impl DaySolver for Day10 {
|
||||
|
||||
|
||||
fn solve_part1(&mut self) -> String {
|
||||
self.grid.validate();
|
||||
let dist_grid = self.build_loop_dist_grid();
|
||||
// self.grid.print();
|
||||
// println!();
|
||||
// dist_grid.print();
|
||||
return dist_grid.data.iter().filter(|d| d.is_some()).map(|d| d.unwrap()).max().unwrap().to_string();
|
||||
}
|
||||
|
||||
fn solve_part2(&mut self) -> String {
|
||||
|
||||
// let dist_grid = self.build_loop_dist_grid();
|
||||
// let max_dist= dist_grid.data.iter().filter(|d| d.is_some()).map(|d| d.unwrap()).max().unwrap();
|
||||
// let mut cur_positions: Vec<Coord<usize>> = dist_grid.data.iter().enumerate()
|
||||
// .filter(|(i, d)| d == &&Some(1))
|
||||
// .map(|(i, _)| Coord::new(i % dist_grid.width, i / dist_grid.width))
|
||||
// .collect();
|
||||
|
||||
// We're gonna follow the loop, and, depending on the direction of each step, we mark the 4 neighboring cells of the (left or right) as region A or B
|
||||
// Then we figure out if A or B is inside the loop
|
||||
// And then we "flood" the "inside" parts to get the full count
|
||||
|
||||
// We're marking the grid as:
|
||||
// ? = unknown
|
||||
// # = loop
|
||||
// A = Area A
|
||||
// B = Area B
|
||||
let mut loop_grid = Grid {
|
||||
data: vec!['?'; self.grid.data.len()],
|
||||
width: self.grid.width,
|
||||
default: Some('?')
|
||||
};
|
||||
let start = self.grid.find(&'S').unwrap();
|
||||
let mut pos = start.clone();
|
||||
|
||||
loop {
|
||||
loop_grid.set(&pos.x, &pos.y, '#');
|
||||
|
||||
if self.is_connected_north(&pos) {
|
||||
if let Some(north) = pos.north() {
|
||||
if loop_grid.get(&north.x, &north.y) != &'#' && self.is_connected_south(&north) {
|
||||
// Find next part of the loop! let's mark the neighbors
|
||||
mark(&mut loop_grid, &pos.west(), 'A');
|
||||
mark(&mut loop_grid, &pos.east(), 'B');
|
||||
mark(&mut loop_grid, &north.west(), 'A');
|
||||
mark(&mut loop_grid, &north.east(), 'B');
|
||||
pos = north;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if self.is_connected_south(&pos) {
|
||||
if let Some(south) = pos.south() {
|
||||
if loop_grid.get(&south.x, &south.y) != &'#' && self.is_connected_north(&south) {
|
||||
// Find next part of the loop! let's mark the neighbors
|
||||
mark(&mut loop_grid, &pos.west(), 'B');
|
||||
mark(&mut loop_grid, &pos.east(), 'A');
|
||||
mark(&mut loop_grid, &south.west(), 'B');
|
||||
mark(&mut loop_grid, &south.east(), 'A');
|
||||
pos = south;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if self.is_connected_east(&pos) {
|
||||
if let Some(east) = pos.east() {
|
||||
if loop_grid.get(&east.x, &east.y) != &'#' && self.is_connected_west(&east) {
|
||||
// Find next part of the loop! let's mark the neighbors
|
||||
mark(&mut loop_grid, &pos.north(), 'A');
|
||||
mark(&mut loop_grid, &pos.south(), 'B');
|
||||
mark(&mut loop_grid, &east.north(), 'A');
|
||||
mark(&mut loop_grid, &east.south(), 'B');
|
||||
pos = east;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
if self.is_connected_west(&pos) {
|
||||
if let Some(west) = pos.west() {
|
||||
if loop_grid.get(&west.x, &west.y) != &'#' && self.is_connected_east(&west) {
|
||||
// Find next part of the loop! let's mark the neighbors
|
||||
mark(&mut loop_grid, &pos.north(), 'B');
|
||||
mark(&mut loop_grid, &pos.south(), 'A');
|
||||
mark(&mut loop_grid, &west.north(), 'B');
|
||||
mark(&mut loop_grid, &west.south(), 'A');
|
||||
pos = west;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
// Now to flood the grid
|
||||
let to_flood: Vec<Coord<usize>> = loop_grid.data.iter().enumerate()
|
||||
.filter(|(_, d)| d == &&'A' || d == &&'B')
|
||||
.map(|(i, _)| loop_grid.coord(i))
|
||||
.collect();
|
||||
|
||||
for c in to_flood {
|
||||
flood(&mut loop_grid, c);
|
||||
}
|
||||
|
||||
// loop_grid.print();
|
||||
// Now we find if A or B is on the edge of the grid
|
||||
let edge_type = find_edge_type(&loop_grid);
|
||||
let loop_type = if edge_type == 'A' { 'B' } else { 'A' };
|
||||
|
||||
return loop_grid.data.iter().filter(|d| d == &&loop_type).count().to_string();
|
||||
}
|
||||
}
|
||||
|
||||
fn mark(loop_grid: &mut Grid<char>, pos: &Option<Coord<usize>>, c: char) {
|
||||
if let Some(p) = pos {
|
||||
if loop_grid.get(&p.x, &p.y) == &'?' {
|
||||
loop_grid.set(&p.x, &p.y, c);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn flood(loop_grid: &mut Grid<char>, pos: Coord<usize>) {
|
||||
|
||||
let c = loop_grid.get(&pos.x, &pos.y).clone();
|
||||
let mut to_check = Vec::new();
|
||||
to_check.push(pos);
|
||||
while !to_check.is_empty() {
|
||||
let p = to_check.pop().unwrap();
|
||||
for n in p.compass() {
|
||||
if loop_grid.in_bounds(&n.x, &n.y) && loop_grid.get(&n.x, &n.y) == &'?' {
|
||||
loop_grid.set(&n.x, &n.y, c);
|
||||
to_check.push(n);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn find_edge_type(loop_grid: &Grid<char>) -> char {
|
||||
for x in 0..loop_grid.width {
|
||||
for y in [0, loop_grid.height() - 1]
|
||||
{
|
||||
let c = loop_grid.get(&x, &y);
|
||||
if c == &'A' || c == &'B' {
|
||||
return c.to_owned();
|
||||
}
|
||||
}
|
||||
}
|
||||
panic!("Can't find the edge type...")
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
let mut day = Day10::create(String::from("-L|F7
|
||||
7S-7|
|
||||
L|7||
|
||||
-L-J|
|
||||
L|-JF"));
|
||||
assert_eq!("4", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1_2() {
|
||||
let mut day = Day10::create(String::from("7-F7-
|
||||
.FJ|7
|
||||
SJLL7
|
||||
|F--J
|
||||
LJ.LJ"));
|
||||
assert_eq!("8", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2_1() {
|
||||
let mut day = Day10::create(String::from("\
|
||||
...........
|
||||
.S-------7.
|
||||
.|F-----7|.
|
||||
.||.....||.
|
||||
.||.....||.
|
||||
.|L-7.F-J|.
|
||||
.|..|.|..|.
|
||||
.L--J.L--J.
|
||||
..........."));
|
||||
assert_eq!("4", day.solve_part2());
|
||||
}
|
||||
71
src/day11.rs
Normal file
71
src/day11.rs
Normal file
@@ -0,0 +1,71 @@
|
||||
use itertools::Itertools;
|
||||
use crate::day_solver::DaySolver;
|
||||
use crate::util::{Coord, Grid};
|
||||
#[cfg(test)]
|
||||
use crate::util::read_file;
|
||||
|
||||
pub struct Day11 {
|
||||
cosmos: Grid<char>
|
||||
}
|
||||
|
||||
impl Day11 {
|
||||
|
||||
pub fn create(input: String) -> Self {
|
||||
return Day11 {
|
||||
cosmos: Grid {
|
||||
width: input.lines().next().unwrap().len(),
|
||||
data: input.lines().join("").chars().collect(),
|
||||
default: Some('.')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn expand_galaxies_and_calculate_distances(&self, expansion: usize) -> usize {
|
||||
|
||||
// self.cosmos.print();
|
||||
let galaxies: Vec<Coord<usize>> = self.cosmos.find_positions(&(|c| c == &'#')).collect();
|
||||
// println!("{:?}", galaxies);
|
||||
|
||||
let expand_cols: Vec<usize> = (0..self.cosmos.width).filter(|x| galaxies.iter().all(|c| c.x != *x)).collect();
|
||||
let expand_rows: Vec<usize> = (0..self.cosmos.height()).filter(|y| galaxies.iter().all(|c| c.y != *y)).collect();
|
||||
|
||||
let expanded_galaxies: Vec<Coord<usize>> = galaxies.iter().map(|g| Coord {
|
||||
x: g.x + (expand_cols.iter().filter(|x| **x < g.x).count() * (expansion - 1)),
|
||||
y: g.y + (expand_rows.iter().filter(|y| **y < g.y).count() * (expansion - 1)),
|
||||
}).collect();
|
||||
|
||||
let mut sum = 0;
|
||||
for i in 0..expanded_galaxies.len() {
|
||||
for j in (i + 1)..expanded_galaxies.len() {
|
||||
let d = expanded_galaxies[i].manhattan_dist(&expanded_galaxies[j]);
|
||||
// println!("Distance between {} at {:?} and {} at {:?} = {}", i, expanded_galaxies[i], j, expanded_galaxies[j], d);
|
||||
sum += d;
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
}
|
||||
|
||||
impl DaySolver for Day11 {
|
||||
|
||||
|
||||
fn solve_part1(&mut self) -> String {
|
||||
return self.expand_galaxies_and_calculate_distances(2).to_string()
|
||||
}
|
||||
|
||||
fn solve_part2(&mut self) -> String {
|
||||
return self.expand_galaxies_and_calculate_distances(1000000).to_string()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
let mut day = Day11::create(read_file("input/day11_example.txt"));
|
||||
assert_eq!("374", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2() {
|
||||
let day = Day11::create(read_file("input/day11_example.txt"));
|
||||
assert_eq!(8410, day.expand_galaxies_and_calculate_distances(100));
|
||||
}
|
||||
274
src/day12.rs
Normal file
274
src/day12.rs
Normal file
@@ -0,0 +1,274 @@
|
||||
use std::fmt::Display;
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::{day_solver::DaySolver, util::Grid};
|
||||
#[cfg(test)]
|
||||
use crate::util::read_file;
|
||||
|
||||
pub struct Day12 {
|
||||
lines: Vec<GearLine>
|
||||
}
|
||||
|
||||
struct GearLine {
|
||||
gears: Vec<char>,
|
||||
sizes: Vec<usize>
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
struct ArrangementStart {
|
||||
gear_at: usize,
|
||||
size_at: usize
|
||||
}
|
||||
|
||||
impl ArrangementStart {
|
||||
fn new(gear_at: usize, size_at: usize) -> Self {
|
||||
ArrangementStart { gear_at, size_at }
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for ArrangementStart {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
return write!(f, "{} {}", self.gear_at, self.size_at)
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for GearLine {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
return write!(f, "{} {}", self.gears.iter().join(""), self.sizes.iter().map(|x| x.to_string()).join(","))
|
||||
}
|
||||
}
|
||||
|
||||
enum NextStep {
|
||||
Invalid,
|
||||
TryBoth,
|
||||
ValidSingle,
|
||||
Move(ArrangementStart),
|
||||
}
|
||||
|
||||
impl Display for NextStep {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
return match self {
|
||||
Self::Invalid => write!(f, "Invalid"),
|
||||
Self::TryBoth => write!(f, "Branch"),
|
||||
Self::ValidSingle => write!(f, "Valid"),
|
||||
Self::Move(res) => write!(f, "{}", res)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Cache {
|
||||
assume_gear_cache: Grid<Option<usize>>,
|
||||
assume_dot_cache: Grid<Option<usize>>,
|
||||
assume_none_cache: Grid<Option<usize>>
|
||||
}
|
||||
|
||||
impl Cache {
|
||||
fn new(line: &GearLine) -> Self {
|
||||
Cache {
|
||||
assume_dot_cache: Grid { data: vec![None; (line.gears.len() + 1) * (line.sizes.len() + 1)], default: Some(None), width: (line.gears.len() + 1) },
|
||||
assume_gear_cache: Grid { data: vec![None; (line.gears.len() + 1) * (line.sizes.len() + 1)], default: Some(None), width: (line.gears.len() + 1) },
|
||||
assume_none_cache: Grid { data: vec![None; (line.gears.len() + 1) * (line.sizes.len() + 1)], default: Some(None), width: (line.gears.len() + 1) }
|
||||
}
|
||||
}
|
||||
|
||||
fn get(&self, start: &ArrangementStart, assume: &Option<char>) -> Option<usize> {
|
||||
return match assume {
|
||||
None => self.assume_none_cache.get(&start.gear_at, &start.size_at).to_owned(),
|
||||
Some('.') => self.assume_dot_cache.get(&start.gear_at, &start.size_at).to_owned(),
|
||||
Some('#') => self.assume_gear_cache.get(&start.gear_at, &start.size_at).to_owned(),
|
||||
Some(_) => panic!("wtf?")
|
||||
}
|
||||
}
|
||||
|
||||
fn set(&mut self, start: &ArrangementStart, assume: &Option<char>, res: usize) {
|
||||
match assume {
|
||||
None => self.assume_none_cache.set(&start.gear_at, &start.size_at, Some(res)),
|
||||
Some('.') => self.assume_dot_cache.set(&start.gear_at, &start.size_at, Some(res)),
|
||||
Some('#') => self.assume_gear_cache.set(&start.gear_at, &start.size_at, Some(res)),
|
||||
Some(_) => panic!("Set wtf?")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl GearLine {
|
||||
fn parse(line: &str) -> Self {
|
||||
// Example: ???.### 1,1,3
|
||||
let (gears, sizes) = line.split_once(" ").unwrap();
|
||||
return GearLine {
|
||||
gears: gears.chars().collect_vec(),
|
||||
sizes: sizes.split(",").map(|s| s.parse().unwrap()).collect()
|
||||
}
|
||||
}
|
||||
|
||||
// fn is_valid(&self) -> bool {
|
||||
|
||||
// if self.sizes.len() == 0 && self.gears.iter().all(|c| *c == '.') {
|
||||
// return true;
|
||||
// }
|
||||
// let mut i = 0;
|
||||
// let mut cur_group_size = 0;
|
||||
// for c in &self.gears {
|
||||
// if *c == '?' {
|
||||
// panic!("Can only validate final lines, but got {}", self.gears.iter().join(""))
|
||||
// }
|
||||
// if *c == '#' {
|
||||
// cur_group_size += 1;
|
||||
// } else if *c == '.' {
|
||||
// if cur_group_size > 0 {
|
||||
// if i >= self.sizes.len() || self.sizes[i] != cur_group_size {
|
||||
// return false
|
||||
// }
|
||||
// i += 1;
|
||||
// }
|
||||
// cur_group_size = 0;
|
||||
// }
|
||||
// }
|
||||
// if cur_group_size > 0 {
|
||||
// return i + 1 == self.sizes.len() && self.sizes[i] == cur_group_size
|
||||
// } else {
|
||||
// return i == self.sizes.len();
|
||||
// }
|
||||
// }
|
||||
|
||||
fn move_forward(&self, start: ArrangementStart, assume_current: Option<char>) -> NextStep {
|
||||
let sizes_left = self.sizes.len() - start.size_at;
|
||||
let gears_left = self.gears.len() - start.gear_at;
|
||||
if gears_left == 0 {
|
||||
return if sizes_left == 0 { NextStep::ValidSingle } else { NextStep::Invalid };
|
||||
}
|
||||
// If the line starts or end with a '#' or '.' we can shave that off,
|
||||
// modifying the original gears line
|
||||
match assume_current.unwrap_or(self.gears[start.gear_at]) {
|
||||
'#' => {
|
||||
// We know that the first of the "sizes" starts at position 0, so we can just remove that part:
|
||||
if sizes_left == 0 {
|
||||
// This isn't even valid, but we also can't shrink anymore
|
||||
return NextStep::Invalid;
|
||||
}
|
||||
let cur_size = self.sizes[start.size_at];
|
||||
if !(self.gears.iter().skip(start.gear_at).take(cur_size).all(|c| *c == '#' || *c == '?')) {
|
||||
// Not valid
|
||||
return NextStep::Invalid;
|
||||
}
|
||||
if gears_left == cur_size {
|
||||
return if sizes_left == 1 { NextStep::ValidSingle } else { NextStep::Invalid };
|
||||
} else if gears_left > cur_size && self.gears[start.gear_at + cur_size] != '#' {
|
||||
NextStep::Move(ArrangementStart::new(start.gear_at + cur_size + 1, start.size_at + 1))
|
||||
} else {
|
||||
return NextStep::Invalid;
|
||||
}
|
||||
}
|
||||
'.' => {
|
||||
// If we start with a '.', this part of the sequence can just be ignored
|
||||
for i in start.gear_at..self.gears.len() {
|
||||
if self.gears[i] == '#' || self.gears[i] == '?' {
|
||||
return NextStep::Move(ArrangementStart { gear_at: i.max(start.gear_at + 1), size_at: start.size_at })
|
||||
}
|
||||
}
|
||||
// There's only '.' left
|
||||
return if sizes_left == 0 { NextStep::ValidSingle } else { NextStep::Invalid }
|
||||
}
|
||||
_ => NextStep::TryBoth
|
||||
}
|
||||
}
|
||||
|
||||
fn find_arrangements_recursive(&self, start: ArrangementStart, assume_current: Option<char>, cache: &mut Cache) -> usize {
|
||||
if let Some(res) = cache.get(&start, &assume_current) {
|
||||
return res.to_owned();
|
||||
}
|
||||
|
||||
let next_step = self.move_forward(start, assume_current);
|
||||
// println!("Next step on {} (start {}, '{}') => {}", self, start, assume_current.unwrap_or('_'), next_step);
|
||||
let res = match next_step {
|
||||
NextStep::Invalid => 0,
|
||||
NextStep::ValidSingle => 1,
|
||||
NextStep::Move(next_start) => self.find_arrangements_recursive(next_start, None, cache),
|
||||
NextStep::TryBoth => {
|
||||
return self.find_arrangements_recursive(start, Some('#'), cache)
|
||||
+ self.find_arrangements_recursive(start, Some('.'), cache)
|
||||
}
|
||||
};
|
||||
cache.set(&start, &assume_current, res);
|
||||
return res;
|
||||
}
|
||||
|
||||
fn find_arrangements(&self) -> usize {
|
||||
|
||||
return self.find_arrangements_recursive(ArrangementStart::new(0, 0), None, &mut Cache::new(self));
|
||||
}
|
||||
}
|
||||
|
||||
impl Day12 {
|
||||
|
||||
pub fn create(input: String) -> Self {
|
||||
return Day12 {
|
||||
lines: input.lines().map(|l| GearLine::parse(l)).collect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl DaySolver for Day12 {
|
||||
|
||||
|
||||
fn solve_part1(&mut self) -> String {
|
||||
return self.lines.iter()
|
||||
.map(|g| {
|
||||
let arr = g.find_arrangements();
|
||||
// println!("{} => {}", g, arr);
|
||||
return arr;
|
||||
})
|
||||
.sum::<usize>().to_string();
|
||||
}
|
||||
|
||||
fn solve_part2(&mut self) -> String {
|
||||
return self.lines.iter()
|
||||
.map(|g| {
|
||||
let gears_str = g.gears.iter().join("");
|
||||
let gears = (0..5).map(|_| gears_str.to_owned()).join("?");
|
||||
// println!("{}", gears);
|
||||
GearLine {
|
||||
gears: gears.chars().collect_vec(),
|
||||
sizes: g.sizes.repeat(5).into()
|
||||
}
|
||||
})
|
||||
.map(|g| {
|
||||
let res = g.find_arrangements();
|
||||
// println!("{} => {}", g, res);
|
||||
res
|
||||
})
|
||||
.sum::<usize>().to_string();
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
let mut day = Day12::create(read_file("input/day12_example.txt"));
|
||||
assert_eq!("21", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_1_1() {
|
||||
assert_eq!(1, GearLine::parse("???.### 1,1,3").find_arrangements());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_1_2() {
|
||||
assert_eq!(4, GearLine::parse(".??..??...?##. 1,1,3").find_arrangements());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1_last() {
|
||||
assert_eq!(10, GearLine::parse("?###???????? 3,2,1").find_arrangements());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2() {
|
||||
let mut day = Day12::create(read_file("input/day12_example.txt"));
|
||||
assert_eq!("525152", day.solve_part2());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2_2() {
|
||||
assert_eq!(16384, GearLine::parse(".??..??...?##.?.??..??...?##.?.??..??...?##.?.??..??...?##.?.??..??...?##. 1,1,3,1,1,3,1,1,3,1,1,3,1,1,3").find_arrangements())
|
||||
}
|
||||
199
src/day7.rs
Normal file
199
src/day7.rs
Normal file
@@ -0,0 +1,199 @@
|
||||
use std::{fmt::Display, cmp::Ordering};
|
||||
|
||||
use itertools::Itertools;
|
||||
|
||||
use crate::day_solver::DaySolver;
|
||||
#[cfg(test)]
|
||||
use crate::util::read_file;
|
||||
|
||||
const CARD_ORDER: [char; 13] = ['A', 'K', 'Q', 'J', 'T', '9', '8', '7', '6', '5', '4', '3', '2'];
|
||||
|
||||
pub struct Day7 {
|
||||
hands: Vec<Hand>
|
||||
}
|
||||
|
||||
pub struct Hand {
|
||||
cards: [char; 5],
|
||||
bid: usize
|
||||
}
|
||||
|
||||
impl Display for Hand {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
write!(f, "{} {}", self.cards.iter().collect::<String>(), self.bid)
|
||||
}
|
||||
}
|
||||
|
||||
impl Hand {
|
||||
fn parse(input: &str) -> Self {
|
||||
let (cards_str, bid_str) = input.split_once(" ").unwrap();
|
||||
return Hand {
|
||||
cards: cards_str.chars().collect::<Vec<char>>().try_into().unwrap(),
|
||||
bid: bid_str.parse().unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
fn calc_type(&self) -> u8 {
|
||||
let mut found_three_of_kind = false;
|
||||
let mut found_pair = false;
|
||||
for unique_card in self.cards.iter().unique() {
|
||||
let card_appearances = self.cards.iter().filter(|c| c == &unique_card).count();
|
||||
if card_appearances == 5 {
|
||||
return FIVE_OF_A_KIND;
|
||||
} else if card_appearances == 4 {
|
||||
return FOUR_OF_A_KIND;
|
||||
} else if card_appearances == 3 {
|
||||
found_three_of_kind = true;
|
||||
} else if card_appearances == 2 {
|
||||
if found_pair {
|
||||
return TWO_PAIR
|
||||
} else {
|
||||
found_pair = true
|
||||
}
|
||||
}
|
||||
}
|
||||
if found_three_of_kind && found_pair {
|
||||
return FULL_HOUSE;
|
||||
} else if found_three_of_kind {
|
||||
return THREE_OF_A_KIND;
|
||||
} else if found_pair {
|
||||
return ONE_PAIR;
|
||||
}
|
||||
return HIGH_CARD;
|
||||
}
|
||||
|
||||
// Calculates the maximum type, given that "J" is a joker
|
||||
fn calc_max_type(&self) -> u8 {
|
||||
if !self.cards.contains(&'J') {
|
||||
return self.calc_type();
|
||||
}
|
||||
|
||||
let mut max_type = self.calc_type();
|
||||
if max_type == FIVE_OF_A_KIND { return max_type };
|
||||
|
||||
// It only makes sense to try to map jokers to any of the other cards we have
|
||||
let owned_cards: Vec<&char> = self.cards.iter().filter(|c| c != &&'J').unique().collect();
|
||||
for i in 0..5 {
|
||||
if self.cards[i] == 'J' {
|
||||
for c in &owned_cards {
|
||||
let mut new_cards = self.cards.clone();
|
||||
new_cards[i] = *c.to_owned();
|
||||
let new_hand = Hand { cards: new_cards, bid: 0};
|
||||
let j_type = new_hand.calc_max_type();
|
||||
// println!("Trying hand {} as {}, got type {}", self, new_hand, j_type);
|
||||
if j_type > max_type {
|
||||
max_type = j_type;
|
||||
if max_type == FIVE_OF_A_KIND { return max_type }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return max_type;
|
||||
}
|
||||
}
|
||||
|
||||
const FIVE_OF_A_KIND: u8 = 64;
|
||||
const FOUR_OF_A_KIND: u8 = 32;
|
||||
const FULL_HOUSE: u8 = 16;
|
||||
const THREE_OF_A_KIND: u8 = 8;
|
||||
const TWO_PAIR: u8 = 4;
|
||||
const ONE_PAIR: u8 = 2;
|
||||
const HIGH_CARD: u8 = 0;
|
||||
|
||||
impl Day7 {
|
||||
|
||||
pub fn create(input: String) -> Self {
|
||||
// let lines = input.lines();
|
||||
|
||||
// Put the input into the day struct
|
||||
return Day7 {
|
||||
hands: input.lines().map(Hand::parse).collect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn card_rank(card: &char) -> usize {
|
||||
for i in 0..CARD_ORDER.len() {
|
||||
if &CARD_ORDER[i] == card {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
CARD_ORDER.len()
|
||||
}
|
||||
|
||||
fn compare_card(a: &char, b: &char) -> Ordering {
|
||||
return card_rank(b).partial_cmp(&card_rank(a)).unwrap();
|
||||
}
|
||||
|
||||
fn compare_card_pt2(a: &char, b: &char) -> Ordering {
|
||||
if a == &'J' && b == &'J' { return Ordering::Equal }
|
||||
else if a == &'J' { return Ordering::Less }
|
||||
else if b == &'J' { return Ordering::Greater }
|
||||
else {
|
||||
return card_rank(b).partial_cmp(&card_rank(a)).unwrap();
|
||||
}
|
||||
}
|
||||
|
||||
impl DaySolver for Day7 {
|
||||
|
||||
|
||||
fn solve_part1(&mut self) -> String {
|
||||
let mut hands_and_types: Vec<(&Hand, u8)> = self.hands.iter()
|
||||
.map(|h| (h, h.calc_type()))
|
||||
.collect();
|
||||
hands_and_types.sort_by(|a, b| {
|
||||
if a.1 != b.1 {
|
||||
return a.1.partial_cmp(&b.1).unwrap();
|
||||
} else {
|
||||
for i in 0usize..5 {
|
||||
let card_comp = compare_card(&a.0.cards[i], &b.0.cards[i]);
|
||||
if card_comp.is_ne() {
|
||||
return card_comp;
|
||||
}
|
||||
}
|
||||
return Ordering::Equal;
|
||||
}
|
||||
});
|
||||
return hands_and_types.iter().map(|(h,_)|h).enumerate()
|
||||
.map(|(r, h)| (r + 1) * h.bid)
|
||||
.sum::<usize>()
|
||||
.to_string();
|
||||
}
|
||||
|
||||
fn solve_part2(&mut self) -> String {
|
||||
let mut hands_and_max_types: Vec<(&Hand, u8)> = self.hands.iter()
|
||||
.map(|h| (h, h.calc_max_type()))
|
||||
.collect();
|
||||
hands_and_max_types.sort_by(|a, b| {
|
||||
if a.1 != b.1 {
|
||||
return a.1.partial_cmp(&b.1).unwrap();
|
||||
} else {
|
||||
for i in 0..5 {
|
||||
let card_comp = compare_card_pt2(&a.0.cards[i], &b.0.cards[i]);
|
||||
if card_comp.is_ne() {
|
||||
return card_comp;
|
||||
}
|
||||
}
|
||||
return Ordering::Equal;
|
||||
}
|
||||
});
|
||||
// for (hand, max_type) in &hands_and_max_types {
|
||||
// println!("Hand {} with type {}", hand, max_type);
|
||||
// }
|
||||
return hands_and_max_types.iter().map(|(h,_)|h).enumerate()
|
||||
.map(|(r, h)| (r + 1) * h.bid)
|
||||
.sum::<usize>()
|
||||
.to_string();
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
let mut day = Day7::create(read_file("input/day07_example.txt"));
|
||||
assert_eq!("6440", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2() {
|
||||
let mut day = Day7::create(read_file("input/day07_example.txt"));
|
||||
assert_eq!("5905", day.solve_part2());
|
||||
}
|
||||
164
src/day8.rs
Normal file
164
src/day8.rs
Normal file
@@ -0,0 +1,164 @@
|
||||
use std::collections::HashMap;
|
||||
use num::{BigInt, Integer};
|
||||
use crate::day_solver::DaySolver;
|
||||
#[cfg(test)]
|
||||
use crate::util::read_file;
|
||||
|
||||
pub struct Day8 {
|
||||
instructions: Vec<char>,
|
||||
nodes: HashMap<String, (String, String)>
|
||||
}
|
||||
|
||||
impl Day8 {
|
||||
|
||||
pub fn create(input: String) -> Self {
|
||||
let mut lines = input.lines();
|
||||
|
||||
let instructions = lines.next().unwrap();
|
||||
|
||||
// Skip blank line
|
||||
lines.next();
|
||||
|
||||
let mut nodes = HashMap::new();
|
||||
for line in lines {
|
||||
let (node_id, options) = line.split_once(" = ").unwrap();
|
||||
let (left, right) = options[1..(options.len() - 1)].split_once(", ").unwrap();
|
||||
nodes.insert(node_id.to_string(), (left.to_string(), right.to_string()));
|
||||
}
|
||||
|
||||
// Put the input into the day struct
|
||||
return Day8 {
|
||||
instructions: instructions.chars().collect(),
|
||||
nodes
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Day8 {
|
||||
fn follow_instruction(&self, cur_loc: &str, instruction: &char) -> &String {
|
||||
let cur_options = self.nodes.get(cur_loc).unwrap();
|
||||
return if instruction == &'L' {
|
||||
&cur_options.0
|
||||
} else {
|
||||
&cur_options.1
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct Period {
|
||||
start: BigInt,
|
||||
repeat: BigInt
|
||||
}
|
||||
|
||||
impl DaySolver for Day8 {
|
||||
fn solve_part1(&mut self) -> String {
|
||||
|
||||
let mut i = 0usize;
|
||||
let mut cur_loc = "AAA";
|
||||
while cur_loc != "ZZZ" {
|
||||
let instruction = &self.instructions[i % self.instructions.len()];
|
||||
cur_loc = self.follow_instruction(cur_loc, instruction);
|
||||
i += 1;
|
||||
}
|
||||
return i.to_string();
|
||||
}
|
||||
|
||||
fn solve_part2(&mut self) -> String {
|
||||
|
||||
// Let's start with the naive approach
|
||||
let start_nodes: Vec<&String> = self.nodes.keys().filter(|n| n.ends_with('A')).collect();
|
||||
|
||||
// let's assume periodicity, so we're gonna try and found out at which iterations we get a valid endpoint for each node
|
||||
let mut periods_per_start_node: Vec<Period> = Vec::new();
|
||||
for start_node in start_nodes {
|
||||
let mut cur_loc = start_node;
|
||||
let mut i = 0;
|
||||
let mut end_times: Vec<usize> = Vec::new();
|
||||
// Stop if i % instruction.len() == 0 && cur_loc == start_node, so continue if not that
|
||||
while i == 0 || !(i % self.instructions.len() == 0 && cur_loc == start_node) {
|
||||
let instruction = &self.instructions[i % self.instructions.len()];
|
||||
cur_loc = self.follow_instruction(cur_loc, instruction);
|
||||
i += 1;
|
||||
if cur_loc.ends_with('Z') {
|
||||
end_times.push(i);
|
||||
|
||||
// Using this logging, we found out that each of the start_nodes has basically some time before it finds a valid end, and then it repeats that after a while:
|
||||
// println!("Found period at {} for {}", i, cur_loc);
|
||||
// if let Some(last_period) = last_period_option{
|
||||
// println!("iterations since last period: {}", i - last_period);
|
||||
// }
|
||||
// if periods.len() > 10 {
|
||||
// break
|
||||
// }
|
||||
if end_times.len() > 2 && end_times[2] - end_times[1] == end_times[1] - end_times[0] {
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// println!("Start node {}, after {} with period {}: {:?}", start_node, i, end_times[1]-end_times[0], end_times);
|
||||
periods_per_start_node.push(Period {
|
||||
start: BigInt::from(end_times[0]),
|
||||
repeat: BigInt::from(end_times[1] - end_times[0])
|
||||
})
|
||||
}
|
||||
|
||||
// Now we just need to find out when these periods fall at the same time
|
||||
// This appears to be the LCM of all periods
|
||||
// This only works because the period and start are the same for each sequence we got...
|
||||
let mut solution_period: Period = periods_per_start_node.first().unwrap().to_owned();
|
||||
for period in periods_per_start_node.iter().skip(1) {
|
||||
solution_period = Period {
|
||||
start: solution_period.start,
|
||||
repeat: solution_period.repeat.lcm(&period.repeat)
|
||||
};
|
||||
}
|
||||
|
||||
// let mut i = 0usize;
|
||||
//
|
||||
// while !cur_nodes.iter().all(|n| n.ends_with('Z')) {
|
||||
// let instruction = &self.instructions[i % self.instructions.len()];
|
||||
// for j in 0..cur_nodes.len() {
|
||||
// cur_nodes[j] = self.follow_instruction(&cur_nodes[j], instruction);
|
||||
// }
|
||||
// i += 1;
|
||||
// }
|
||||
|
||||
return solution_period.repeat.to_string();
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
let mut day = Day8::create(read_file("input/day08_example.txt"));
|
||||
assert_eq!("2", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1_2() {
|
||||
let mut day = Day8::create(String::from("LLR
|
||||
|
||||
AAA = (BBB, BBB)
|
||||
BBB = (AAA, ZZZ)
|
||||
ZZZ = (ZZZ, ZZZ)
|
||||
"));
|
||||
assert_eq!("6", day.solve_part1());
|
||||
}
|
||||
|
||||
|
||||
|
||||
#[test]
|
||||
fn test_part2() {
|
||||
let mut day = Day8::create(String::from("LR
|
||||
|
||||
11A = (11B, XXX)
|
||||
11B = (XXX, 11Z)
|
||||
11Z = (11B, XXX)
|
||||
22A = (22B, XXX)
|
||||
22B = (22C, 22C)
|
||||
22C = (22Z, 22Z)
|
||||
22Z = (22B, 22B)
|
||||
XXX = (XXX, XXX)"));
|
||||
assert_eq!("6", day.solve_part2());
|
||||
}
|
||||
69
src/day9.rs
Normal file
69
src/day9.rs
Normal file
@@ -0,0 +1,69 @@
|
||||
use crate::day_solver::DaySolver;
|
||||
#[cfg(test)]
|
||||
use crate::util::read_file;
|
||||
|
||||
pub struct Day9 {
|
||||
histories: Vec<Vec<i32>>
|
||||
}
|
||||
|
||||
impl Day9 {
|
||||
|
||||
pub fn create(input: String) -> Self {
|
||||
return Day9 {
|
||||
histories: input.lines().map(|h| h.split_whitespace().map(|n| n.parse().unwrap()).collect()).collect()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn find_next_in_history(history: &Vec<i32>) -> i32 {
|
||||
|
||||
if history.iter().all(|n| n == &0) {
|
||||
return 0
|
||||
}
|
||||
|
||||
let mut history_derivative = Vec::with_capacity(history.len());
|
||||
for i in 0..history.len() - 1 {
|
||||
history_derivative.push(history[i + 1] - history[i])
|
||||
}
|
||||
|
||||
return history.last().unwrap() + find_next_in_history(&history_derivative);
|
||||
|
||||
}
|
||||
|
||||
impl DaySolver for Day9 {
|
||||
|
||||
|
||||
fn solve_part1(&mut self) -> String {
|
||||
return self.histories.iter()
|
||||
.map(|h| {
|
||||
let res = find_next_in_history(h);
|
||||
// println!("{:?} yields {}", h, res);
|
||||
res
|
||||
})
|
||||
.sum::<i32>().to_string()
|
||||
}
|
||||
|
||||
fn solve_part2(&mut self) -> String {
|
||||
return self.histories.iter()
|
||||
.map(|h| {
|
||||
let mut h_reverse = h.clone();
|
||||
h_reverse.reverse();
|
||||
let res = find_next_in_history(&h_reverse);
|
||||
// println!("{:?} yields {}", h, res);
|
||||
res
|
||||
})
|
||||
.sum::<i32>().to_string()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part1() {
|
||||
let mut day = Day9::create(read_file("input/day09_example.txt"));
|
||||
assert_eq!("114", day.solve_part1());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_part2() {
|
||||
let mut day = Day9::create(read_file("input/day09_example.txt"));
|
||||
assert_eq!("2", day.solve_part2());
|
||||
}
|
||||
24
src/main.rs
24
src/main.rs
@@ -1,25 +1,36 @@
|
||||
extern crate core;
|
||||
|
||||
use std::time::Instant;
|
||||
use crate::day10::Day10;
|
||||
use crate::day11::Day11;
|
||||
use crate::day12::Day12;
|
||||
use crate::day1::Day1;
|
||||
use crate::day2::Day2;
|
||||
use crate::day3::Day3;
|
||||
use crate::day4::Day4;
|
||||
use crate::day5::Day5;
|
||||
use crate::day6::Day6;
|
||||
use crate::day7::Day7;
|
||||
use crate::day8::Day8;
|
||||
use crate::day9::Day9;
|
||||
use crate::day_solver::DaySolver;
|
||||
use crate::util::read_file;
|
||||
|
||||
mod util;
|
||||
mod day_solver;
|
||||
mod day1;
|
||||
mod day2;
|
||||
mod day3;
|
||||
mod day4;
|
||||
mod day5;
|
||||
mod day6;
|
||||
mod day_solver;
|
||||
mod day7;
|
||||
mod day8;
|
||||
mod day9;
|
||||
mod day10;
|
||||
mod day11;
|
||||
mod day12;
|
||||
|
||||
const MAX_DAY: u8 = 6;
|
||||
const DEFAULT_BENCHMARK_AMOUNT: u32 = 100;
|
||||
|
||||
fn main() {
|
||||
@@ -96,6 +107,12 @@ fn build_day_solver(day: u8, input: String) -> Option<Box<dyn DaySolver>> {
|
||||
4 => Some(Box::new(Day4::create(input))),
|
||||
5 => Some(Box::new(Day5::create(input))),
|
||||
6 => Some(Box::new(Day6::create(input))),
|
||||
7 => Some(Box::new(Day7::create(input))),
|
||||
8 => Some(Box::new(Day8::create(input))),
|
||||
9 => Some(Box::new(Day9::create(input))),
|
||||
10 => Some(Box::new(Day10::create(input))),
|
||||
11 => Some(Box::new(Day11::create(input))),
|
||||
12 => Some(Box::new(Day12::create(input))),
|
||||
_ => None
|
||||
}
|
||||
}
|
||||
@@ -175,7 +192,8 @@ fn run_once(single_day: bool, day: u8, silent: bool, bench_results: &mut Vec<Aoc
|
||||
|
||||
fn solve_all(silent: bool) -> AocBenchResult {
|
||||
let mut bench_results = Vec::new();
|
||||
for day in 1..(MAX_DAY + 1) {
|
||||
let max_day = (1..).take_while(|d| build_day_solver(*d, "".to_string()).is_some()).last().unwrap();
|
||||
for day in 1..(max_day + 1) {
|
||||
bench_results.push(solve(day, silent));
|
||||
}
|
||||
return AocBenchResult {
|
||||
|
||||
82
src/util.rs
82
src/util.rs
@@ -1,6 +1,7 @@
|
||||
use std::fs;
|
||||
use std::fmt::Display;
|
||||
use std::fs;
|
||||
|
||||
use itertools::Itertools;
|
||||
use num::Integer;
|
||||
|
||||
pub fn read_file(filename: &str) -> String {
|
||||
@@ -18,7 +19,9 @@ pub fn into_lines(input: String) -> Vec<String> {
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Grid<T> {
|
||||
pub(crate) width: usize,
|
||||
pub(crate) data: Vec<T>
|
||||
pub(crate) data: Vec<T>,
|
||||
/** What to return if a coordinate that is out of bounds is requested */
|
||||
pub(crate) default: Option<T>
|
||||
}
|
||||
|
||||
impl<T: Clone + Sized> Grid<T> {
|
||||
@@ -43,13 +46,23 @@ impl<T: Clone + Sized> Grid<T> {
|
||||
y * self.width + x
|
||||
}
|
||||
|
||||
pub(crate) fn coord(&self, i: usize) -> Coord<usize> {
|
||||
return Coord::new(i % self.width, i / self.width);
|
||||
}
|
||||
|
||||
pub(crate) fn height(&self) -> usize {
|
||||
self.data.len() / self.width
|
||||
}
|
||||
|
||||
pub(crate) fn get(&self, x: &usize, y: &usize) -> &T {
|
||||
if self.in_bounds(x, y) {
|
||||
let idx = self.idx(x, y);
|
||||
&self.data[idx]
|
||||
} else if let Some(x) = &self.default {
|
||||
return x;
|
||||
} else {
|
||||
panic!("Out of grid bounds: {}, {}", x, y);
|
||||
}
|
||||
}
|
||||
|
||||
#[allow(dead_code)]
|
||||
@@ -57,6 +70,22 @@ impl<T: Clone + Sized> Grid<T> {
|
||||
let idx = self.idx(x, y);
|
||||
self.data[idx] = v;
|
||||
}
|
||||
|
||||
pub fn in_bounds(&self, x: &usize, y: &usize) -> bool {
|
||||
return x < &self.width && y < &self.height()
|
||||
}
|
||||
|
||||
pub fn find_positions<'a, P>(&'a self, predicate: &'a P) -> impl Iterator<Item = Coord<usize>> + 'a
|
||||
where P: Fn(&'a T) -> bool + 'a {
|
||||
|
||||
return self.data.iter().enumerate()
|
||||
.filter(|(_,x)| predicate(x).to_owned())
|
||||
.map(|(i, _)| self.coord(i));
|
||||
}
|
||||
|
||||
pub fn validate(&self) {
|
||||
debug_assert!(&self.data.len() % self.width == 0)
|
||||
}
|
||||
}
|
||||
|
||||
impl <T: Display + Clone + Sized> Grid<T> {
|
||||
@@ -79,6 +108,17 @@ impl <T: Display + Clone + Sized> Grid<T> {
|
||||
}
|
||||
}
|
||||
|
||||
impl <T: PartialEq> Grid<T> {
|
||||
|
||||
pub fn find(&self, v: &T) -> Option<Coord<usize>> {
|
||||
return if let Some((i, _)) = self.data.iter().find_position(|x| x == &v) {
|
||||
return Some(Coord::new(i % self.width, i / self.width))
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
|
||||
pub struct Coord<T> where T: Sized {
|
||||
pub x: T,
|
||||
@@ -100,3 +140,41 @@ impl <T> Coord<T> where T: Integer + Copy {
|
||||
}
|
||||
}
|
||||
|
||||
impl Coord<usize> {
|
||||
pub fn north(&self) -> Option<Coord<usize>> {
|
||||
if self.y == 0 { return None }
|
||||
return Some(Coord::new(self.x, self.y - 1));
|
||||
}
|
||||
|
||||
pub fn south(&self) -> Option<Coord<usize>> {
|
||||
return Some(Coord::new(self.x, self.y + 1));
|
||||
}
|
||||
|
||||
pub fn east(&self) -> Option<Coord<usize>> {
|
||||
return Some(Coord::new(self.x + 1, self.y));
|
||||
}
|
||||
|
||||
pub fn west(&self) -> Option<Coord<usize>> {
|
||||
if self.x == 0 { return None }
|
||||
return Some(Coord::new(self.x - 1, self.y));
|
||||
}
|
||||
|
||||
pub fn compass(&self) -> Vec<Coord<usize>> {
|
||||
|
||||
let mut res = Vec::with_capacity(4);
|
||||
if let Some(north) = self.north() {
|
||||
res.push(north);
|
||||
}
|
||||
if let Some(south) = self.south() {
|
||||
res.push(south);
|
||||
}
|
||||
if let Some(east) = self.east() {
|
||||
res.push(east);
|
||||
}
|
||||
if let Some(west) = self.west() {
|
||||
res.push(west);
|
||||
}
|
||||
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user