/* ex1-c: Advent2020 game, day 10/game 1 */ #include #include #include struct list { unsigned size; unsigned last; unsigned long long *list; }; #define DEFNSUM 25 #define BLOCKSIZE 1024 /* number of elements for realloc() */ void merge(array, left, mid, right) unsigned long long *array; int left, mid, right; { unsigned long long temp[right-left+1]; int pos=0, lpos = left, rpos = mid + 1, iter; while(lpos <= mid && rpos <= right) { if(array[lpos] < array[rpos]) { temp[pos++] = array[lpos++]; } else { temp[pos++] = array[rpos++]; } } while(lpos <= mid) temp[pos++] = array[lpos++]; while(rpos <= right)temp[pos++] = array[rpos++]; for(iter = 0;iter < pos; iter++) { array[iter+left] = temp[iter]; } return; } void mergesort(array, left, right) unsigned long long *array; int left, right; { int mid = (left+right)/2; if(leftlast; unsigned long long *ptr=list->list; fprintf(stderr, "LIST: address=%p pinstr=%p size=%d\n", list, ptr, psize); for (i=0; ilist=malloc(sizeof(unsigned long long)*BLOCKSIZE); list->size=BLOCKSIZE; list->last=0; } cur=list->last; size=list->size; if (cur == size) { size+=BLOCKSIZE; list->size=size; list->list=realloc(list->list, sizeof(unsigned long long)*size); } ptr=list->list+cur; //sscanf(line, "%d", &val); *ptr=val; list->last++; return list; } unsigned long long *calc(list) struct list *list; { static unsigned long long res[4]; unsigned long long *ptr=list->list; unsigned last=list->last, i; for (i=0; i<4; ++i) res[i]=0; for (i=1; ilist, 0, list->last-1); last=list->list[list->last-1]; list=add_val(list, last+3); //print_list(list); result=calc(list); printf("%s : diff1=%llu diff2=%llu res=%llu\n", *av, result[1], result[3], result[1]*result[3]); exit (0); }