| Paste number 50979: | WHY USE LISP!? C IS FASTAR?!?!? |
| Pasted by: | perlbot |
| When: | 4 years, 2 months ago |
| Share: | Tweet this! | http://paste.lisp.org/+13C3 |
| Channel: | #lispcafe |
| Paste contents: |
field_set*
set_difference (field_set *set1, field_set *set2)
{
field_set *difference = (field_set*)malloc(sizeof(field_set));
int i,
set1_alone_fields,
set2_alone_fields,
intersect_fields,
intersect_min_mines,
intersect_max_mines;
difference->num_fields = 0;
for (i = 0; i < set1->num_fields; ++i)
{
int j,
found = 0;
for (j = 0; j < set2->num_fields; ++j)
if (set1->fields[i].x == set2->fields[j].x && set1->fields[i].y == set2->fields[j].y)
{
found = 1;
break;
}
if (!found)
difference->fields[difference->num_fields++] = set1->fields[i];
}
if (difference->num_fields == 0)
{
free(difference);
return 0;
}
intersect_fields = set1->num_fields - difference->num_fields;
set1_alone_fields = set1->num_fields - intersect_fields;
set2_alone_fields = set2->num_fields - intersect_fields;
intersect_min_mines = MAX(0, MAX(set1->min_mines - set1_alone_fields,
set2->min_mines - set2_alone_fields));
difference->max_mines = MIN(difference->num_fields, set1->max_mines - intersect_min_mines);
intersect_max_mines = MIN(intersect_fields, MIN(set1->max_mines, set2->max_mines));
difference->min_mines = MAX(0, set1->min_mines - intersect_max_mines);
make_set_bounds(difference);
canonize_set(difference);
return difference;
}
This paste has no annotations.