1028 lines
22 KiB
Scheme
1028 lines
22 KiB
Scheme
;; Part One
|
|
|
|
;; #+NAME: day8-imports
|
|
|
|
;; [[file:chicken-src.org::day8-imports][day8-imports]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(import (chicken irregex)
|
|
(chicken sort)
|
|
(chicken string)
|
|
(chicken type)
|
|
(chicken format))
|
|
;; day8-imports ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-input-scm
|
|
|
|
;; [[file:chicken-src.org::day8-input-scm][day8-input-scm]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define input "
|
|
LRRLRRRLRLRLLRRLRLRLLRLRLRLLLLRRRLLRRRLRRRLRRRLLRLLRLRRLRLRLRRRLLLLRRLRLRRLRRLLRRRLRRLRLRRLRRLRRLRRLRLLRRLRRLLLLRLRLRRLLRRLLRRLRLLRLRRLRRLRRLRRRLRRLLLRRLRRRLRLRRRLLRLRRLRRRLRRLLRRRLRRLRLLRRLLRRLRRLRRRLRRLLRRLRRRLRLRLRLRLRLRRLRRLLRRRLRLRRLRRRLRLRLRLRLRLRRRLRRLRRRLLRRLRLLRRRLRRLRLLLLRRRLRRLRRRR
|
|
|
|
DRM = (DLQ, BGR)
|
|
PKD = (TNC, DKH)
|
|
FSM = (LKS, KPG)
|
|
NDS = (KGD, HNX)
|
|
KQQ = (DPF, GKD)
|
|
SBX = (DDL, MGH)
|
|
GCV = (KMG, GLP)
|
|
PCT = (JXN, XDR)
|
|
KHR = (QPK, FPQ)
|
|
FCK = (GLS, GGP)
|
|
MKR = (XPQ, TJX)
|
|
PFP = (RPR, LPS)
|
|
XPC = (SSS, FRX)
|
|
PTJ = (LSC, CND)
|
|
GVJ = (NRL, SHV)
|
|
QNF = (MBQ, GSR)
|
|
TMK = (DVM, BJM)
|
|
KTG = (QVG, LLX)
|
|
JMK = (BKF, XDK)
|
|
JQV = (DCM, RLT)
|
|
VFH = (FDD, GML)
|
|
XPN = (FKG, CXG)
|
|
GDX = (GRV, BPP)
|
|
GVP = (JLP, XNJ)
|
|
TCB = (RVR, QXQ)
|
|
DLP = (XDK, BKF)
|
|
FQG = (RMH, QHR)
|
|
XDD = (SMK, HMN)
|
|
TLL = (TVV, FXX)
|
|
NPT = (NGC, FQM)
|
|
XQK = (PQG, QTK)
|
|
DMQ = (RVS, KNQ)
|
|
QKR = (SJD, PLH)
|
|
XNV = (SJB, GCV)
|
|
SRP = (CDK, JFK)
|
|
FRP = (FFD, XPC)
|
|
PVC = (XVD, MGD)
|
|
DPP = (BFQ, XDD)
|
|
CNV = (LQC, JJH)
|
|
LLH = (CFP, BGF)
|
|
XCK = (VDX, GFC)
|
|
KGD = (LSF, FNK)
|
|
MJA = (FXB, QVX)
|
|
QLH = (KRM, KVD)
|
|
QCR = (TKN, RNB)
|
|
PSR = (FBL, HKJ)
|
|
MGK = (BVC, HVL)
|
|
PVK = (JRN, SMV)
|
|
JTD = (VNS, FGJ)
|
|
PMD = (HGN, NBM)
|
|
DRF = (CPR, RTX)
|
|
HJL = (CBR, VDR)
|
|
PPB = (GDX, DXB)
|
|
DVR = (LLT, GVJ)
|
|
JRN = (RLD, RSL)
|
|
NXM = (RBN, NVD)
|
|
RLV = (FRM, FJB)
|
|
SJB = (KMG, GLP)
|
|
KJM = (XJH, LQX)
|
|
GRB = (HHL, RGD)
|
|
LQC = (BMC, XSH)
|
|
NRB = (NQD, RFT)
|
|
SQH = (QJT, JXX)
|
|
JLX = (RJL, HHH)
|
|
HVR = (XPN, JFM)
|
|
FVD = (RXS, RHH)
|
|
KSX = (TCB, GDK)
|
|
GKJ = (TQF, HQJ)
|
|
HQL = (BMR, PBX)
|
|
QFP = (NJM, FSB)
|
|
TPH = (NXT, RKN)
|
|
SRL = (LSP, LFV)
|
|
SDL = (MGL, PSK)
|
|
MFX = (FSM, LQF)
|
|
RFT = (FLV, GMS)
|
|
BTG = (DRS, PVC)
|
|
HLR = (DSB, DPP)
|
|
DXB = (BPP, GRV)
|
|
NHS = (HQG, GVP)
|
|
GKK = (DCM, RLT)
|
|
MJT = (JNR, PGC)
|
|
KDS = (FFD, XPC)
|
|
TSS = (BGX, QQX)
|
|
FKC = (NBN, SJP)
|
|
HHQ = (GVP, HQG)
|
|
JKF = (QRR, GFD)
|
|
CXG = (SDD, TMN)
|
|
GCG = (TCC, TDT)
|
|
NQX = (DMQ, DPM)
|
|
GHX = (BJQ, CHJ)
|
|
JQC = (HNQ, RJF)
|
|
QBB = (GNH, XSC)
|
|
BJG = (VMH, FCN)
|
|
VMS = (KRX, VLQ)
|
|
GSF = (NQM, KBH)
|
|
JQQ = (PKD, GNB)
|
|
KFG = (BGX, QQX)
|
|
TTV = (SNB, JQF)
|
|
CXJ = (CND, LSC)
|
|
GGP = (PBH, XNG)
|
|
FCV = (NLP, QJK)
|
|
NSB = (KSX, SLL)
|
|
JBH = (RGK, NSS)
|
|
CQH = (HJL, FKR)
|
|
VRX = (HKJ, FBL)
|
|
HJZ = (QVX, FXB)
|
|
RLD = (BJP, RLV)
|
|
HHH = (PNJ, HPJ)
|
|
LSC = (NRP, DCF)
|
|
BVM = (RCG, QLL)
|
|
KGN = (PRB, MLT)
|
|
NTV = (MRQ, NHQ)
|
|
VXT = (VFH, MBX)
|
|
RLG = (MJQ, RNL)
|
|
JVX = (HJQ, FNV)
|
|
XGH = (HHK, JXT)
|
|
NHC = (HPX, LGG)
|
|
VPC = (XCL, HPQ)
|
|
HKJ = (RQC, TMK)
|
|
PGQ = (FTX, MNP)
|
|
MPF = (KNM, BJG)
|
|
MFT = (DRS, PVC)
|
|
XNG = (RCS, JNH)
|
|
RMH = (GHD, MPF)
|
|
PFM = (PGQ, XHJ)
|
|
TRN = (TCP, TCP)
|
|
NHP = (JMG, VGP)
|
|
JSK = (JBG, PVM)
|
|
FSB = (MGK, HTD)
|
|
BPR = (VFH, MBX)
|
|
RHM = (LHD, PTF)
|
|
PRV = (RJL, HHH)
|
|
GNC = (HVR, PSV)
|
|
PSV = (JFM, XPN)
|
|
KMG = (KDR, RTV)
|
|
RKL = (DPP, DSB)
|
|
GLN = (QJT, JXX)
|
|
FNK = (XXP, QDR)
|
|
JDP = (HVR, PSV)
|
|
HHD = (VPC, MDS)
|
|
XHJ = (MNP, FTX)
|
|
XVJ = (RGG, BCB)
|
|
DRH = (CDK, JFK)
|
|
BMC = (TTQ, KHR)
|
|
TCT = (JQD, QBB)
|
|
BCS = (HLV, MKR)
|
|
LFV = (GTL, NSX)
|
|
JCS = (JQC, NDG)
|
|
SBJ = (PHS, QMN)
|
|
HPZ = (DQD, PFP)
|
|
BFM = (PMD, JGB)
|
|
QBL = (KVC, TXK)
|
|
RGD = (NXH, KQQ)
|
|
PBX = (LBP, FPK)
|
|
FDD = (TCX, CSN)
|
|
RJT = (CQG, JSQ)
|
|
BMR = (FPK, LBP)
|
|
RBN = (DRF, VJB)
|
|
PHB = (NXR, LPM)
|
|
BPN = (PPX, PPX)
|
|
KVC = (NSF, TQK)
|
|
PXB = (GJH, JHM)
|
|
BCB = (NTR, KKB)
|
|
KXM = (NHS, HHQ)
|
|
VTT = (NCB, HCR)
|
|
SHP = (LQX, XJH)
|
|
RCG = (CLL, TCT)
|
|
LHG = (GSF, PRJ)
|
|
XCL = (JLX, PRV)
|
|
LXB = (RHH, RXS)
|
|
FKZ = (TJS, BJB)
|
|
NNH = (CFD, XMX)
|
|
NTD = (NCX, PVK)
|
|
DCF = (JHJ, VMN)
|
|
GJH = (JTD, CJD)
|
|
VBS = (CDQ, LFQ)
|
|
MGL = (GGB, QNN)
|
|
TXK = (NSF, TQK)
|
|
HRX = (QFP, BJR)
|
|
GMS = (GKJ, TNF)
|
|
RGA = (PFP, DQD)
|
|
KTS = (GSF, PRJ)
|
|
TPP = (VPC, MDS)
|
|
JNV = (BHV, XQK)
|
|
DXL = (HDP, KTG)
|
|
MBR = (GRS, GTG)
|
|
KVJ = (LPH, NGG)
|
|
HRG = (RNL, MJQ)
|
|
XHL = (JXF, FVH)
|
|
MMC = (FHM, HNF)
|
|
HGC = (SHT, HBF)
|
|
LPS = (NTV, CGR)
|
|
FKR = (CBR, VDR)
|
|
BHV = (PQG, QTK)
|
|
BKF = (SRP, DRH)
|
|
JMA = (BJB, TJS)
|
|
MPT = (HRX, VSD)
|
|
QHL = (NRB, HJG)
|
|
PDG = (KJM, SHP)
|
|
HFT = (HHQ, NHS)
|
|
SJD = (GPM, PPB)
|
|
NSF = (NRX, SRL)
|
|
MXG = (JVJ, BMF)
|
|
PHD = (BQK, VKV)
|
|
VBH = (TXK, KVC)
|
|
NJM = (HTD, MGK)
|
|
TVV = (LLH, HFB)
|
|
RPS = (GGQ, SNK)
|
|
HPR = (LJS, DJR)
|
|
FDR = (QKT, GRX)
|
|
LLT = (SHV, NRL)
|
|
VQC = (DPM, DMQ)
|
|
MJQ = (CLD, FCV)
|
|
BFG = (GJH, JHM)
|
|
GFS = (PMP, VXL)
|
|
LBP = (HRF, GRB)
|
|
BXC = (MFS, NRM)
|
|
CFD = (QMQ, HPR)
|
|
HPN = (JQC, NDG)
|
|
BBJ = (JTL, QQK)
|
|
VVL = (CDN, STB)
|
|
HFB = (CFP, BGF)
|
|
NNG = (XVP, CQH)
|
|
QKM = (KDS, FRP)
|
|
VJB = (CPR, RTX)
|
|
KQB = (XCK, BSF)
|
|
LKS = (LDJ, MXG)
|
|
GTL = (FVD, LXB)
|
|
PJS = (BGV, MLM)
|
|
KNM = (FCN, VMH)
|
|
FCN = (VGR, KHV)
|
|
RPJ = (XKD, BPM)
|
|
GLP = (KDR, RTV)
|
|
NXL = (VTS, SDL)
|
|
XDX = (MPT, FXH)
|
|
KRX = (DCD, DHH)
|
|
CTP = (CRQ, DPL)
|
|
SRG = (SKH, SLF)
|
|
QVX = (NDC, NPL)
|
|
XVK = (SNB, JQF)
|
|
RBT = (NSD, SBJ)
|
|
RXS = (FKC, JSS)
|
|
SFX = (PRB, MLT)
|
|
SRS = (FVH, JXF)
|
|
NRL = (RLG, HRG)
|
|
QKK = (PBX, BMR)
|
|
DPL = (PTQ, DBH)
|
|
PFD = (JQV, GKK)
|
|
VGR = (KMX, DVR)
|
|
FQX = (LHD, PTF)
|
|
LXT = (RHM, FQX)
|
|
JHV = (MBR, PHJ)
|
|
JNN = (VKG, SLT)
|
|
XDK = (DRH, SRP)
|
|
JBR = (BDR, GFS)
|
|
BNM = (VKG, SLT)
|
|
CJD = (VNS, FGJ)
|
|
FPK = (HRF, GRB)
|
|
PBH = (JNH, RCS)
|
|
FGV = (FDR, TMD)
|
|
LSF = (XXP, QDR)
|
|
RBM = (VHG, BDL)
|
|
TNF = (HQJ, TQF)
|
|
TRM = (JHT, BCG)
|
|
GBH = (XMJ, JFF)
|
|
DBH = (DSS, RQL)
|
|
PGB = (BXR, DXL)
|
|
QFR = (TDT, TCC)
|
|
HHL = (NXH, KQQ)
|
|
HGN = (BFG, PXB)
|
|
PXC = (BPN, BPN)
|
|
NDF = (VQC, NQX)
|
|
GSK = (BVV, SBX)
|
|
TCM = (VBS, HCN)
|
|
HTD = (BVC, HVL)
|
|
SHD = (MHG, HNG)
|
|
LQX = (QVF, LBV)
|
|
MSF = (FDF, VLP)
|
|
NRP = (VMN, JHJ)
|
|
TQF = (BXC, JCR)
|
|
MBX = (GML, FDD)
|
|
JCR = (MFS, NRM)
|
|
NTR = (PCN, RNT)
|
|
JHJ = (XMT, NPT)
|
|
SQX = (CDN, STB)
|
|
CSN = (GBJ, PGB)
|
|
GDJ = (GBM, GCJ)
|
|
XGL = (HJQ, FNV)
|
|
PLD = (BFL, BFL)
|
|
NRX = (LFV, LSP)
|
|
TFF = (HGQ, MJT)
|
|
JVJ = (TMS, HPK)
|
|
BSF = (VDX, GFC)
|
|
GML = (CSN, TCX)
|
|
BFJ = (GFD, QRR)
|
|
FGJ = (PGF, VMS)
|
|
TQK = (SRL, NRX)
|
|
GQD = (MDD, HLQ)
|
|
TJX = (XCG, DJH)
|
|
GRR = (LPM, NXR)
|
|
PTQ = (DSS, DSS)
|
|
HHK = (KLD, NNG)
|
|
FBR = (KXM, HFT)
|
|
RLT = (JMK, DLP)
|
|
PHL = (QHR, RMH)
|
|
DVM = (JTP, KDM)
|
|
MNF = (RPJ, RMF)
|
|
RMF = (BPM, XKD)
|
|
GGQ = (MFT, BTG)
|
|
CLD = (NLP, QJK)
|
|
NMR = (FNL, LXT)
|
|
CLX = (TRP, GMD)
|
|
QMQ = (DJR, LJS)
|
|
KDR = (PKC, NRF)
|
|
KKG = (VHG, BDL)
|
|
FBQ = (TPP, HHD)
|
|
QVV = (LNR, GSK)
|
|
VKV = (MFX, FDL)
|
|
HJG = (NQD, RFT)
|
|
XVD = (VXT, BPR)
|
|
NCX = (SMV, JRN)
|
|
QLN = (CDJ, TDK)
|
|
GFC = (CKR, LNC)
|
|
HGQ = (JNR, PGC)
|
|
NDG = (RJF, HNQ)
|
|
CBC = (NSD, SBJ)
|
|
BQK = (FDL, MFX)
|
|
VGV = (HGC, TQG)
|
|
VGP = (RJT, KPK)
|
|
VMN = (XMT, NPT)
|
|
PSH = (NSS, RGK)
|
|
PPL = (FXH, MPT)
|
|
DCD = (SBR, DTS)
|
|
MDD = (MQX, FQT)
|
|
XCG = (XVK, TTV)
|
|
LFQ = (SNS, VBL)
|
|
JHT = (FMN, HMC)
|
|
KNQ = (QKM, DPS)
|
|
PVM = (CHL, GLT)
|
|
JMG = (KPK, RJT)
|
|
XKD = (GQJ, NXL)
|
|
DGG = (CCB, CQX)
|
|
HNF = (MNC, FKZ)
|
|
QTL = (PSH, JBH)
|
|
RNL = (CLD, FCV)
|
|
BDR = (PMP, VXL)
|
|
GKH = (KXM, HFT)
|
|
RQC = (DVM, BJM)
|
|
GSR = (PPL, XDX)
|
|
JQD = (GNH, XSC)
|
|
GRS = (RTN, MPH)
|
|
BPP = (GBH, KQX)
|
|
XVP = (HJL, FKR)
|
|
PKZ = (NMR, KJK)
|
|
SLT = (BVM, KMJ)
|
|
XHA = (KJK, NMR)
|
|
BQQ = (FDR, TMD)
|
|
GGC = (CXJ, PTJ)
|
|
NBM = (PXB, BFG)
|
|
RQL = (BBH, NLT)
|
|
KJK = (FNL, LXT)
|
|
PSK = (GGB, QNN)
|
|
FQT = (DRL, NDS)
|
|
SJT = (VQC, NQX)
|
|
QHT = (GFS, BDR)
|
|
QJT = (PJS, DNG)
|
|
SVT = (PDG, GSS)
|
|
MBQ = (PPL, XDX)
|
|
VHL = (PVM, JBG)
|
|
QCJ = (JKK, JSR)
|
|
NQH = (LKQ, FBG)
|
|
XNJ = (QNF, LPL)
|
|
PQV = (CKJ, JHV)
|
|
FHM = (MNC, MNC)
|
|
FPN = (DLQ, BGR)
|
|
BJR = (NJM, FSB)
|
|
HPQ = (PRV, JLX)
|
|
KMJ = (QLL, RCG)
|
|
FTX = (TSM, PDR)
|
|
JXT = (KLD, NNG)
|
|
DPS = (KDS, FRP)
|
|
KKB = (RNT, PCN)
|
|
XCB = (TDM, HXC)
|
|
TCP = (PFP, DQD)
|
|
CDK = (NDF, SJT)
|
|
HCR = (HSP, PFD)
|
|
SNK = (BTG, MFT)
|
|
TKN = (QTL, HPL)
|
|
GSS = (KJM, SHP)
|
|
NRF = (SVT, RGV)
|
|
FLV = (GKJ, TNF)
|
|
QPK = (FPN, DRM)
|
|
RNB = (QTL, HPL)
|
|
HPJ = (XGL, JVX)
|
|
NSD = (QMN, PHS)
|
|
JXF = (DQV, XPX)
|
|
PRJ = (KBH, NQM)
|
|
XMT = (NGC, FQM)
|
|
JLP = (QNF, LPL)
|
|
RND = (HLV, MKR)
|
|
QRR = (GPQ, GLL)
|
|
LNR = (BVV, SBX)
|
|
PQG = (TXR, NTD)
|
|
JXX = (PJS, DNG)
|
|
QQX = (VTT, XKV)
|
|
RRJ = (GLS, GGP)
|
|
MLM = (VCD, BTQ)
|
|
QVG = (TMM, CTP)
|
|
KRM = (MSF, HVT)
|
|
XKV = (HCR, NCB)
|
|
LJX = (RNB, TKN)
|
|
CCB = (NXM, QSG)
|
|
RJF = (FQP, VDH)
|
|
XBN = (BJQ, CHJ)
|
|
JHM = (JTD, CJD)
|
|
SMV = (RSL, RLD)
|
|
PDR = (GHX, XBN)
|
|
JFK = (NDF, SJT)
|
|
HCN = (LFQ, CDQ)
|
|
SLL = (TCB, GDK)
|
|
VBL = (JBR, QHT)
|
|
SMK = (RBM, KKG)
|
|
GDK = (QXQ, RVR)
|
|
KQX = (XMJ, JFF)
|
|
LKQ = (HLN, VTD)
|
|
JSQ = (QXG, CLX)
|
|
FFD = (FRX, SSS)
|
|
NRM = (XBP, NQH)
|
|
SBR = (PQQ, SRG)
|
|
BKR = (MHG, HNG)
|
|
QQK = (GQK, STS)
|
|
HVL = (DLF, QLH)
|
|
NHT = (PTJ, CXJ)
|
|
GLL = (TLL, LRR)
|
|
GLS = (PBH, XNG)
|
|
NHB = (QQK, JTL)
|
|
PFS = (KFG, TSS)
|
|
PCN = (PFS, QFB)
|
|
CJV = (BFL, PKZ)
|
|
JFM = (FKG, CXG)
|
|
GFD = (GLL, GPQ)
|
|
MDS = (XCL, HPQ)
|
|
FXH = (VSD, HRX)
|
|
DQD = (RPR, LPS)
|
|
HPX = (RRJ, FCK)
|
|
JNR = (SQQ, SQQ)
|
|
BGR = (PQV, DKS)
|
|
BRN = (BSF, XCK)
|
|
RVS = (QKM, DPS)
|
|
PLH = (GPM, PPB)
|
|
XSM = (QFS, GQD)
|
|
TTH = (TQG, HGC)
|
|
KBJ = (KTS, LHG)
|
|
RKN = (PCX, NSB)
|
|
TPK = (PFM, RFN)
|
|
MNC = (BJB, TJS)
|
|
PMM = (GRR, PHB)
|
|
QKT = (BNK, QKR)
|
|
HQG = (JLP, XNJ)
|
|
RRD = (JGB, PMD)
|
|
CPR = (TGM, VXS)
|
|
GGM = (GCJ, GBM)
|
|
HBF = (FQG, PHL)
|
|
NXH = (DPF, GKD)
|
|
TMD = (GRX, QKT)
|
|
FBL = (RQC, TMK)
|
|
GNB = (DKH, TNC)
|
|
LQF = (LKS, KPG)
|
|
BKN = (TRN, TRN)
|
|
QJK = (BLT, XVJ)
|
|
HLV = (TJX, XPQ)
|
|
XPX = (TPK, HQN)
|
|
BJP = (FJB, FRM)
|
|
GHD = (KNM, BJG)
|
|
XMX = (HPR, QMQ)
|
|
FNV = (NHT, GGC)
|
|
JGB = (HGN, NBM)
|
|
PKH = (HHK, JXT)
|
|
JXN = (VRR, VRR)
|
|
CHJ = (TLF, QSN)
|
|
XBP = (LKQ, FBG)
|
|
QTK = (TXR, NTD)
|
|
PKC = (SVT, RGV)
|
|
JNH = (MGV, MPJ)
|
|
FXB = (NDC, NPL)
|
|
XHQ = (KTS, LHG)
|
|
MFS = (NQH, XBP)
|
|
FQM = (XJB, TXN)
|
|
QNN = (JQQ, GBG)
|
|
GBG = (PKD, GNB)
|
|
TMN = (GRC, BCV)
|
|
HMN = (KKG, RBM)
|
|
DHH = (SBR, DTS)
|
|
KPG = (LDJ, MXG)
|
|
FDL = (LQF, FSM)
|
|
FXX = (LLH, HFB)
|
|
VSD = (BJR, QFP)
|
|
HVT = (FDF, VLP)
|
|
FRM = (CBB, GMX)
|
|
GQK = (QVV, QBV)
|
|
CKJ = (PHJ, MBR)
|
|
JJH = (XSH, BMC)
|
|
SQQ = (PLD, PLD)
|
|
KPK = (JSQ, CQG)
|
|
VLP = (HHT, MMC)
|
|
NLP = (XVJ, BLT)
|
|
VTS = (MGL, PSK)
|
|
DTS = (SRG, PQQ)
|
|
VCD = (GDJ, GGM)
|
|
VRR = (HLR, RKL)
|
|
VXS = (BKN, SRB)
|
|
GMD = (PSR, VRX)
|
|
PFK = (HXC, TDM)
|
|
SJP = (VSM, NNH)
|
|
TDK = (SRS, XHL)
|
|
KRS = (GCV, SJB)
|
|
MRQ = (CJK, PQD)
|
|
XJB = (JRK, RPS)
|
|
BGF = (QCR, LJX)
|
|
MLT = (MMF, DGG)
|
|
TCC = (MNF, KKL)
|
|
QMN = (GLN, SQH)
|
|
GQJ = (VTS, SDL)
|
|
BFQ = (SMK, HMN)
|
|
NSS = (JPQ, HXV)
|
|
MHG = (VGV, TTH)
|
|
KBH = (GPL, XCV)
|
|
DRL = (KGD, HNX)
|
|
HMC = (QDF, RGR)
|
|
QSN = (FBR, GKH)
|
|
SDD = (GRC, BCV)
|
|
TGH = (BPN, SSQ)
|
|
HNG = (TTH, VGV)
|
|
RHH = (FKC, JSS)
|
|
DQA = (MVV, LQJ)
|
|
QFB = (KFG, TSS)
|
|
TQG = (SHT, HBF)
|
|
KDM = (QKK, HQL)
|
|
XHV = (PLD, CJV)
|
|
PQD = (TPH, PTN)
|
|
SSS = (SQX, VVL)
|
|
GPM = (DXB, GDX)
|
|
KLD = (CQH, XVP)
|
|
LRR = (FXX, TVV)
|
|
HPL = (JBH, PSH)
|
|
TMS = (BQQ, FGV)
|
|
MMF = (CCB, CQX)
|
|
DLQ = (PQV, DKS)
|
|
PHJ = (GTG, GRS)
|
|
TLF = (GKH, FBR)
|
|
FJB = (CBB, GMX)
|
|
PTF = (PSF, PHD)
|
|
NPL = (RTG, QHL)
|
|
XMJ = (XHQ, KBJ)
|
|
PMP = (TRM, PJK)
|
|
JPQ = (KLM, TCM)
|
|
BCG = (FMN, HMC)
|
|
DRS = (MGD, XVD)
|
|
RGT = (PKH, XGH)
|
|
TGM = (BKN, BKN)
|
|
BPM = (GQJ, NXL)
|
|
VDX = (CKR, LNC)
|
|
XJH = (QVF, LBV)
|
|
MGD = (BPR, VXT)
|
|
RGR = (JSK, VHL)
|
|
SNS = (QHT, JBR)
|
|
SRB = (TRN, DVK)
|
|
NRQ = (LQC, JJH)
|
|
PSF = (BQK, VKV)
|
|
BMF = (TMS, HPK)
|
|
LGG = (FCK, RRJ)
|
|
HPK = (FGV, BQQ)
|
|
QBV = (GSK, LNR)
|
|
FNF = (PHB, GRR)
|
|
GLT = (JDP, GNC)
|
|
DKS = (JHV, CKJ)
|
|
RGV = (GSS, PDG)
|
|
HQN = (PFM, RFN)
|
|
GKD = (BFJ, JKF)
|
|
HXC = (HPN, JCS)
|
|
MGH = (BVB, FBQ)
|
|
LBV = (XCB, PFK)
|
|
LHD = (PHD, PSF)
|
|
CDQ = (SNS, VBL)
|
|
BTQ = (GGM, GDJ)
|
|
HMS = (CBC, RBT)
|
|
VTD = (CNV, NRQ)
|
|
JBG = (GLT, CHL)
|
|
LCB = (NGG, LPH)
|
|
FKG = (SDD, TMN)
|
|
BVV = (DDL, MGH)
|
|
RGG = (KKB, NTR)
|
|
FBG = (HLN, VTD)
|
|
KMX = (GVJ, LLT)
|
|
HRF = (HHL, RGD)
|
|
DGM = (QFS, GQD)
|
|
LPM = (QFR, GCG)
|
|
QXQ = (BCS, RND)
|
|
BGV = (BTQ, VCD)
|
|
BGX = (XKV, VTT)
|
|
XDR = (VRR, ZZZ)
|
|
BJM = (JTP, KDM)
|
|
RFN = (PGQ, XHJ)
|
|
DDL = (FBQ, BVB)
|
|
XCV = (JNN, BNM)
|
|
TCX = (GBJ, PGB)
|
|
QXG = (TRP, GMD)
|
|
VKG = (BVM, KMJ)
|
|
RSL = (RLV, BJP)
|
|
CDN = (QLN, CNM)
|
|
RVR = (BCS, RND)
|
|
BBH = (BXJ, BXJ)
|
|
BXR = (KTG, HDP)
|
|
DJH = (XVK, TTV)
|
|
DVK = (TCP, HPZ)
|
|
SLF = (TFF, KQV)
|
|
DJR = (SFX, KGN)
|
|
HHT = (FHM, FHM)
|
|
JSR = (JXM, JNV)
|
|
DSB = (BFQ, XDD)
|
|
DPM = (RVS, KNQ)
|
|
HJQ = (NHT, GGC)
|
|
ZZZ = (RKL, HLR)
|
|
RJL = (HPJ, PNJ)
|
|
BJQ = (TLF, QSN)
|
|
HQJ = (BXC, JCR)
|
|
FQP = (HMS, SRH)
|
|
PGF = (VLQ, KRX)
|
|
LQJ = (FNF, PMM)
|
|
JXM = (BHV, XQK)
|
|
PNJ = (JVX, XGL)
|
|
STB = (CNM, QLN)
|
|
BBS = (JXN, JXN)
|
|
KKL = (RMF, RPJ)
|
|
SHV = (HRG, RLG)
|
|
FPQ = (FPN, DRM)
|
|
GBJ = (DXL, BXR)
|
|
QHR = (GHD, MPF)
|
|
MDG = (JKK, JSR)
|
|
CRQ = (PTQ, DBH)
|
|
BVB = (TPP, HHD)
|
|
GRC = (RGT, VDD)
|
|
SKH = (TFF, KQV)
|
|
DHZ = (LQJ, MVV)
|
|
LSP = (NSX, GTL)
|
|
MPJ = (QBL, VBH)
|
|
TDT = (KKL, MNF)
|
|
TXN = (JRK, RPS)
|
|
HSP = (GKK, JQV)
|
|
JTL = (STS, GQK)
|
|
GBM = (QCJ, MDG)
|
|
HDP = (LLX, QVG)
|
|
GMX = (KQB, BRN)
|
|
PJK = (JHT, BCG)
|
|
NDC = (RTG, QHL)
|
|
LPL = (GSR, MBQ)
|
|
VLQ = (DCD, DHH)
|
|
QLL = (CLL, TCT)
|
|
RTV = (NRF, PKC)
|
|
DKH = (BBJ, NHB)
|
|
NGC = (XJB, TXN)
|
|
CNM = (CDJ, TDK)
|
|
XXP = (BSP, NHC)
|
|
FNL = (RHM, FQX)
|
|
NBN = (VSM, NNH)
|
|
XSC = (BFM, RRD)
|
|
VXL = (PJK, TRM)
|
|
VSM = (XMX, CFD)
|
|
NQM = (GPL, XCV)
|
|
HLN = (CNV, NRQ)
|
|
GCJ = (QCJ, MDG)
|
|
FDF = (HHT, HHT)
|
|
PQQ = (SKH, SLF)
|
|
KVD = (MSF, HVT)
|
|
QSG = (NVD, RBN)
|
|
RGK = (HXV, JPQ)
|
|
NXR = (GCG, QFR)
|
|
QDR = (BSP, NHC)
|
|
TDM = (HPN, JCS)
|
|
MQX = (NDS, DRL)
|
|
JRK = (GGQ, SNK)
|
|
VMH = (VGR, KHV)
|
|
RPR = (NTV, CGR)
|
|
CFP = (LJX, QCR)
|
|
CLL = (JQD, QBB)
|
|
LLX = (CTP, TMM)
|
|
PRB = (DGG, MMF)
|
|
FVH = (XPX, DQV)
|
|
JKK = (JNV, JXM)
|
|
KLM = (VBS, HCN)
|
|
NHQ = (CJK, PQD)
|
|
BJB = (BKR, SHD)
|
|
CQX = (NXM, QSG)
|
|
KHV = (DVR, KMX)
|
|
SRH = (CBC, RBT)
|
|
DQV = (TPK, HQN)
|
|
NQD = (GMS, FLV)
|
|
PHS = (GLN, SQH)
|
|
GPL = (JNN, BNM)
|
|
JSS = (SJP, NBN)
|
|
CGR = (MRQ, NHQ)
|
|
PGC = (SQQ, XHV)
|
|
GPQ = (LRR, TLL)
|
|
HXV = (TCM, KLM)
|
|
BFL = (KJK, NMR)
|
|
PPX = (FXB, QVX)
|
|
AAA = (HLR, RKL)
|
|
DSS = (BBH, BBH)
|
|
VDD = (PKH, XGH)
|
|
NCB = (PFD, HSP)
|
|
SSQ = (PPX, HJZ)
|
|
DNG = (MLM, BGV)
|
|
CDJ = (XHL, SRS)
|
|
TNC = (NHB, BBJ)
|
|
QDF = (VHL, JSK)
|
|
GTG = (MPH, RTN)
|
|
FRX = (SQX, VVL)
|
|
MVV = (FNF, PMM)
|
|
QFS = (HLQ, MDD)
|
|
MNP = (PDR, TSM)
|
|
LDJ = (BMF, JVJ)
|
|
NSX = (FVD, LXB)
|
|
RNT = (PFS, QFB)
|
|
TJS = (SHD, BKR)
|
|
HNQ = (VDH, FQP)
|
|
BLT = (BCB, RGG)
|
|
KQV = (HGQ, MJT)
|
|
PTN = (NXT, RKN)
|
|
VDR = (BBS, PCT)
|
|
RCS = (MPJ, MGV)
|
|
GRX = (BNK, QKR)
|
|
JFF = (XHQ, KBJ)
|
|
RTG = (NRB, HJG)
|
|
CND = (DCF, NRP)
|
|
DCM = (JMK, DLP)
|
|
XPQ = (XCG, DJH)
|
|
RTX = (TGM, VXS)
|
|
DPF = (BFJ, JKF)
|
|
LNC = (PXC, TGH)
|
|
PCX = (SLL, KSX)
|
|
BSP = (HPX, LGG)
|
|
VHG = (LCH, NHP)
|
|
GRV = (KQX, GBH)
|
|
NGG = (DGM, XSM)
|
|
XSH = (TTQ, KHR)
|
|
MRH = (KVJ, LCB)
|
|
TXR = (NCX, PVK)
|
|
NVD = (VJB, DRF)
|
|
TTQ = (FPQ, QPK)
|
|
CKR = (PXC, PXC)
|
|
BVC = (DLF, QLH)
|
|
VDH = (SRH, HMS)
|
|
JQF = (SKC, MRH)
|
|
CBB = (BRN, KQB)
|
|
FMN = (RGR, QDF)
|
|
SHT = (FQG, PHL)
|
|
NLT = (BXJ, DHZ)
|
|
MPH = (KRS, XNV)
|
|
BXJ = (MVV, LQJ)
|
|
CHL = (JDP, GNC)
|
|
TSM = (XBN, GHX)
|
|
DLF = (KRM, KVD)
|
|
BCV = (RGT, VDD)
|
|
HNX = (FNK, LSF)
|
|
LJS = (SFX, KGN)
|
|
STS = (QBV, QVV)
|
|
SKC = (KVJ, LCB)
|
|
BNK = (SJD, PLH)
|
|
RTN = (KRS, XNV)
|
|
JTP = (QKK, HQL)
|
|
LCH = (VGP, JMG)
|
|
CBR = (BBS, BBS)
|
|
VNS = (VMS, PGF)
|
|
CQG = (CLX, QXG)
|
|
HLQ = (MQX, FQT)
|
|
TMM = (CRQ, DPL)
|
|
BDL = (NHP, LCH)
|
|
TRP = (VRX, PSR)
|
|
MGV = (VBH, QBL)
|
|
GNH = (BFM, RRD)
|
|
NXT = (NSB, PCX)
|
|
SNB = (SKC, MRH)
|
|
LPH = (XSM, DGM)
|
|
GGB = (GBG, JQQ)
|
|
CJK = (PTN, TPH)
|
|
QVF = (PFK, XCB)")
|
|
;; day8-input-scm ends here
|
|
|
|
;; Data Definition and Extraction
|
|
|
|
;; #+NAME: day8-part1-records
|
|
|
|
;; [[file:chicken-src.org::day8-part1-records][day8-part1-records]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define-record node name left right)
|
|
(define-record direction side)
|
|
(define-record directions-ring entries entry length index)
|
|
;; day8-part1-records ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part1-irregex
|
|
|
|
;; [[file:chicken-src.org::day8-part1-irregex][day8-part1-irregex]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define alnum '(+ (or (/ #\A #\Z)
|
|
(/ #\0 #\9))))
|
|
|
|
(define node-irregex
|
|
`(: bol
|
|
(* whitespace)
|
|
(submatch-named node-name ,alnum)
|
|
" = ("
|
|
(submatch-named left ,alnum)
|
|
", "
|
|
(submatch-named right ,alnum)
|
|
")"
|
|
(* whitespace)
|
|
eol))
|
|
|
|
(define directions-irregex
|
|
'(+ (or #\L #\R)))
|
|
;; day8-part1-irregex ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part1-input--directions
|
|
|
|
;; [[file:chicken-src.org::day8-part1-input--directions][day8-part1-input--directions]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (input->directions input)
|
|
(let* ((directions-str (car (irregex-extract directions-irregex input)))
|
|
(directions (map (compose make-direction string->symbol string) (string->list directions-str))))
|
|
(make-directions-ring directions
|
|
(car directions)
|
|
(length directions)
|
|
0)))
|
|
;; day8-part1-input--directions ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part1-input--nodes-alist
|
|
|
|
;; [[file:chicken-src.org::day8-part1-input--nodes-alist][day8-part1-input--nodes-alist]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (input->nodes-alist input)
|
|
(irregex-fold node-irregex
|
|
(lambda (from-index match seed)
|
|
(alist-update
|
|
(string->symbol (irregex-match-substring match 'node-name))
|
|
(make-node (string->symbol (irregex-match-substring match 'node-name))
|
|
(string->symbol (irregex-match-substring match 'left))
|
|
(string->symbol (irregex-match-substring match 'right)))
|
|
seed))
|
|
'() input))
|
|
;; day8-part1-input--nodes-alist ends here
|
|
|
|
;; Navigation
|
|
|
|
;; #+NAME: day8-part1-move-forward
|
|
|
|
;; [[file:chicken-src.org::day8-part1-move-forward][day8-part1-move-forward]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (move-forward directions-ring)
|
|
(let ((entries (directions-ring-entries directions-ring))
|
|
(len (directions-ring-length directions-ring))
|
|
(index (directions-ring-index directions-ring)))
|
|
(directions-ring-index-set! directions-ring
|
|
(or (and (< index (- len 1))
|
|
(+ index 1))
|
|
0))
|
|
(directions-ring-entry-set! directions-ring
|
|
(list-ref entries (directions-ring-index directions-ring)))
|
|
directions-ring))
|
|
;; day8-part1-move-forward ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part1-move
|
|
|
|
;; [[file:chicken-src.org::day8-part1-move][day8-part1-move]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (move node direction nodes-alist)
|
|
(let* ((side (direction-side direction))
|
|
(next-sym (if (eqv? 'L side)
|
|
(node-left node)
|
|
(node-right node))))
|
|
(alist-ref next-sym nodes-alist)))
|
|
;; day8-part1-move ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part1-navigate
|
|
|
|
;; [[file:chicken-src.org::day8-part1-navigate][day8-part1-navigate]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (navigate nodes-alist directions start-sym target-sym
|
|
#!optional (current-sym start-sym) (counter 0))
|
|
(if (eqv? current-sym target-sym)
|
|
counter
|
|
(let ((next-sym (node-name
|
|
(move (alist-ref current-sym nodes-alist)
|
|
(directions-ring-entry directions)
|
|
nodes-alist))))
|
|
(navigate nodes-alist
|
|
(move-forward directions)
|
|
start-sym target-sym
|
|
next-sym
|
|
(+ counter 1)))))
|
|
;; day8-part1-navigate ends here
|
|
|
|
;; Calculate The Route
|
|
|
|
;; #+NAME: day8-part1-calc-fn
|
|
|
|
;; [[file:chicken-src.org::day8-part1-calc-fn][day8-part1-calc-fn]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
(define (calc-part-1)
|
|
(let ((directions (input->directions input))
|
|
(nodes-alist (input->nodes-alist input)))
|
|
(navigate nodes-alist directions 'AAA 'ZZZ)))
|
|
;; day8-part1-calc-fn ends here
|
|
|
|
;; Puzzle Solution
|
|
|
|
;; #+NAME: day8-part2-calc-next-sym
|
|
|
|
;; [[file:chicken-src.org::day8-part2-calc-next-sym][day8-part2-calc-next-sym]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (calc-next-sym sym direction nodes-alist)
|
|
(let ((side (direction-side direction))
|
|
(node (alist-ref sym nodes-alist)))
|
|
(if (eqv? 'L side)
|
|
(node-left node) (node-right node))))
|
|
;; day8-part2-calc-next-sym ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part2-navigate
|
|
|
|
;; [[file:chicken-src.org::day8-part2-navigate][day8-part2-navigate]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (p2-navigate nodes-alist directions start-sym
|
|
#!optional (current-sym start-sym) (counter 0))
|
|
(if (eqv? #\Z
|
|
((compose car reverse string->list symbol->string) current-sym))
|
|
(begin
|
|
(print "Found end point of " start-sym ": " current-sym ", steps: " counter)
|
|
counter)
|
|
(let ((next-sym (calc-next-sym current-sym (directions-ring-entry directions) nodes-alist)))
|
|
(p2-navigate nodes-alist
|
|
(move-forward directions)
|
|
start-sym next-sym
|
|
(+ counter 1)))))
|
|
;; day8-part2-navigate ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part2-find-start-points
|
|
|
|
;; [[file:chicken-src.org::day8-part2-find-start-points][day8-part2-find-start-points]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(define (find-start-points sym-list)
|
|
(foldl (lambda (start-points sym)
|
|
(if (eqv? #\A ((compose car reverse string->list symbol->string) sym))
|
|
(cons sym start-points) start-points))
|
|
'() sym-list))
|
|
;; day8-part2-find-start-points ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part2-lcm
|
|
|
|
;; [[file:chicken-src.org::day8-part2-lcm][day8-part2-lcm]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
(: p2-lcm ((list-of integer) integer -> integer))
|
|
(define (p2-lcm numbers #!optional (factor 2))
|
|
(let ((multiple (* (car numbers) factor)))
|
|
(if (= 0 (foldl (lambda (x n) (+ x (modulo multiple n))) 0 numbers))
|
|
multiple
|
|
(p2-lcm numbers (+ factor 1)))))
|
|
;; day8-part2-lcm ends here
|
|
|
|
|
|
|
|
;; #+NAME: day8-part2-calc-fn
|
|
|
|
;; [[file:chicken-src.org::day8-part2-calc-fn][day8-part2-calc-fn]]
|
|
;; -*- geiser-scheme-implementation: chicken -*-
|
|
|
|
(define (calc-part-2)
|
|
(let* ((directions (input->directions input))
|
|
(nodes-alist (input->nodes-alist input))
|
|
(start-points (find-start-points (map car nodes-alist))))
|
|
(apply lcm
|
|
(sort (map (cut p2-navigate nodes-alist directions <>) start-points) >))))
|
|
;; day8-part2-calc-fn ends here
|