void * simulator(void * v) { uint32_t ngames = ((uint32_t *)v)[0]; uint32_t * ohs = (uint32_t *)malloc(2*(np-1)*sizeof(uint32_t)); uint32_t cs[7], myas[7], cs0, cs1, result, result1, i, j, k; uint32_t mycounters[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}; // int mywins = 0, mydraws = 0; deck * d = newdeck(); for (i=0; i<kc; i++) { pick(d, as[i]); myas[i] = as[i]; } for (i=0; i<ngames; i++) { int64_t score; initdeck(d, 52-kc); for (j=0; j<2*(np-1); j++) ohs[j] = draw(d); for (j=kc; j<7; j++) myas[j] = draw(d); for (j=0; j<7; j++) cs[j] = myas[j]; sort(cs); score = eval7(cs); result = WIN; for (j=0; j<np-1; j++) { cs[0] = ohs[2*j]; cs[1] = ohs[2*j+1]; for (k=2; k<7; k++) cs[k] = myas[k]; sort(cs); result1 = comp7(cs, score); if (result1 < result) result = result1; if (result == LOSS) break; } mycounters[result]++; mycounters[hand(score)]++; } pthread_mutex_lock(&tlock); for (i=0; i<12; i++) { counters[i] += mycounters[i]; } pthread_mutex_unlock(&tlock); free(ohs); free(d); return NULL; }
static VALUE *eval6(void) { static const char keywords[] ALIGN1 = "quote\0""length\0""match\0""index\0""substr\0"; VALUE *r, *i1, *i2; static VALUE *l = NULL; static VALUE *v = NULL; int key = *G.args ? index_in_strings(keywords, *G.args) + 1 : 0; if (key == 0) /* not a keyword */ return eval7(); G.args++; /* We have a valid token, so get the next argument. */ if (key == 1) { /* quote */ if (!*G.args) bb_error_msg_and_die("syntax error"); return str_value(*G.args++); } if (key == 2) { /* length */ r = eval6(); tostring(r); v = int_value(strlen(r->u.s)); freev(r); } else l = eval6(); if (key == 3) { /* match */ r = eval6(); v = docolon(l, r); freev(l); freev(r); } if (key == 4) { /* index */ r = eval6(); tostring(l); tostring(r); v = int_value(strcspn(l->u.s, r->u.s) + 1); if (v->u.i == (arith_t) strlen(l->u.s) + 1) v->u.i = 0; freev(l); freev(r); } if (key == 5) { /* substr */ i1 = eval6(); i2 = eval6(); tostring(l); if (!toarith(i1) || !toarith(i2) || i1->u.i > (arith_t) strlen(l->u.s) || i1->u.i <= 0 || i2->u.i <= 0) v = str_value(""); else { v = xmalloc(sizeof(VALUE)); v->type = STRING; v->u.s = xstrndup(l->u.s + i1->u.i - 1, i2->u.i); } freev(l); freev(i1); freev(i2); } return v; }