My attempts to solve puzzles of Advent of Code
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: day 8

Signed-off-by: Kaushik Chakraborty <git@kaushikc.org>

+896 -1
+728
data/2023/day8.txt
··· 1 + LRLRLLRRLLRRLRRLRRRLLRLRLRLRLRRLRRRLRLRRLRLLRRLLRLRRLRLRRLLRRRLRLRLRRRLRLLRRRLLLLLLRRRLRRLLLRRLRLRRLRRLRLRRLRRLLRRLRRRLRRRLLRLRLLLRRLLLRRLLRRLRLLRRRLRRRLRRRLRLRRLRRLLLRRRLRRLLRRLRRRLRLRLRRLRRLRRRLRRRLRLLLLRRRLRLRRRLRRRLLRLRRLRRLLRLLLRRLRLRRLRRRLRRRLRRRLLRRRLRLLRRRLRRRLRRRLRRRLRRLRRRLLRRLLRLRLRRRLRRRLRLRRRR 2 + 3 + LFM = (PCJ, GQH) 4 + THP = (SPP, MKB) 5 + PBL = (VVX, JMM) 6 + DSR = (BST, MPD) 7 + QKF = (DSR, KGX) 8 + AAA = (SLH, CVN) 9 + DSH = (DVN, VXT) 10 + VTK = (NSF, QJM) 11 + QQR = (FNB, CBM) 12 + RQV = (XQQ, NQQ) 13 + CGV = (CCB, FTX) 14 + RXL = (HXQ, HLQ) 15 + MQP = (MSH, TJB) 16 + MPL = (JSJ, TJR) 17 + XQK = (RQT, JKB) 18 + GXT = (JFP, MTT) 19 + LHK = (BVR, MFH) 20 + BXH = (PGR, NDC) 21 + FFV = (MJC, TLD) 22 + TFM = (DKJ, RTC) 23 + MVG = (TNC, PXR) 24 + QXN = (CGV, KKM) 25 + LTN = (MQC, XGD) 26 + NLP = (SQQ, DKG) 27 + QTK = (MBH, GJX) 28 + SSR = (DHV, NHN) 29 + DGJ = (QSX, CKB) 30 + SFD = (GRS, DLD) 31 + HBT = (NVN, HJF) 32 + VKH = (CBT, CBT) 33 + VRH = (FVN, JNB) 34 + HTJ = (JNB, FVN) 35 + BDL = (SQS, QVX) 36 + MMC = (MJC, TLD) 37 + RBL = (VNF, BXD) 38 + RNM = (HJQ, PJF) 39 + CTZ = (NCP, PLT) 40 + JFK = (TPJ, JGX) 41 + HPJ = (MMC, FFV) 42 + RJC = (RBH, DFJ) 43 + DHL = (RJC, JFD) 44 + LVR = (BBB, LHK) 45 + LFD = (GCQ, SGC) 46 + BVG = (BSQ, QXH) 47 + DVN = (MTL, NDG) 48 + XGD = (TML, JQL) 49 + RQS = (VXX, BDV) 50 + CPC = (PGB, SVP) 51 + QLQ = (CLK, CBH) 52 + RXZ = (SHG, MDS) 53 + NTR = (RGP, PNX) 54 + BBB = (MFH, BVR) 55 + RGK = (FRD, FRD) 56 + JLV = (DVV, GSF) 57 + NLS = (VFF, HCX) 58 + RHC = (DKG, SQQ) 59 + NVB = (TTG, QTK) 60 + SLZ = (DJM, BVG) 61 + BFK = (SKJ, BBD) 62 + HXX = (XQK, BVT) 63 + SKS = (SLL, FQH) 64 + SGB = (RLT, RHK) 65 + NPD = (RFJ, DJN) 66 + XSJ = (TSF, MVT) 67 + LLH = (RPV, VML) 68 + NXD = (DJS, FJG) 69 + GJX = (SGS, LBJ) 70 + FBV = (CXG, DCJ) 71 + FRX = (GDV, RQB) 72 + SDC = (RGC, THM) 73 + JCT = (CSC, GNM) 74 + SPS = (MLP, TRQ) 75 + BNG = (PFC, CLX) 76 + SHH = (LPM, VRC) 77 + SGC = (FCH, JLC) 78 + FJB = (MVK, JKT) 79 + DRN = (KGL, LTN) 80 + RJB = (NTR, BDN) 81 + DMC = (JBM, KNV) 82 + HBG = (RQB, GDV) 83 + VRC = (RDD, MRD) 84 + JJP = (GQC, VMP) 85 + PLB = (VKX, BGL) 86 + DVV = (QTS, NHG) 87 + LGL = (SSX, JRQ) 88 + RGC = (DVG, RDQ) 89 + GPK = (DDL, FLG) 90 + NVN = (HPJ, SFK) 91 + DVQ = (JFJ, FRC) 92 + VDP = (PFL, GLN) 93 + CVN = (HNX, QKF) 94 + QXP = (VTG, BDC) 95 + LKT = (SBP, SBP) 96 + QSX = (FNN, FKT) 97 + CSC = (HPQ, SLS) 98 + FNN = (DCV, JKF) 99 + MTH = (NVN, HJF) 100 + TPJ = (HNM, NGV) 101 + NHN = (VCC, RXL) 102 + BHF = (JKK, LFD) 103 + HXQ = (VNH, FBV) 104 + KDR = (HDN, HJJ) 105 + SVD = (VRK, STT) 106 + FGJ = (TNM, CRD) 107 + XFF = (NPD, RXQ) 108 + TNC = (XKT, LRP) 109 + VBM = (GJM, PBK) 110 + XBV = (DGJ, QJN) 111 + GXH = (LVK, QGX) 112 + SLH = (HNX, QKF) 113 + ZZZ = (CVN, SLH) 114 + RTC = (TPH, FJT) 115 + NQP = (MJH, MSP) 116 + XSD = (STT, VRK) 117 + HJJ = (XMV, TJX) 118 + JFP = (XSV, KBQ) 119 + FTD = (NMN, PXX) 120 + NVQ = (MSP, MJH) 121 + SHC = (PTV, XDR) 122 + DCV = (TFX, TFX) 123 + BTX = (JJG, FLL) 124 + RDQ = (DCF, FRH) 125 + MTT = (KBQ, XSV) 126 + DRB = (RML, LGR) 127 + PBD = (VSX, FRS) 128 + HFS = (KBM, KSJ) 129 + SKJ = (NXN, LJM) 130 + MTS = (GJC, SQX) 131 + BRL = (TMJ, JTT) 132 + TTQ = (KFC, DPL) 133 + LQF = (DJS, FJG) 134 + TKG = (JFD, RJC) 135 + PGB = (BFJ, BQJ) 136 + BQX = (VHC, PQH) 137 + MRD = (BTB, NJK) 138 + LJF = (XQR, PMH) 139 + BCL = (VBK, JHN) 140 + BHQ = (VMB, SQF) 141 + BSR = (LPM, VRC) 142 + VNK = (GBH, LPQ) 143 + KHJ = (NJG, QQL) 144 + VMB = (BBK, VXF) 145 + QJM = (QDN, VFV) 146 + KFC = (FSM, PMF) 147 + JVN = (DMJ, SPR) 148 + MVT = (RGM, HDH) 149 + PQB = (BVP, NTH) 150 + QQF = (KJP, BDP) 151 + RGP = (JJP, MFM) 152 + DLD = (VSG, BDL) 153 + SCV = (CBT, LHV) 154 + VTD = (KLC, QVL) 155 + FCH = (GGR, TFM) 156 + GJR = (QMX, CFM) 157 + PMH = (GSG, JSF) 158 + DCJ = (CDJ, TRP) 159 + QJX = (NVQ, NQP) 160 + DJN = (JFK, HFM) 161 + DQP = (DSS, PBL) 162 + XXH = (NTX, QLG) 163 + MXK = (JTT, TMJ) 164 + FDL = (JCT, TRR) 165 + MGA = (PLT, NCP) 166 + HPS = (RFQ, VXV) 167 + SBC = (NPD, RXQ) 168 + XPD = (VHH, PDH) 169 + SRX = (SSX, JRQ) 170 + CKJ = (MQQ, QJX) 171 + FKT = (DCV, JKF) 172 + JKP = (VFF, HCX) 173 + JMN = (XSJ, CQP) 174 + GLN = (SFQ, SGB) 175 + PTV = (JNS, FXR) 176 + FXM = (NTR, BDN) 177 + DJS = (XMQ, KSN) 178 + LVC = (FRD, PNN) 179 + JPD = (PQP, XCX) 180 + GQC = (NSQ, GJD) 181 + SFK = (FFV, MMC) 182 + JBD = (TFG, MSN) 183 + BSZ = (RGR, FTD) 184 + SQX = (XRQ, PQB) 185 + PPV = (VBD, SNX) 186 + JSF = (FRT, MVG) 187 + JMT = (TJG, BNV) 188 + JMJ = (DCX, BNG) 189 + KJP = (QFH, VSP) 190 + VXV = (SHM, NMD) 191 + KLC = (XLB, MCH) 192 + JMD = (XQQ, NQQ) 193 + PJN = (FDL, BQC) 194 + PLT = (MCP, VHB) 195 + BGL = (DSC, PSN) 196 + RXH = (SLH, CVN) 197 + VSG = (QVX, SQS) 198 + BDC = (RPS, RBL) 199 + JMM = (XMJ, XDG) 200 + RHK = (QKH, BTX) 201 + RQX = (KSM, PLB) 202 + FQH = (MHT, CDG) 203 + SRM = (PLV, QGV) 204 + HNX = (DSR, KGX) 205 + JNS = (RJN, RXD) 206 + MLP = (JMN, PCR) 207 + LVK = (JHS, QMJ) 208 + PRG = (TJB, MSH) 209 + VGS = (JXR, JLP) 210 + XQQ = (KTJ, BMN) 211 + DGA = (FTD, RGR) 212 + HTX = (MTG, XBV) 213 + CCB = (TXB, VTK) 214 + RQT = (TLR, LDB) 215 + QMX = (SHQ, DPB) 216 + MDS = (KQD, DMC) 217 + JDC = (LCL, SSR) 218 + NHG = (JMD, RQV) 219 + CBM = (DBH, BHQ) 220 + RKB = (VGP, LLP) 221 + SJD = (PLB, KSM) 222 + CDG = (FBC, TJF) 223 + QGV = (TLB, QVB) 224 + BDS = (SPS, BGH) 225 + DGF = (VKH, VKH) 226 + RLV = (MKB, SPP) 227 + SHG = (KQD, DMC) 228 + KQD = (KNV, JBM) 229 + RMV = (DVV, GSF) 230 + MSH = (XXH, TVV) 231 + FJX = (BVG, DJM) 232 + KCV = (PLV, QGV) 233 + MFH = (HCQ, CNF) 234 + TLD = (MCK, KXR) 235 + SLB = (VGP, LLP) 236 + KSN = (HFF, PPV) 237 + RGV = (BDP, KJP) 238 + CNF = (NBF, PCM) 239 + TJF = (GQB, JNP) 240 + NDG = (MTS, JLF) 241 + VHH = (FXM, RJB) 242 + MPH = (CLK, CBH) 243 + RPM = (NXD, LQF) 244 + JHS = (PGH, MXS) 245 + TRJ = (PJF, HJQ) 246 + RJK = (SSR, LCL) 247 + DPB = (SLB, RKB) 248 + XXD = (FFJ, BBX) 249 + QBX = (CRF, VBM) 250 + RMX = (NGM, CPL) 251 + VXT = (MTL, NDG) 252 + KQN = (QQF, RGV) 253 + SFQ = (RLT, RHK) 254 + QGJ = (XDR, PTV) 255 + MSN = (RMV, JLV) 256 + HCQ = (PCM, NBF) 257 + GKF = (PLT, NCP) 258 + VCC = (HLQ, HXQ) 259 + MSJ = (JKP, NLS) 260 + RFF = (BXM, SPH) 261 + FBD = (DGF, VNG) 262 + GLJ = (MQF, RRT) 263 + QRN = (MTH, HBT) 264 + QGS = (TNM, CRD) 265 + XPP = (FNB, CBM) 266 + QQQ = (GHK, DVD) 267 + RBK = (PPQ, XTT) 268 + HHG = (DPL, KFC) 269 + SBP = (FTD, RGR) 270 + MJH = (MLQ, QTG) 271 + JLX = (BDS, TMM) 272 + DVG = (FRH, DCF) 273 + DFJ = (NSK, PDS) 274 + RHJ = (DKM, TDJ) 275 + FQN = (JKT, MVK) 276 + RMD = (LGR, RML) 277 + JTB = (VDP, BSL) 278 + GJM = (NLD, RHJ) 279 + LGP = (CPC, NQN) 280 + JHN = (NBQ, MSJ) 281 + SQF = (BBK, VXF) 282 + HST = (CFM, QMX) 283 + LBJ = (TBP, VNK) 284 + SNX = (PCX, RMX) 285 + PJF = (MGX, SKS) 286 + RRT = (JTB, LSC) 287 + JTT = (MLM, GLJ) 288 + DLQ = (JBQ, RND) 289 + LGR = (QRV, XXD) 290 + LPT = (BSR, SHH) 291 + HQB = (BRL, MXK) 292 + TRP = (LFM, LCT) 293 + JKT = (RNM, TRJ) 294 + MXS = (GQR, KQN) 295 + MKB = (LVQ, NNX) 296 + NDC = (RGK, LVC) 297 + LFN = (RRL, XNF) 298 + SHQ = (RKB, SLB) 299 + JGX = (NGV, HNM) 300 + RPN = (BCL, CDR) 301 + JSJ = (CRH, FHR) 302 + FRH = (THR, TSX) 303 + BNV = (RXS, LGP) 304 + FLL = (GSR, PVF) 305 + DNS = (JLP, JXR) 306 + HDN = (TJX, XMV) 307 + HJQ = (SKS, MGX) 308 + TNX = (SJD, RQX) 309 + XQD = (BFR, MDM) 310 + GNM = (HPQ, SLS) 311 + NML = (DGF, VNG) 312 + BXM = (FJB, FQN) 313 + MSP = (QTG, MLQ) 314 + PBJ = (XLJ, TKD) 315 + MNN = (DNS, VGS) 316 + RBH = (PDS, NSK) 317 + BFJ = (KNT, SDP) 318 + CRD = (PBC, BFK) 319 + TJB = (XXH, TVV) 320 + PDJ = (SRN, SRN) 321 + XJS = (HBG, FRX) 322 + BBK = (LLH, PNP) 323 + QQL = (MFR, KKZ) 324 + FVN = (LGL, SRX) 325 + LRP = (GXT, BSF) 326 + SVX = (MSN, TFG) 327 + PFC = (PCP, FGB) 328 + XMJ = (GKF, GKF) 329 + LLL = (DNS, VGS) 330 + VSX = (TKG, DHL) 331 + RND = (SBC, XFF) 332 + MLQ = (DXT, JMT) 333 + XLC = (TTG, QTK) 334 + TJG = (RXS, LGP) 335 + DPL = (PMF, FSM) 336 + PCR = (CQP, XSJ) 337 + BSQ = (XSD, SVD) 338 + DHP = (HPS, MNQ) 339 + SCB = (HXX, NQV) 340 + FFJ = (LJF, BSV) 341 + FTX = (VTK, TXB) 342 + TRQ = (PCR, JMN) 343 + GDL = (PBD, BJK) 344 + MLM = (RRT, MQF) 345 + TLA = (QXP, MKM) 346 + SMN = (LFN, FVJ) 347 + RRL = (CKJ, JNK) 348 + BDP = (VSP, QFH) 349 + CBC = (DVN, VXT) 350 + JLP = (PTL, SJK) 351 + FRS = (TKG, DHL) 352 + SQQ = (MPL, QBQ) 353 + DVD = (RLK, JPD) 354 + PQP = (LGN, SFD) 355 + FSM = (JDC, RJK) 356 + PSN = (XJS, NRN) 357 + QDN = (SHC, QGJ) 358 + RJN = (XPD, GMS) 359 + HRT = (PPQ, XTT) 360 + CBH = (SRM, KCV) 361 + FSC = (XBV, MTG) 362 + DCX = (CLX, PFC) 363 + XQR = (GSG, JSF) 364 + HBP = (XDT, KNF) 365 + BQJ = (KNT, SDP) 366 + CDJ = (LFM, LCT) 367 + JNK = (MQQ, QJX) 368 + BVP = (MTF, SDC) 369 + TLR = (RHC, NLP) 370 + SJK = (DQP, LMN) 371 + NJG = (MFR, MFR) 372 + RLK = (XCX, PQP) 373 + TPH = (BXH, GSQ) 374 + NSK = (DDS, MLV) 375 + HLQ = (FBV, VNH) 376 + JTP = (FSN, QQQ) 377 + PGH = (KQN, GQR) 378 + SRJ = (PXK, GDL) 379 + TJR = (FHR, CRH) 380 + XDT = (BKJ, PPJ) 381 + GQH = (RLV, THP) 382 + GRS = (BDL, VSG) 383 + DLJ = (CRF, VBM) 384 + VMP = (GJD, NSQ) 385 + MKM = (VTG, BDC) 386 + PVF = (VLX, LBB) 387 + GPV = (SRJ, FNQ) 388 + NTL = (FSN, QQQ) 389 + FQL = (BFR, MDM) 390 + TMJ = (MLM, GLJ) 391 + XKT = (GXT, BSF) 392 + PCX = (NGM, CPL) 393 + XMV = (HQB, JRJ) 394 + QKH = (FLL, JJG) 395 + VQP = (FLG, DDL) 396 + SLS = (CKK, HVF) 397 + THM = (RDQ, DVG) 398 + PPJ = (GCT, TNX) 399 + TMM = (BGH, SPS) 400 + GVL = (PCG, RQS) 401 + DCF = (TSX, THR) 402 + BJK = (FRS, VSX) 403 + SPP = (NNX, LVQ) 404 + QGX = (QMJ, JHS) 405 + RPV = (HGR, DHP) 406 + MTG = (DGJ, QJN) 407 + KGL = (XGD, MQC) 408 + DHD = (RND, JBQ) 409 + BXD = (KFH, HTM) 410 + KGX = (MPD, BST) 411 + QVB = (LKT, RGT) 412 + CBK = (RDG, PKT) 413 + BTB = (JMJ, CTD) 414 + FSN = (DVD, GHK) 415 + KXR = (FFT, DVQ) 416 + TML = (GPV, PVN) 417 + VXF = (PNP, LLH) 418 + DBH = (SQF, VMB) 419 + FCP = (JKK, LFD) 420 + RXQ = (DJN, RFJ) 421 + NTH = (SDC, MTF) 422 + JBM = (SVX, JBD) 423 + PNN = (FJX, SLZ) 424 + GQR = (QQF, RGV) 425 + PXR = (LRP, XKT) 426 + VRK = (RDJ, SMN) 427 + LDB = (RHC, NLP) 428 + LHV = (RXH, ZZZ) 429 + FNB = (DBH, BHQ) 430 + MFM = (VMP, GQC) 431 + PGV = (PKT, RDG) 432 + SPR = (XJP, SHD) 433 + CCR = (LQF, NXD) 434 + GJC = (XRQ, PQB) 435 + LGN = (GRS, DLD) 436 + RDG = (FBD, NML) 437 + MCP = (DLC, TGK) 438 + NMD = (XFR, GRK) 439 + MVK = (TRJ, RNM) 440 + JKF = (TFX, KHJ) 441 + XFR = (SMG, JNQ) 442 + NGM = (XPX, JLX) 443 + MFD = (GVL, MBR) 444 + RNT = (CDR, BCL) 445 + VVX = (XMJ, XMJ) 446 + GNC = (HST, GJR) 447 + CRF = (PBK, GJM) 448 + JKK = (GCQ, SGC) 449 + GBH = (QDR, RFF) 450 + FJG = (XMQ, KSN) 451 + GDV = (GQN, GXH) 452 + XLB = (FMN, JVN) 453 + KNV = (JBD, SVX) 454 + PXX = (HHG, TTQ) 455 + TDJ = (MFD, QJT) 456 + QLG = (PJN, VFS) 457 + NRN = (HBG, FRX) 458 + SHM = (GRK, XFR) 459 + FHV = (HXX, NQV) 460 + QFH = (GNC, CHX) 461 + PCM = (QLQ, MPH) 462 + VLX = (QMR, PBJ) 463 + RPP = (HRT, RBK) 464 + JXR = (SJK, PTL) 465 + LPQ = (QDR, RFF) 466 + BFR = (STC, PJT) 467 + XTT = (CBC, DSH) 468 + HVF = (VTD, KDC) 469 + JFJ = (FCP, BHF) 470 + LVQ = (PRG, MQP) 471 + JFD = (RBH, DFJ) 472 + HFM = (TPJ, JGX) 473 + BSV = (XQR, PMH) 474 + JLC = (GGR, TFM) 475 + NSQ = (FHV, SCB) 476 + NCP = (VHB, MCP) 477 + JKB = (LDB, TLR) 478 + BLX = (PDJ, GBX) 479 + SVP = (BQJ, BFJ) 480 + VSP = (CHX, GNC) 481 + SPH = (FJB, FQN) 482 + RPS = (VNF, BXD) 483 + QMR = (TKD, XLJ) 484 + QMJ = (MXS, PGH) 485 + JNB = (LGL, SRX) 486 + RGM = (JTP, NTL) 487 + GHK = (JPD, RLK) 488 + TFX = (NJG, NJG) 489 + NBQ = (JKP, NLS) 490 + NTX = (VFS, PJN) 491 + QTS = (RQV, JMD) 492 + LMN = (DSS, PBL) 493 + CLK = (SRM, KCV) 494 + MPD = (RMD, DRB) 495 + PDS = (DDS, MLV) 496 + NNX = (PRG, MQP) 497 + BST = (DRB, RMD) 498 + DSG = (SGV, DVB) 499 + KDC = (QVL, KLC) 500 + VKX = (PSN, DSC) 501 + LJM = (DBB, QXN) 502 + VFV = (SHC, QGJ) 503 + FXR = (RJN, RXD) 504 + HGR = (HPS, MNQ) 505 + BMN = (CCR, RPM) 506 + CRH = (FSC, HTX) 507 + QRV = (BBX, FFJ) 508 + CKK = (VTD, KDC) 509 + SDP = (RNT, RPN) 510 + XLJ = (JTX, QRN) 511 + BSL = (PFL, GLN) 512 + GJD = (FHV, SCB) 513 + VNH = (DCJ, CXG) 514 + BCB = (MXJ, LVR) 515 + NBF = (MPH, QLQ) 516 + MCK = (DVQ, FFT) 517 + RFJ = (HFM, JFK) 518 + BBD = (LJM, NXN) 519 + FMN = (SPR, DMJ) 520 + JXK = (GPK, VQP) 521 + SLL = (MHT, CDG) 522 + TRR = (GNM, CSC) 523 + MJC = (KXR, MCK) 524 + MHT = (FBC, TJF) 525 + TSF = (HDH, RGM) 526 + FLG = (FQL, XQD) 527 + MGX = (SLL, FQH) 528 + RGR = (NMN, PXX) 529 + RDA = (BVG, DJM) 530 + VXX = (DHD, DLQ) 531 + DXT = (BNV, TJG) 532 + LCL = (DHV, NHN) 533 + CKB = (FNN, FKT) 534 + KNH = (LVR, MXJ) 535 + GSQ = (PGR, NDC) 536 + CFM = (DPB, SHQ) 537 + HDH = (JTP, NTL) 538 + NSF = (VFV, QDN) 539 + HSF = (KSJ, KBM) 540 + GSR = (VLX, LBB) 541 + GCT = (RQX, SJD) 542 + RBN = (XDT, KNF) 543 + XNF = (JNK, CKJ) 544 + TCF = (RBK, HRT) 545 + DPA = (MDS, SHG) 546 + QTG = (JMT, DXT) 547 + RGT = (SBP, BSZ) 548 + XCX = (SFD, LGN) 549 + KSJ = (KDR, GKG) 550 + GQN = (QGX, LVK) 551 + MDM = (PJT, STC) 552 + KKZ = (MKM, QXP) 553 + MQC = (JQL, TML) 554 + VFS = (FDL, BQC) 555 + TJX = (JRJ, HQB) 556 + BSF = (MTT, JFP) 557 + VMD = (PQH, VHC) 558 + JTX = (HBT, MTH) 559 + MCH = (FMN, JVN) 560 + VBK = (MSJ, NBQ) 561 + TBP = (GBH, LPQ) 562 + TVX = (VQP, GPK) 563 + NQN = (SVP, PGB) 564 + SMG = (XLC, NVB) 565 + SHD = (BCB, KNH) 566 + JLF = (SQX, GJC) 567 + GSF = (QTS, NHG) 568 + BDN = (PNX, RGP) 569 + GRK = (SMG, JNQ) 570 + PLV = (TLB, TLB) 571 + SQS = (HTJ, VRH) 572 + PDH = (FXM, RJB) 573 + VGP = (LLL, MNN) 574 + JRQ = (TVT, BLX) 575 + CLX = (PCP, FGB) 576 + PMF = (JDC, RJK) 577 + JRJ = (BRL, MXK) 578 + XMQ = (PPV, HFF) 579 + BVT = (RQT, JKB) 580 + FJT = (BXH, GSQ) 581 + FRT = (TNC, PXR) 582 + QVL = (XLB, MCH) 583 + TNM = (BFK, PBC) 584 + XPX = (BDS, TMM) 585 + XCN = (SHH, BSR) 586 + PKT = (FBD, NML) 587 + TLB = (LKT, LKT) 588 + TFG = (RMV, JLV) 589 + SRN = (MDS, SHG) 590 + FRC = (BHF, FCP) 591 + GGR = (RTC, DKJ) 592 + KFH = (JXK, TVX) 593 + JNQ = (XLC, NVB) 594 + MTF = (RGC, THM) 595 + STT = (RDJ, SMN) 596 + CPL = (XPX, JLX) 597 + FGB = (XPP, QQR) 598 + DLC = (RPP, TCF) 599 + DJM = (QXH, BSQ) 600 + MBH = (SGS, LBJ) 601 + VBD = (RMX, PCX) 602 + CXG = (TRP, CDJ) 603 + NGV = (VMD, BQX) 604 + GQB = (DRN, NXS) 605 + FHR = (HTX, FSC) 606 + DDL = (FQL, XQD) 607 + FBC = (JNP, GQB) 608 + DKJ = (TPH, FJT) 609 + RQB = (GQN, GXH) 610 + LPM = (RDD, MRD) 611 + BKJ = (GCT, TNX) 612 + GMS = (PDH, VHH) 613 + HTM = (JXK, TVX) 614 + PPQ = (CBC, DSH) 615 + MBR = (RQS, PCG) 616 + PJT = (FGJ, QGS) 617 + PQH = (RBN, HBP) 618 + CBT = (RXH, RXH) 619 + CHX = (HST, GJR) 620 + BQC = (JCT, TRR) 621 + NJK = (JMJ, CTD) 622 + QVX = (VRH, HTJ) 623 + KKM = (FTX, CCB) 624 + NXN = (DBB, QXN) 625 + JQL = (GPV, PVN) 626 + MFR = (QXP, MKM) 627 + VML = (HGR, DHP) 628 + PCJ = (THP, RLV) 629 + XRQ = (BVP, NTH) 630 + PXK = (PBD, BJK) 631 + HCX = (HFS, HSF) 632 + QJT = (MBR, GVL) 633 + RLT = (BTX, QKH) 634 + DKG = (QBQ, MPL) 635 + CQP = (TSF, MVT) 636 + HFF = (VBD, SNX) 637 + KNF = (BKJ, PPJ) 638 + FFT = (JFJ, FRC) 639 + DDS = (PGK, DSG) 640 + PFL = (SGB, SFQ) 641 + RXS = (CPC, NQN) 642 + XSV = (XCN, LPT) 643 + MNQ = (VXV, RFQ) 644 + PVN = (SRJ, FNQ) 645 + VNF = (KFH, HTM) 646 + HPQ = (HVF, CKK) 647 + PGK = (DVB, SGV) 648 + VHC = (HBP, RBN) 649 + GBX = (SRN, RXZ) 650 + SGV = (CBK, PGV) 651 + TVV = (QLG, NTX) 652 + KNT = (RPN, RNT) 653 + TXB = (NSF, QJM) 654 + PCP = (XPP, QQR) 655 + PCG = (BDV, VXX) 656 + MQF = (LSC, JTB) 657 + QJN = (CKB, QSX) 658 + QXH = (SVD, XSD) 659 + LCT = (PCJ, GQH) 660 + GKG = (HDN, HJJ) 661 + TKD = (JTX, QRN) 662 + KBQ = (XCN, LPT) 663 + KSM = (VKX, BGL) 664 + MQQ = (NQP, NVQ) 665 + VFF = (HFS, HSF) 666 + SSX = (TVT, TVT) 667 + DSS = (VVX, VVX) 668 + QDR = (SPH, BXM) 669 + PGR = (RGK, RGK) 670 + RML = (QRV, XXD) 671 + XDR = (JNS, FXR) 672 + DVB = (PGV, CBK) 673 + TSX = (QBX, DLJ) 674 + QBQ = (TJR, JSJ) 675 + BBX = (LJF, BSV) 676 + PTL = (DQP, LMN) 677 + PBC = (BBD, SKJ) 678 + VHB = (DLC, TGK) 679 + XJP = (BCB, KNH) 680 + STC = (QGS, FGJ) 681 + FNQ = (PXK, GDL) 682 + MXJ = (LHK, BBB) 683 + JNP = (NXS, DRN) 684 + SGS = (TBP, VNK) 685 + RFQ = (SHM, NMD) 686 + MLV = (DSG, PGK) 687 + CDR = (VBK, JHN) 688 + CTD = (DCX, BNG) 689 + FRD = (FJX, FJX) 690 + GCQ = (FCH, JLC) 691 + NXS = (KGL, LTN) 692 + JBQ = (SBC, XFF) 693 + NLD = (DKM, TDJ) 694 + VTG = (RBL, RPS) 695 + JJG = (GSR, PVF) 696 + DKM = (QJT, MFD) 697 + RDJ = (LFN, FVJ) 698 + KTJ = (RPM, CCR) 699 + GSG = (FRT, MVG) 700 + MTL = (JLF, MTS) 701 + PNP = (RPV, VML) 702 + TTG = (MBH, GJX) 703 + LSC = (VDP, BSL) 704 + THR = (DLJ, QBX) 705 + NQV = (BVT, XQK) 706 + LBB = (PBJ, QMR) 707 + NQQ = (KTJ, BMN) 708 + DMJ = (XJP, SHD) 709 + DSC = (XJS, NRN) 710 + RXD = (GMS, XPD) 711 + KBM = (GKG, KDR) 712 + LLP = (LLL, MNN) 713 + HNM = (VMD, BQX) 714 + VNG = (VKH, SCV) 715 + XDG = (GKF, CTZ) 716 + PNX = (MFM, JJP) 717 + PBK = (RHJ, NLD) 718 + BVR = (CNF, HCQ) 719 + DHV = (VCC, RXL) 720 + TGK = (RPP, TCF) 721 + RDD = (NJK, BTB) 722 + NMN = (HHG, TTQ) 723 + HJF = (HPJ, SFK) 724 + BDV = (DLQ, DHD) 725 + TVT = (PDJ, PDJ) 726 + BGH = (TRQ, MLP) 727 + FVJ = (RRL, XNF) 728 + DBB = (KKM, CGV)
+1 -1
src/main.rs
··· 3 3 pub mod solutions; 4 4 5 5 fn main() { 6 - let sol = solve!(2023; 7; 2); 6 + let sol = solve!(2023; 8; 2); 7 7 println!("{:?}", sol); 8 8 }
+165
src/solutions/year_2023/day8.rs
··· 1 + use std::collections::{BTreeMap, HashSet}; 2 + 3 + use aoc_lib::{create_solution, Input, Solver}; 4 + 5 + #[derive(Debug, Clone)] 6 + enum Direction { 7 + Left, 8 + Right, 9 + } 10 + 11 + fn walk_map( 12 + hs: BTreeMap<String, (String, String)>, 13 + key: &str, 14 + dir: Direction, 15 + ) -> Option<String> { 16 + match dir { 17 + Direction::Left => hs.get(key).cloned().map(|(l, _)| l.to_string()), 18 + Direction::Right => hs.get(key).cloned().map(|(_, r)| r.to_string()), 19 + } 20 + } 21 + 22 + fn search_zzz( 23 + hs: BTreeMap<String, (String, String)>, 24 + dirs: Vec<Direction>, 25 + init: String, 26 + pred: impl Fn(&String) -> bool, 27 + ) -> usize { 28 + let ds = dirs.iter().cycle(); 29 + let mut key = init.clone(); 30 + ds.take_while(|d| { 31 + if let Some(some_key) = walk_map(hs.clone(), &key, (*d).clone()) { 32 + key = some_key.clone(); 33 + !pred(&some_key) 34 + } else { 35 + false 36 + } 37 + }) 38 + .count() 39 + + 1 40 + } 41 + 42 + fn gcd(a: usize, b: usize) -> usize { 43 + if b == 0 { 44 + a 45 + } else { 46 + gcd(b, a.rem_euclid(b)) 47 + } 48 + } 49 + 50 + fn lcm(a: usize, b: usize) -> usize { 51 + a * b / gcd(a, b) 52 + } 53 + 54 + fn search_z( 55 + hs: BTreeMap<String, (String, String)>, 56 + dirs: Vec<Direction>, 57 + ) -> usize { 58 + let keys = hs 59 + .keys() 60 + .cloned() 61 + .filter(|k| k.ends_with("A")) 62 + .collect::<HashSet<_>>(); 63 + 64 + keys 65 + .into_iter() 66 + .map(|k| search_zzz(hs.clone(), dirs.clone(), k, |k| k.ends_with("Z"))) 67 + .reduce(lcm) 68 + .unwrap_or_default() 69 + } 70 + 71 + fn load_hs(ls: Vec<String>) -> BTreeMap<String, (String, String)> { 72 + ls.into_iter().fold(BTreeMap::new(), |mut acc, l| { 73 + let mut cs = l 74 + .split("=") 75 + .take(2) 76 + .map(|x| x.trim()) 77 + .map(|x| x.to_string()); 78 + let key: Option<String> = cs.next(); 79 + let lr: Option<(String, String)> = cs.next().and_then(|c| { 80 + let mut x = c 81 + .split(",") 82 + .take(2) 83 + .map(|c| c.trim()) 84 + .map(|c| c.to_string()); 85 + let l = x.next()?.split_off(1); 86 + let y = x.next()?.split_terminator(")").collect::<Vec<_>>().join(""); 87 + Some((l, y)) 88 + }); 89 + 90 + if let (Some(key), Some((left, right))) = (key, lr) { 91 + acc.insert(key, (left, right)); 92 + } 93 + acc 94 + }) 95 + } 96 + 97 + fn load_dirs(ls: String) -> Vec<Direction> { 98 + ls.chars() 99 + .map(|c| match c { 100 + 'L' => Direction::Left, 101 + 'R' => Direction::Right, 102 + _ => panic!("Invalid direction"), 103 + }) 104 + .collect() 105 + } 106 + 107 + pub struct Day8 {} 108 + 109 + create_solution!( 110 + out_1 => usize; 111 + out_2 => usize; 112 + year => 2023; 113 + day => 8; 114 + sol_1 => |input: Input| { 115 + let dirs = load_dirs(input.lines.get(0).unwrap().clone()); 116 + let hs = load_hs(input.lines.get(2..).unwrap().to_vec()); 117 + Some(search_zzz(hs, dirs, "AAA".to_string(), |k| k == "ZZZ")) 118 + }; 119 + sol_2 => |input: Input| { 120 + let dirs = load_dirs(input.lines.get(0).unwrap().clone()); 121 + let hs = load_hs(input.lines.get(2..).unwrap().to_vec()); 122 + Some(search_z(hs, dirs)) 123 + }; 124 + ); 125 + 126 + #[cfg(test)] 127 + mod tests { 128 + use std::vec; 129 + 130 + use super::*; 131 + 132 + #[test] 133 + fn test_search_zzz() { 134 + 135 + let hs = load_hs(vec![ 136 + "AAA = (BBB, CCC)".to_string(), 137 + "BBB = (DDD, EEE)".to_string(), 138 + "CCC = (ZZZ, GGG)".to_string(), 139 + "DDD = (DDD, DDD)".to_string(), 140 + "EEE = (EEE, EEE)".to_string(), 141 + "GGG = (GGG, GGG)".to_string(), 142 + "ZZZ = (ZZZ, ZZZ)".to_string(), 143 + ]); 144 + 145 + 146 + let dirs = load_dirs("RL".to_string()); 147 + assert_eq!( 148 + search_zzz(hs.clone(), dirs.clone(), "AAA".to_string(), |k| k == "ZZZ"), 149 + 2 150 + ); 151 + 152 + let hs = load_hs(vec![ 153 + "11A = (11B, XXX)".to_string(), 154 + "11B = (XXX, 11Z)".to_string(), 155 + "11Z = (11B, XXX)".to_string(), 156 + "22A = (22B, XXX)".to_string(), 157 + "22B = (22C, 22C)".to_string(), 158 + "22C = (22Z, 22Z)".to_string(), 159 + "22Z = (22B, 22B)".to_string(), 160 + "XXX = (XXX, XXX)".to_string(), 161 + ]); 162 + let dirs = load_dirs("LR".to_string()); 163 + assert_eq!(search_z(hs, dirs), 6); 164 + } 165 + }
+2
src/solutions/year_2023/mod.rs
··· 7 7 mod day5; 8 8 mod day6; 9 9 mod day7; 10 + mod day8; 10 11 11 12 pub use day1::*; 12 13 pub use day2::*; ··· 15 16 pub use day5::*; 16 17 pub use day6::*; 17 18 pub use day7::*; 19 + pub use day8::*; 18 20 pub use day13::*;