Add part 2 for day 1 (didn't initially notice there was a part 2)

[?]
Aug 18, 2018, 8:45 AM
JBL2GF5KB55G4CMB7DS6WVXOHPFGF5PYB7RJIAAB2HSS5QJUNSIAC

Dependencies

Change contents

  • file addition: day1p2.cpp (----------)
    [2.7]
    #include <iostream>
    #include <fstream>
    struct cll {
    char c;
    cll *next;
    ~cll() {
    delete next;
    }
    };
    int cll_length(cll *node) {
    int r = 0;
    while(node) {
    r++;
    node = node->next;
    }
    return r;
    }
    cll* cll_rotate(cll *root, int dist) {
    cll *ns = root;
    for(int i = 0; i < dist; i++) {
    ns = ns->next;
    }
    cll *cs = ns;
    cll *ct = NULL;
    cll *nroot = NULL;
    while(cs) {
    cll *n = new cll();
    n->c = cs->c;
    if(ct) {
    ct->next = n;
    } else {
    nroot = n;
    }
    ct = n;
    cs = cs->next;
    }
    cs = root;
    while(cs != ns) {
    cll *n = new cll();
    n->c = cs->c;
    ct->next = n;
    ct = n;
    cs = cs->next;
    }
    ct->next = NULL;
    return nroot;
    }
    int main(int argc, char** args) {
    std::ifstream input = std::ifstream(args[1]);
    cll *root = NULL;
    cll *current = NULL;
    char c;
    while(input.get(c)) {
    if(c >= '0' && c <= '9') {
    if(current) {
    current->next = new cll();
    current = current->next;
    } else {
    root = new cll();
    current = root;
    }
    current->c = c;
    }
    }
    current->next = NULL;
    cll *root2 = cll_rotate(root, cll_length(root) / 2);
    unsigned long long tally = 0;
    current = root;
    cll *current2 = root2;
    while(current->next) {
    if(current->c == current2->c) {
    tally += current->c - '0';
    }
    current = current->next;
    current2 = current2->next;
    }
    delete root;
    delete root2;
    std::cout << tally << "\n";
    }