int solver(int *map, int x1, int y1, int x2, int y2, int *original_stones, int n) { //dump(map, x1, y1, x2, y2, original_stones, n); // Prepare int i, j, k; stoneEncode(global_stones, original_stones, n); global_original_stones = original_stones; global_n = n; global_x1 = x1; global_y1 = y1; global_x2 = x2; global_y2 = y2; for (i=0; i<1024; i++) map[i] = (map[i] == 0) ? -1 : -2; // Search global_best.score = 1024; bestScore(&global_best, map); for (i=0; i<n; i++) { int8_t op[256]; BlockDefineOperation(global_stones[i].list, op); int *base = &global_operation[i << 8]; *base = 0; for (j=0; j<8; j++) { int8_t *pp = &op[j << 5]; if (pp[0] == INT8_MAX) continue; int *p = &base[(*base) << 5]; for (k=1; k<global_stones[i].len; k++) { p[k << 1] = pp[k << 1]; p[(k << 1) + 1] = pp[(k << 1) + 1]; } (*base)++; } } global_sumlen[n] = 0; for (i=(n-1); i>=0; i--) global_sumlen[i] = global_sumlen[i+1] + global_stones[i].len; // IKUZO---- //int t = n / 8; #pragma omp parallel for num_threads(4) for (i=0; i<4; i++) { int *p = &global_tmpmap[i << 10]; memcpy(p, map, 4096); backTracking(i, p, global_best.score, 1); } return EXIT_FAILURE; }
void putWrapper(Score *best, Stone *stones, int n, const int *map, int x1, int y1, int x2, int y2, int *original_stones) { // Score int i; Stone sorted[256]; static int counter = 0; switch(counter++) { case 0: for (i=0; i<n; i++) stones[i].score = ((double)(n - i) / (double)n); break; case 1: for (i=0; i<n; i++) stones[i].score = (((double)(n - i) / (double)n) * (double)stones[i].len) * 0.0625; break; case 2: for (i=0; i<n; i++) stones[i].score = ((double)(n - i) / (double)n) * -1; break; case 3: for (i=0; i<n; i++) stones[i].score = (((double)(n - i) / (double)n) * (double)stones[i].len) * -0.0625; break; default: srand((unsigned)time(NULL)); for (i=0; i<n; i++) stones[i].score = rand(); } memcpy(sorted, stones, sizeof(Stone) * 256); qsort(sorted, n, sizeof(Stone), sortByScore); // Put int tmpmap[1024]; for (i=0; i<n; i++) { memcpy(tmpmap, map, sizeof(int) * 1024); putStone(sorted, sorted[i].id, n, tmpmap, x1, y1, x2, y2); if (bestScore(best, tmpmap)) { printf("Update best score: (%d, %d)\n", best->score, best->zk); sendMsg("S"); sendAnswer(best->map, stones, original_stones, n); if (sendMsg("E") == EXIT_FAILURE) return; } } }
/** * \fn void lancerMenu() * \brief Menu * * \author Dzik Timothee * * \return */ void lancerMenu() { printf("%s\n", pseudo); int choix = 0; while (choix != 5) { printf("Que voulez vous faire ?\n 1- Voir mon profil\n 2- Mon score\n 3- Best Score ! \n4- Jouer !\n5- Quitter\n"); scanf("%d", &choix); fflush(stdin); switch (choix) { case 1: myProfile(pseudo); break; case 2: score_joueur(pseudo); break; case 3: bestScore(); break; case 4: jouer(); break; default: break; } } }