/* calculate candidates for each square */ void cand(void) { int i = 0, j = 0, k = 0, m = 0; short list[N]; short len = 0; /* list of already taken numbers */ short root = (short)(sqrt((double)N)); for (i = 0; i < N; i++) { for (j = 0; j < N; j++) { /* if the square is empty, compile a candidate list */ if (puz[i][j] == 0) { //printf("working on empty square %d,%d\n", i, j); /* traverse row */ //printf("before row traversal\n"); for (m = 0; m < N; m++) if (puz[i][m] > 0) list[len++] = puz[i][m]; /* traverse column */ //printf("after row, before col traversal\n"); for (k = 0; k < N; k++) if (puz[k][j] > 0) len += add_no_dup(list, puz[k][j], len); /* traverse current small square */ //printf("after col, before sqr traversal\n"); for (k = (i/root)*root; k < ((i/root)*root + root); k++) for (m = (j/root)*root; m < ((j/root)*root + root); m++) { if (puz[k][m] > 0) len += add_no_dup(list, puz[k][m], len); } /* create candidate list and store in 3-d structure */ //printf("after sqr, creating cand list\n"); for (k = 1; k <= N; k++) if (!contains(list, k, len)) { puz_can[i][j][puz_can[i][j][0]+1] = k; puz_can[i][j][0]++; } /* fill in space if value is trivial (only one candidate) */ if (puz_can[i][j][0] == 1) puz[i][j] = puz_can[i][j][1]; /* fill in space if restricted by neighboring rows/cols */ else if (puz_can[i][j][0] > 1) { for (k = 1; k <= puz_can[i][j][0]; k++) { if (restr(i, j, puz_can[i][j][k])) { puz[i][j] = puz_can[i][j][k]; break; } } } len = 0; /* clear list of already taken numbers*/ } } } }
QString KraftDB::mysqlEuroDecode( const QString& str ) const { QChar euro( 0x20ac ); QString restr( str ); return restr.replace( EuroTag, euro ); }