extern int tuple_cmp(Tuple *l, Tuple *r, int lpos[], int rpos[], int len) { int res = 0; for (int i = 0; i < len && !res; ++i) res = val_cmp(tuple_attr(l, lpos[i]), tuple_attr(r, rpos[i])); return res; }
void testcases() { struct node *res; char *ip; int i,check; float res1; for(i=0;i<10;i++) { res=NULL; ip=NULL; ip=malloc_str(testDB[i].input); ip=valid_str(ip); if(ip!=NULL) { ip=rem_space(ip); res=create_list(ip); res=mergesort(res); res1=get_median(res); } else { res1=0; } check=val_cmp(res1,testDB[i].value); //printf("%f\t%f\n",res1,testDB[i].value); if(check==0) printf("passed\n"); else printf("failed\n"); free(ip); free(res); } }
void playTube(int *narray, int n, int *ngoal, int *earray[2], int e, int *way[3]) { int i; int k = 0; int elen = e; int nlen = n; int *nminus = (int *) malloc (nlen); way[0] = (int *) malloc (2 * n * n); way[1] = (int *) malloc (2 * n * n); way[2] = (int *) malloc (2 * n * n); for(i = 0; i < nlen; i++) { nminus[i] = narray[i] - ngoal[i]; } int *lowtubecnt = (int *) malloc (nlen); int low = 0; for(i = 0; i < nlen; i++) lowtubecnt[i] = 0; for(i = 0; i < elen; i++) { lowtubecnt[earray[0][i] - 1]++; lowtubecnt[earray[1][i] - 1]++; } for(i = 1; i < nlen; i++) { if(lowtubecnt[low] > lowtubecnt[i]) low = i; } while(true) { int goin = 0xff; int golow = 0; for(i = 0; i < elen; i++) { if(earray[0][i] - 1 == low) { if(goin > nminus[earray[1][i] - 1]) { golow = earray[1][i] - 1; goin = nminus[golow]; } } } int minus; minus = abs(nminus[low]) < abs(nminus[golow]) ? nminus[golow] : nminus[low]; way[0][k] = nminus[low] > nminus[golow] ? low : golow; way[1][k] = nminus[low] > nminus[golow] ? golow : low; way[2][k] = abs(minus); narray[way[0][k]] -= way[2][k]; narray[way[1][k]] += way[2][k]; k++; if (val_cmp(narray, ngoal, nlen)) break; low = golow; } free(lowtubecnt); free(nminus); global_k = k; }