|
|
@ -71,15 +71,13 @@ struct expression_result resolve(union expression* root){ |
|
|
|
sprintf(result.text, "%lld",(*root).constant.value); |
|
|
|
sprintf(result.text, "%lld",(*root).constant.value); |
|
|
|
break; |
|
|
|
break; |
|
|
|
case WEBDICE_ROLL: |
|
|
|
case WEBDICE_ROLL: |
|
|
|
size = (*root).roll.count * ceill(15+log10l((*root).roll.count * (*root).roll.type)); |
|
|
|
size = ((*root).roll.count + 1) * ceill(30+log10l((*root).roll.count * (*root).roll.type)); |
|
|
|
length += (int64_t) size; |
|
|
|
length += (int64_t) size; |
|
|
|
result.min = (*root).roll.count; |
|
|
|
result.min = (*root).roll.count; |
|
|
|
result.max = (*root).roll.count * (*root).roll.type; |
|
|
|
result.max = (*root).roll.count * (*root).roll.type; |
|
|
|
result.expected = (*root).roll.count * ((*root).roll.type + 1.0) / 2.0; |
|
|
|
result.expected = (*root).roll.count * ((*root).roll.type + 1.0) / 2.0; |
|
|
|
result.text = (char*) malloc(length * sizeof(char)); |
|
|
|
result.text = (char*) malloc(length * sizeof(char)); |
|
|
|
fprintf(stderr,"COUNT: %lld\n\n",(*root).roll.count); |
|
|
|
|
|
|
|
values = (int64_t*) malloc((*root).roll.count * sizeof(int64_t)); |
|
|
|
values = (int64_t*) malloc((*root).roll.count * sizeof(int64_t)); |
|
|
|
fprintf(stderr,"ALLOC'D %X\n\n",values); |
|
|
|
|
|
|
|
for (i = 0, j = (*root).roll.count, total = 0; i < (*root).roll.count; i++, j--){ |
|
|
|
for (i = 0, j = (*root).roll.count, total = 0; i < (*root).roll.count; i++, j--){ |
|
|
|
values[i] = 1 + (rand() % (*root).roll.type); |
|
|
|
values[i] = 1 + (rand() % (*root).roll.type); |
|
|
|
total += values[i]; |
|
|
|
total += values[i]; |
|
|
@ -93,12 +91,7 @@ struct expression_result resolve(union expression* root){ |
|
|
|
sprintf(&(result.text[strlen(result.text)]),"%lld,", values[i]); |
|
|
|
sprintf(&(result.text[strlen(result.text)]),"%lld,", values[i]); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
fprintf(stderr,"FREE'D %X\n\n",values); |
|
|
|
|
|
|
|
fprintf(stderr,"FREE'D %X\n\n",values); |
|
|
|
|
|
|
|
fprintf(stderr,"FREE'D %X\n\n",values); |
|
|
|
|
|
|
|
fflush(stderr); |
|
|
|
|
|
|
|
free(values); |
|
|
|
free(values); |
|
|
|
fprintf(stderr,"FREE'D %X\n\n",values); |
|
|
|
|
|
|
|
result.actual = total; |
|
|
|
result.actual = total; |
|
|
|
break; |
|
|
|
break; |
|
|
|
case WEBDICE_BINARY: |
|
|
|
case WEBDICE_BINARY: |
|
|
|