From 55ae7103b8066c64d503da862704e20451c46453 Mon Sep 17 00:00:00 2001 From: dobiadi Date: Sat, 9 Dec 2023 18:29:01 +0100 Subject: [PATCH] Day8 C --- day8/c/day8 | Bin 0 -> 15816 bytes day8/c/day8.c | 228 +++++++++++++++ day8/input.txt | 704 +++++++++++++++++++++++++++++++++++++++++++++++ day8/sample.txt | 9 + day8/sample2.txt | 5 + day8/sample3.txt | 10 + 6 files changed, 956 insertions(+) create mode 100755 day8/c/day8 create mode 100644 day8/c/day8.c create mode 100644 day8/input.txt create mode 100644 day8/sample.txt create mode 100644 day8/sample2.txt create mode 100644 day8/sample3.txt diff --git a/day8/c/day8 b/day8/c/day8 new file mode 100755 index 0000000000000000000000000000000000000000..671a2095980b7ac49e014af0c54b4911e0b8a12f GIT binary patch literal 15816 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 F{|4r<1JeKi literal 0 HcmV?d00001 diff --git a/day8/c/day8.c b/day8/c/day8.c new file mode 100644 index 0000000..28feaab --- /dev/null +++ b/day8/c/day8.c @@ -0,0 +1,228 @@ +#include +#include +#include +#include + +#define LINE_MAX_LENGTH 512 +#define MAX_INSTRUCTIONS 512 +#define MAX_NODES 2048 +#define MAX_HISTORY 32*1024 + +enum direction { + LEFT, + RIGHT +}; + +typedef struct node { + char name[3]; + char left_name[3]; + char right_name[3]; + struct node *left; + struct node *right; +} node_t; + +typedef struct h { + node_t *node; + unsigned long idx; +} history_t; + +typedef struct period { + unsigned long offset; + unsigned long period; + unsigned long z[10]; + int z_num; +} period_t; + +void connect_nodes(node_t nodes[], int nodes_num); +int all_ending_with(char endchar, node_t *nodes[], int nodes_num); + +int main() { + char *p, *buf, c; + + int first = 1, instructions_num = 0; + enum direction instructions[MAX_INSTRUCTIONS]; + + int nodes_num = 0; + node_t nodes[MAX_NODES]; + + buf = (char *)malloc(LINE_MAX_LENGTH); + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + + while ((c = getchar()) != EOF) { + *p++ = c; + if (c == '\n') { + if (first && buf[0] == '\n') { + first = 0; + } else if (first) { + p = buf; + while (*p != '\n') { + instructions[instructions_num] = *p == 'L' ? LEFT : RIGHT; + instructions_num++; + p++; + } + } else { + sscanf(buf, "%c%c%c = (%c%c%c, %c%c%c)", &nodes[nodes_num].name[0], &nodes[nodes_num].name[1], &nodes[nodes_num].name[2], &nodes[nodes_num].left_name[0], &nodes[nodes_num].left_name[1], &nodes[nodes_num].left_name[2], &nodes[nodes_num].right_name[0], &nodes[nodes_num].right_name[1], &nodes[nodes_num].right_name[2]); + nodes_num++; + } + + memset(buf, 0, LINE_MAX_LENGTH); + p = buf; + } + } + + connect_nodes(nodes, nodes_num); + + unsigned long step_counter = 0; + node_t *curr; +#ifndef ONLY_PART2 + // Find start node + for (int i = 0; i < nodes_num; i++) { + if (nodes[i].name[0] == 'A' && nodes[i].name[1] == 'A' && nodes[i].name[2] == 'A') { + curr = &nodes[i]; + break; + } + } + + while (curr->name[0] != 'Z' || curr->name[1] != 'Z' || curr->name[2] != 'Z') { + switch (instructions[step_counter % instructions_num]) { + case LEFT: + curr = curr->left; + break; + case RIGHT: + curr = curr->right; + break; + } + + step_counter++; + } + + printf("%lu\n", step_counter); +#endif + + // Part2 + node_t *current_nodes[MAX_NODES]; + int current_nodes_num = 0; + + // Search all nodes ending with 'A' + for (int i = 0; i < nodes_num; i++) { + if (nodes[i].name[2] == 'A') { + current_nodes[current_nodes_num] = &nodes[i]; + current_nodes_num++; + } + } + + period_t periods[MAX_NODES]; + + for (int i = 0; i < current_nodes_num; i++) { + history_t history[MAX_HISTORY]; + int history_num = 0; + + step_counter = 0; + int found = 0; + curr = current_nodes[i]; + + while (!found) { + history[history_num].node = curr; + history[history_num].idx = step_counter % instructions_num; + history_num++; + + switch (instructions[step_counter % instructions_num]) { + case LEFT: + curr = curr->left; + break; + case RIGHT: + curr = curr->right; + break; + } + + step_counter++; + for (int j = 0; j < history_num; j++) { + if (history[j].node == curr && step_counter % instructions_num == history[j].idx) { + found = 1; + periods[i].offset = j; + periods[i].period = history_num - j; + + periods[i].z_num = 0; + for (int k = periods[i].offset; k < history_num; k++) { + if (history[k].node->name[2] == 'Z') { + periods[i].z[periods[i].z_num] = k - periods[i].offset; + periods[i].z_num++; + } + } + break; + } + } + } + } + + unsigned long ref; + int found = 0; + step_counter = periods[0].offset; + while (!found) { + for (int i = 0; i < periods[0].z_num; i++) { + found = 1; + ref = step_counter + periods[0].z[i]; + for (int j = 0; j < current_nodes_num; j++) { + int found2 = 0; + for (int k = 0; k < periods[j].z_num; k++) { + if ((ref - periods[j].offset) % periods[j].period == periods[j].z[k]) { + found2 = 1; + } + } + if (!found2) { + found = 0; + break; + } + } + } + + step_counter += periods[0].period; + } + + printf("%lu\n", ref); + free(buf); +} + +void connect_nodes(node_t nodes[], int nodes_num) { + for (int i = 0; i < nodes_num; i++) { + // Left + for (int j = 0; j < nodes_num; j++) { + int found = 1; + for (int k = 0; k < 3; k++) { + if (nodes[i].left_name[k] != nodes[j].name[k]) { + found = 0; + break; + } + } + if (found) { + nodes[i].left = &nodes[j]; + break; + } + } + // Right + for (int j = 0; j < nodes_num; j++) { + int found = 1; + for (int k = 0; k < 3; k++) { + if (nodes[i].right_name[k] != nodes[j].name[k]) { + found = 0; + break; + } + } + if (found) { + nodes[i].right = &nodes[j]; + break; + } + } + } +} + +int all_ending_with(char endchar, node_t *nodes[], int nodes_num) { + for (int i = 0; i < nodes_num; i++) { + if (nodes[i]->name[2] != endchar) { + return 0; + } + } + + return 1; +} diff --git a/day8/input.txt b/day8/input.txt new file mode 100644 index 0000000..050a8f4 --- /dev/null +++ b/day8/input.txt @@ -0,0 +1,704 @@ +LRRRLRRRLRRLRLRRLRLRRLRRLRLLRRRLRLRLRRRLRRRLRLRLRLLRRLLRRLRRRLLRLRRRLRLRLRRRLLRLRRLRRRLRLRRRLLRLRRLRRRLRRLRRLRLRRLRRRLRLRRRLRRLLRRLRRLRLRRRLRRLRRRLRRRLRLRRLRLRRRLRLRRLRRLRRRLRRRLRRRLLRRLRRRLRLRLRLRRRLRLRLRRLRRRLRRRLRRLRRLLRLRRLLRLRRLRRLLRLLRRRLLRRLLRRLRRLRLRLRRRLLRRLRRRR + +DBQ = (RTP, NBX) +NFX = (PXX, PLG) +VBK = (BRV, DKG) +BRS = (HLR, VBX) +DDK = (SPR, TCR) +FTS = (LJB, MDJ) +BLH = (DFM, GGG) +PCC = (GQR, RHD) +QKN = (VVR, GBL) +KHN = (FNB, LLT) +HTD = (NPJ, BTL) +FPL = (BRX, XQD) +RCJ = (QKN, XPD) +XRN = (RMQ, LQB) +HGM = (VPV, SVR) +RFG = (TLM, KPH) +SSG = (QGC, KJV) +LPA = (QQN, GNF) +SVN = (VLM, BDX) +VPF = (TTR, RNQ) +VNK = (DSX, MCZ) +KMS = (XNN, MTB) +RLS = (NHX, CRT) +VRS = (VBX, HLR) +TVK = (MKG, NKB) +CKH = (DFF, XPV) +KBS = (LJC, PRS) +JMT = (FPT, DLX) +LRV = (QCD, RLF) +TMM = (VPF, GKD) +HKH = (PRS, LJC) +GSM = (SVH, KRP) +SLG = (PTL, SNJ) +GVS = (DSN, CKH) +QGC = (HKS, DFP) +RFT = (VVQ, GMF) +FDF = (JKV, JKV) +MRL = (PKS, TKS) +HBN = (BDX, VLM) +CFB = (PPV, QVS) +TFJ = (KGN, JND) +HLB = (PFV, JXR) +RFJ = (SKL, QCN) +PQH = (KGN, JND) +HGR = (FKL, XHR) +CTB = (HNQ, HNQ) +XMN = (CJV, LKQ) +JVX = (FSS, CRC) +SFH = (MXD, RHN) +BRK = (QPL, DJB) +HBX = (DSN, CKH) +RFL = (VXB, FNF) +GXP = (LHR, SMV) +CHK = (NLQ, VCR) +QPG = (HHL, KHB) +VBC = (NFV, FST) +QJF = (JXL, JJC) +XKQ = (PCS, BSH) +SKS = (SNN, QSN) +GJJ = (VVG, XPR) +DJP = (SJM, DNR) +DQF = (MHG, BKZ) +MSB = (BRX, XQD) +PQR = (TLL, RVS) +XGB = (RMT, HGF) +HBD = (PFD, FDN) +NSN = (RFJ, NJT) +SNJ = (MVG, DBQ) +NMV = (SKG, TDJ) +PTN = (TNR, SSG) +SBG = (CVH, LMJ) +RDT = (SVQ, JTT) +MRC = (BKF, QMJ) +JKV = (CTB, CTB) +CTX = (QHL, BDV) +SQM = (DNR, SJM) +MVG = (RTP, NBX) +KKJ = (TQP, PST) +QKX = (BRD, SFT) +VFV = (NTL, VMQ) +LXK = (SSL, MFR) +HDH = (VPS, MJH) +RTP = (CGJ, XJC) +BXQ = (FLN, FLN) +GKD = (TTR, RNQ) +GPP = (SNN, QSN) +GDQ = (JLS, TND) +LTF = (GXP, TVB) +GVB = (LSV, FRL) +JCF = (HGR, GMX) +VCR = (JTR, MCM) +XJC = (DGP, XML) +XKA = (SFC, CHQ) +LJL = (VPX, PMS) +CPH = (PCQ, QKX) +VPV = (TFP, NJN) +TDJ = (PRV, DBK) +JGQ = (TPX, NMV) +LJS = (GDQ, QPV) +VHN = (CBJ, PFQ) +JHT = (XHM, NRK) +ZZZ = (HJS, LRV) +KJV = (HKS, DFP) +HNT = (XXT, KJT) +RHD = (KQH, TMD) +JKG = (HXJ, MGF) +SPL = (TTB, STB) +MBD = (CQK, NHH) +TPX = (TDJ, SKG) +HRC = (LBB, JLR) +QHN = (JHT, THC) +SPM = (DDG, MBK) +MFG = (JBD, GSM) +MHR = (PTN, HVB) +RLF = (GMG, TDQ) +XBQ = (KKN, QTN) +GLB = (DHS, SXC) +PRV = (PGC, NSK) +SJD = (BXQ, GHF) +THC = (XHM, NRK) +GBL = (GGR, HTK) +MDK = (JXX, DBD) +NJT = (QCN, SKL) +LLG = (KBL, LXK) +RVS = (DDB, QRV) +LHR = (LPL, TGJ) +TBD = (NNB, CQH) +DSN = (DFF, XPV) +QQN = (HRV, PTT) +XPP = (GSJ, RDT) +CBJ = (JQL, RBX) +RBX = (CNV, NKQ) +DDG = (NBS, KTV) +XNN = (TMC, GCG) +DSX = (CGR, SGM) +DFB = (RCJ, KJK) +XTG = (RFG, XSD) +PKQ = (DBD, JXX) +XPD = (GBL, VVR) +FFC = (JLR, LBB) +GMG = (KFH, PTP) +QHJ = (SHM, FKM) +MXD = (XGB, LTX) +SGM = (FTS, GXX) +LTX = (RMT, HGF) +RNQ = (SPL, DKH) +NHF = (VXC, HRS) +KFR = (JXR, PFV) +NRP = (XNN, MTB) +VDR = (LDL, JCP) +FSS = (KXJ, GKL) +QVS = (MKN, BLH) +SNN = (SBM, PNH) +VXB = (LLG, BHP) +BPK = (QVS, PPV) +SMV = (TGJ, LPL) +CXF = (XKV, PVR) +PGC = (NBJ, KCK) +VLG = (DDG, MBK) +FKL = (HFC, XPP) +KFC = (XNM, CNR) +FCC = (BRK, GLT) +HQC = (JKV, JHQ) +QQV = (CPG, HQD) +VVG = (XGJ, XGJ) +SVK = (HVH, HNJ) +XQT = (LQX, HNT) +JDB = (PXM, THR) +JHR = (XRF, DHN) +HRS = (TFJ, PQH) +SVQ = (XHX, QNG) +KGN = (FCV, SBH) +GJX = (MFG, LMS) +NBJ = (GVB, RMS) +VQJ = (JPB, PDF) +TKX = (JMT, LGM) +FLL = (GTX, HKP) +MFT = (FKM, SHM) +JCP = (SSP, VMD) +LPC = (KCD, JDB) +XHR = (XPP, HFC) +FKM = (DLL, XBQ) +MGF = (NFX, MQS) +JXJ = (MMP, CBT) +DFP = (TGM, RHV) +SSM = (NTC, TMT) +DLX = (PXF, SBG) +NNB = (TNT, MMF) +QNG = (RHP, QBT) +FLR = (CJK, QRL) +RCP = (KKG, NTD) +GJV = (SLG, DGN) +FDN = (TBR, QDT) +JTG = (RFT, PRC) +LGM = (DLX, FPT) +QDT = (CXV, SGD) +HKP = (BLB, PCL) +GXB = (MNH, GXT) +QDS = (LTF, FDX) +LMJ = (GJV, HVV) +TDQ = (PTP, KFH) +SGD = (HTT, PNR) +XPV = (BPM, CPH) +PTP = (MKL, KSP) +DKG = (DKK, KNQ) +QCN = (XTD, GQM) +LSV = (GDK, VVD) +MLG = (RLS, RKG) +GMX = (FKL, XHR) +QSN = (PNH, SBM) +CHQ = (KSB, CXF) +RHN = (LTX, XGB) +LVX = (JSF, MLT) +XHM = (FLR, QVK) +NCJ = (CPG, HQD) +MQV = (HBD, LDK) +VVD = (QBV, FKF) +QCD = (GMG, TDQ) +GTH = (DLJ, DQF) +KFH = (KSP, MKL) +NFC = (PKQ, MDK) +NCD = (FNB, LLT) +MKG = (HNS, DDK) +BTV = (KBS, HKH) +QGL = (QTF, CVS) +DDB = (DVF, HXV) +PXF = (CVH, LMJ) +NFV = (XMN, BQR) +DGN = (SNJ, PTL) +HHL = (PHC, QQJ) +XPR = (XGJ, LVQ) +PCQ = (BRD, SFT) +MMT = (RDS, SRS) +DMR = (GJM, BQS) +QPL = (XNQ, CMN) +PDF = (JBH, CTX) +CVR = (STX, MBQ) +LPL = (SFL, PHQ) +FXX = (PNX, PQL) +KLS = (NHG, CHF) +NHX = (TMN, JLJ) +NND = (QHN, XBR) +JTT = (QNG, XHX) +LML = (FDX, LTF) +PCS = (LKV, LXX) +SRV = (KCD, JDB) +NSK = (NBJ, KCK) +MRF = (NKP, JKG) +VPX = (NSN, SMB) +GFT = (FPL, MSB) +DFM = (XKQ, PPQ) +PPQ = (PCS, BSH) +JJC = (JHR, RQG) +JBH = (BDV, QHL) +KNQ = (KNP, MRL) +TBS = (NTD, KKG) +JXL = (RQG, JHR) +GKL = (MJC, QBM) +BQR = (LKQ, CJV) +DGP = (VNT, JRB) +DKR = (VBJ, GVF) +JXN = (BXD, XLT) +TVG = (HGR, GMX) +XSD = (TLM, KPH) +RMT = (GXB, DPT) +FRL = (VVD, GDK) +PNX = (NCD, KHN) +VGK = (CNR, XNM) +MQB = (KSF, LJS) +KDC = (MSB, FPL) +GCD = (CXS, PCC) +XML = (VNT, JRB) +TBL = (GCV, HDH) +BRV = (DKK, KNQ) +JKS = (XXB, ZZZ) +TMC = (MDQ, QJF) +TNT = (NQJ, SSM) +FLF = (XSD, RFG) +JRB = (FDF, HQC) +PTL = (DBQ, MVG) +BGQ = (KFR, HLB) +XTD = (VRS, BRS) +QXX = (SJD, CSH) +FRX = (BQS, GJM) +PQL = (NCD, KHN) +LKV = (PNK, DKR) +HQS = (VVG, XPR) +VPQ = (NTL, VMQ) +THR = (CBV, CVR) +FST = (BQR, XMN) +DMD = (CVS, QTF) +HXV = (RCP, TBS) +STM = (RFX, BFR) +JTR = (JTL, JXN) +FLG = (PFQ, CBJ) +CKM = (KFB, HTP) +NCT = (KJK, RCJ) +DKH = (STB, TTB) +QGA = (CGR, SGM) +XNQ = (HJM, MLG) +RGF = (LFN, FGC) +QBV = (VPJ, RMN) +QKJ = (KFC, VGK) +CSB = (FDL, FDL) +HFK = (DHS, SXC) +SVP = (NPJ, BTL) +GGR = (XTG, FLF) +XKV = (NDH, JXJ) +BMR = (FRX, DMR) +VVQ = (BFN, TVK) +HJM = (RKG, RLS) +RLK = (PDF, JPB) +DCX = (HNQ, BRZ) +TBG = (RTL, SML) +RMS = (FRL, LSV) +FCV = (STM, HTC) +SPR = (TBL, JGG) +BHP = (LXK, KBL) +NPJ = (XLV, PQR) +NKF = (TBD, DKP) +PDK = (JTK, JTK) +PFQ = (RBX, JQL) +LBB = (SVP, HTD) +GTX = (BLB, PCL) +SBH = (HTC, STM) +BFR = (RJN, BTN) +TCR = (TBL, JGG) +MQS = (PXX, PLG) +FRG = (XXB, XXB) +STX = (XQL, HGM) +HNJ = (HBN, SVN) +SSL = (RDL, NST) +HJS = (QCD, RLF) +KBL = (SSL, MFR) +CXS = (RHD, GQR) +DFD = (NFP, FCC) +VBJ = (HFK, GLB) +DKP = (NNB, CQH) +QSK = (TKX, CQT) +BNV = (JTK, GTH) +NBH = (LVX, GQB) +QBM = (VNC, VPK) +DBD = (HHR, RVQ) +DFF = (BPM, CPH) +LQX = (KJT, XXT) +FGC = (QKQ, QSK) +PXM = (CBV, CVR) +JHQ = (CTB, DCX) +NJN = (BGQ, FBP) +TLL = (DDB, QRV) +XSN = (THS, KJQ) +KXJ = (QBM, MJC) +GSC = (TQG, QXX) +QJP = (PQL, PNX) +PHH = (MXD, RHN) +SSC = (NQX, FCH) +XDF = (NLQ, VCR) +BRD = (MQV, FRQ) +AAA = (LRV, HJS) +PTT = (FFC, HRC) +VKF = (BFG, TGQ) +HHA = (FLG, VHN) +CNR = (TQX, VDV) +TGM = (FLL, TNV) +GLT = (DJB, QPL) +MBK = (NBS, KTV) +JPB = (JBH, CTX) +RHP = (SQM, DJP) +CHF = (CLQ, JGQ) +FTL = (PRC, RFT) +SKL = (XTD, GQM) +RBN = (SPM, VLG) +HGF = (GXB, DPT) +BQS = (NSP, BTV) +XHX = (RHP, QBT) +CGR = (GXX, FTS) +BLB = (QJP, FXX) +CRT = (JLJ, TMN) +PLG = (SLC, PDD) +HRV = (FFC, HRC) +MCM = (JXN, JTL) +JGH = (MFG, LMS) +NSP = (KBS, HKH) +MFR = (NST, RDL) +GMF = (TVK, BFN) +SML = (LJL, XFP) +MPL = (RDS, SRS) +QHP = (SPM, VLG) +FCH = (GDC, XRN) +NRQ = (FTL, JTG) +HMB = (CRC, FSS) +KPH = (BNH, SLK) +SRS = (MQB, GCN) +RQM = (TGQ, BFG) +FLN = (CSB, CSB) +BSH = (LKV, LXX) +CRC = (KXJ, GKL) +CJV = (XDF, CHK) +CGJ = (DGP, XML) +SFL = (GJJ, HQS) +PMR = (VPF, GKD) +QTN = (MMT, MPL) +KJQ = (RLK, VQJ) +PBJ = (LFN, FGC) +BTL = (PQR, XLV) +SBX = (KFC, VGK) +QQJ = (PDK, BNV) +BRZ = (GNF, QQN) +JTL = (XLT, BXD) +SKG = (PRV, DBK) +RQG = (DHN, XRF) +DRC = (SFC, CHQ) +TJQ = (NQX, FCH) +PKS = (TMM, PMR) +TRP = (GVD, FBL) +LKQ = (XDF, CHK) +RTL = (XFP, LJL) +PPV = (MKN, BLH) +MTB = (GCG, TMC) +FPT = (PXF, SBG) +LDK = (FDN, PFD) +TND = (PPX, SVK) +VPK = (NHF, JDX) +HTP = (NKF, RPV) +PMS = (SMB, NSN) +GGG = (XKQ, PPQ) +DLL = (KKN, QTN) +JXX = (HHR, RVQ) +KSF = (QPV, GDQ) +XQD = (FGK, BNJ) +RJF = (CSB, KTM) +GCN = (KSF, LJS) +JKP = (LML, QDS) +XFP = (VPX, PMS) +DPT = (GXT, MNH) +DKK = (KNP, MRL) +NKB = (DDK, HNS) +CJK = (GSC, GBQ) +NLM = (LDL, JCP) +VMD = (DFD, XFM) +NBX = (XJC, CGJ) +PRS = (NLM, VDR) +RMQ = (FRG, FRG) +XNM = (TQX, VDV) +LJC = (VDR, NLM) +PHQ = (GJJ, HQS) +KXN = (KHB, HHL) +BXD = (CKM, XVL) +KFB = (NKF, RPV) +NFS = (PRL, RFL) +RJN = (SFV, RRG) +GQM = (VRS, BRS) +KQH = (VBC, BSJ) +DNR = (BMR, LJQ) +HHR = (LPC, SRV) +DLJ = (MHG, MHG) +SMB = (RFJ, NJT) +RHV = (FLL, TNV) +NTD = (HBX, GVS) +VNT = (FDF, HQC) +PRC = (GMF, VVQ) +FBP = (HLB, KFR) +KTM = (FDL, LRZ) +TQP = (QGL, DMD) +SBM = (QPG, KXN) +QVK = (CJK, QRL) +XRF = (RGF, PBJ) +NDH = (CBT, MMP) +GVL = (RTL, SML) +LRZ = (VHN, FLG) +CQH = (MMF, TNT) +SLK = (TJQ, SSC) +QBT = (SQM, DJP) +FNF = (LLG, BHP) +STB = (KMS, NRP) +HVV = (SLG, DGN) +RFX = (BTN, RJN) +MKL = (GVM, LVP) +VDV = (BPK, CFB) +CBT = (GJX, JGH) +PPX = (HVH, HNJ) +NQJ = (TMT, NTC) +MJH = (MHP, XQT) +LTA = (KLS, BFV) +CSH = (BXQ, GHF) +HTK = (XTG, FLF) +VNC = (JDX, NHF) +BFG = (MRC, NKK) +KKG = (GVS, HBX) +PNK = (GVF, VBJ) +XXB = (LRV, HJS) +DVF = (TBS, RCP) +PNR = (NCJ, QQV) +QKQ = (CQT, TKX) +TTR = (SPL, DKH) +BTN = (RRG, SFV) +VLM = (PHH, SFH) +TQG = (SJD, CSH) +MHP = (LQX, HNT) +NQX = (GDC, XRN) +TQX = (BPK, CFB) +TVB = (LHR, SMV) +MBQ = (XQL, HGM) +HXJ = (MQS, NFX) +DHN = (PBJ, RGF) +BFN = (MKG, NKB) +PVR = (JXJ, NDH) +QRL = (GBQ, GSC) +GJM = (NSP, BTV) +KQV = (NHH, CQK) +KNP = (TKS, PKS) +PDD = (FND, JKP) +GXT = (VKF, RQM) +XDC = (FTL, JTG) +MMF = (SSM, NQJ) +BFV = (CHF, NHG) +DHS = (PHX, PHX) +VXC = (PQH, TFJ) +XLV = (TLL, RVS) +PXX = (SLC, PDD) +GVD = (DRC, DRC) +THS = (VQJ, RLK) +DBK = (PGC, NSK) +KHB = (PHC, QQJ) +TKS = (PMR, TMM) +SVR = (NJN, TFP) +HNQ = (QQN, GNF) +MKN = (GGG, DFM) +KRP = (NFM, NFC) +SHM = (XBQ, DLL) +NTL = (NCT, DFB) +NRK = (QVK, FLR) +HXL = (DSX, DSX) +KSB = (XKV, PVR) +NKK = (BKF, QMJ) +MHG = (KLS, BFV) +PNP = (XBR, QHN) +CLQ = (TPX, NMV) +RSG = (XDC, NRQ) +BPM = (PCQ, QKX) +PHC = (PDK, BNV) +TNR = (KJV, QGC) +XQL = (VPV, SVR) +MHV = (QTS, RSG) +XBR = (THC, JHT) +BDX = (PHH, SFH) +TBR = (CXV, SGD) +RVQ = (SRV, LPC) +NFM = (PKQ, MDK) +FBL = (DRC, QSZ) +TLM = (BNH, SLK) +NHH = (SKS, GPP) +FKF = (RMN, VPJ) +XVL = (HTP, KFB) +NHG = (CLQ, JGQ) +FGK = (NBH, KBX) +VMQ = (DFB, NCT) +LXX = (DKR, PNK) +SMJ = (QGB, NFS) +LVP = (KDC, GFT) +QGB = (PRL, RFL) +BRX = (BNJ, FGK) +BDV = (MRF, RXX) +SJM = (BMR, LJQ) +GBQ = (TQG, QXX) +JXR = (XJT, CVX) +TMN = (XSN, PQM) +CQT = (LGM, JMT) +CPG = (QHP, RBN) +BKZ = (BFV, KLS) +VVR = (HTK, GGR) +XFM = (NFP, FCC) +CVH = (GJV, HVV) +VPS = (XQT, MHP) +MDJ = (QHJ, MFT) +SNF = (QTS, RSG) +NKQ = (HMB, JVX) +PRL = (FNF, VXB) +CMN = (MLG, HJM) +JQL = (NKQ, CNV) +QSZ = (CHQ, SFC) +HLR = (MHV, SNF) +RDL = (TBG, GVL) +GVM = (KDC, GFT) +KTV = (CKK, VBK) +SLC = (JKP, FND) +QHL = (MRF, RXX) +KKN = (MPL, MMT) +TNV = (HKP, GTX) +QMJ = (TVG, JCF) +BSJ = (NFV, FST) +BNJ = (NBH, KBX) +XXQ = (GCD, CMQ) +TGQ = (NKK, MRC) +SVH = (NFC, NFM) +LQB = (FRG, JKS) +GNF = (HRV, PTT) +PFV = (CVX, XJT) +JTK = (DLJ, DLJ) +KSP = (LVP, GVM) +PFD = (TBR, QDT) +MLT = (KSQ, KKJ) +GVF = (HFK, GLB) +JLS = (PPX, SVK) +TBK = (CMQ, GCD) +LJB = (QHJ, MFT) +KSQ = (PST, TQP) +SXC = (PHX, TRP) +TTB = (NRP, KMS) +VBX = (MHV, SNF) +CXV = (PNR, HTT) +XCT = (NFS, QGB) +JBD = (KRP, SVH) +JDX = (HRS, VXC) +BNH = (TJQ, SSC) +HQD = (RBN, QHP) +RXX = (NKP, JKG) +NTC = (NND, PNP) +QTF = (TVQ, MHR) +JND = (FCV, SBH) +RDS = (MQB, GCN) +FDL = (FLG, VHN) +TGJ = (SFL, PHQ) +KBX = (GQB, LVX) +GQR = (TMD, KQH) +LMS = (JBD, GSM) +VPJ = (SMJ, XCT) +LVQ = (HXL, VNK) +GDK = (QBV, FKF) +KCD = (PXM, THR) +JGG = (GCV, HDH) +NFP = (BRK, GLT) +SFV = (TBK, XXQ) +KJK = (QKN, XPD) +CVX = (SBX, QKJ) +GCG = (QJF, MDQ) +FNB = (VFV, VPQ) +CBV = (STX, MBQ) +PNH = (QPG, KXN) +HFC = (GSJ, RDT) +GHF = (FLN, RJF) +CKK = (BRV, DKG) +LFN = (QKQ, QSK) +MNH = (VKF, RQM) +MMP = (GJX, JGH) +HVB = (SSG, TNR) +TMD = (BSJ, VBC) +QTS = (NRQ, XDC) +TVQ = (PTN, HVB) +HTT = (QQV, NCJ) +PQM = (KJQ, THS) +XJT = (QKJ, SBX) +PST = (QGL, DMD) +XXT = (MBD, KQV) +PCL = (QJP, FXX) +MJC = (VPK, VNC) +QPV = (JLS, TND) +JLJ = (PQM, XSN) +BKF = (TVG, JCF) +SFT = (FRQ, MQV) +XGJ = (HXL, HXL) +JSF = (KKJ, KSQ) +RMN = (XCT, SMJ) +RPV = (TBD, DKP) +XLT = (CKM, XVL) +DJB = (CMN, XNQ) +KCK = (GVB, RMS) +LLT = (VFV, VPQ) +CVS = (MHR, TVQ) +NBS = (VBK, CKK) +LJQ = (DMR, FRX) +HKS = (TGM, RHV) +HTC = (BFR, RFX) +LDL = (VMD, SSP) +QRV = (HXV, DVF) +NST = (TBG, GVL) +GQB = (JSF, MLT) +KJT = (MBD, KQV) +GSJ = (SVQ, JTT) +FDX = (TVB, GXP) +SSP = (XFM, DFD) +FRQ = (LDK, HBD) +JLR = (HTD, SVP) +HNS = (SPR, TCR) +MCZ = (SGM, CGR) +GCV = (VPS, MJH) +MDQ = (JJC, JXL) +RKG = (NHX, CRT) +TMT = (NND, PNP) +SFC = (KSB, CXF) +CQK = (SKS, GPP) +FND = (LML, QDS) +HVH = (HBN, SVN) +CNV = (HMB, JVX) +CMQ = (CXS, PCC) +NLQ = (JTR, MCM) +GDC = (RMQ, RMQ) +PHX = (GVD, GVD) +NKP = (HXJ, MGF) +RRG = (XXQ, TBK) +TFP = (BGQ, FBP) +GXX = (LJB, MDJ) diff --git a/day8/sample.txt b/day8/sample.txt new file mode 100644 index 0000000..9029a1b --- /dev/null +++ b/day8/sample.txt @@ -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) diff --git a/day8/sample2.txt b/day8/sample2.txt new file mode 100644 index 0000000..7d1b58d --- /dev/null +++ b/day8/sample2.txt @@ -0,0 +1,5 @@ +LLR + +AAA = (BBB, BBB) +BBB = (AAA, ZZZ) +ZZZ = (ZZZ, ZZZ) diff --git a/day8/sample3.txt b/day8/sample3.txt new file mode 100644 index 0000000..5b3fa58 --- /dev/null +++ b/day8/sample3.txt @@ -0,0 +1,10 @@ +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)