On Saturday, 11 February 2017 at 21:02:40 UTC, Era Scarecrow wrote:
Yes i know, which is why i had 3 to calculate 2 inputs because the third is the temp/previous calculation.

Alright I've found the bug and fixed it, and it passes with flying colors (brute force tests up to 6 digits); However it doesn't use the original function to build the table. So I'm satisfied it will handle any length now.

 But it seriously is a lot of overhead for such a simple function.

int[] buildMatrix2() {
    string digits = "0123456789";
    int[] l = new int[16*16*10];
l[] = -1; //printing the array it's obvious to see what is padding
    foreach(a; digits)
    foreach(b; digits)
    foreach(c; digits) {
        int t = (a-'0')*10,
            t2 = (QG10Matrix[(b - '0') + t]-'0') * 10,
            off = (a - '0') << 8 | (b - '0') << 4 | (c - '0');
        l[off] = (QG10Matrix[(c - '0') + t2]-'0')<<8;
    }

    return l;
}

char checkDigit2(string str) {
    int tmpdigit = 0;
    for(;str.length >= 2;str = str[2 .. $])
tmpdigit = QG10Matrix2[tmpdigit|(str[0]-'0')<<4|(str[1]-'0')];

    tmpdigit>>=8;
    if (str.length==1)
        return QG10Matrix[(str[0]-'0')+tmpdigit*10];

    return (tmpdigit+'0') & 0xff;
}


Reply via email to