/* vkd1.c RAP Version 1 20/08/07 */ #include #include #include "vkd1.h" int ca, cb, cc; int vkdorder(int * blimp7) { if(*(blimp7++) != 7) return -1; if(*(blimp7++) != 4) return -1; if(*(blimp7++) != 2) return -1; ca=*(blimp7++); cb=*(blimp7++); cc=*blimp7; return 1; } int fff(int x) { return (ca*x + cb)*x + cc; } VKD * vkdface(int * word, int len) { VKD * v; int i; v=malloc(sizeof(VKD)); if(v==NULL) { printf("malloc failed in vkdface\n"); exit(27); } v->word=malloc(len*sizeof(int)); if(v->word==NULL) { printf("malloc failed in vkdface\n"); exit(28); } v->len=len; v->price=fff(len); for(i=0;iword[i]=word[i]; return v; } void vkddest(VKD * vkd) { free(vkd->word); free(vkd); } int vkdblack(VKD * vkd, int * word) { int i; for(i=0;ilen;i++) word[i]=vkd->word[i]; return vkd->len; } VKD * vkdjoin(VKD * vkd1, int rot1, VKD * vkd2, int rot2, int drop) { VKD * v; int i,j; int len; int * pt; v=malloc(sizeof(VKD)); if(v==NULL) { printf("malloc failed in vkdjoin\n"); exit(29); } len=vkd1->len + vkd2->len - 2*drop; v->word=malloc(len*sizeof(int)); if(v->word==NULL) { printf("malloc failed in vkdjoin\n"); exit(30); } v->price=vkd1->price+vkd2->price; pt=v->word; j=rot1; for(i=0;ilen-drop;i++) { *(pt++)=vkd1->word[j++]; if(j==vkd1->len)j=0; } j=rot2; for(i=0;ilen-drop;i++) { *(pt++)=vkd2->word[j++]; if(j==vkd2->len)j=0; } v->len=len; return v; } int vkdshort(VKD * vkd) { if(vkd->price < fff(vkd->len)) return 1; return 0; } int vkdcomp(VKD * vkd1, VKD * vkd2) { if(vkd1->price > vkd2->price) return 1; if(vkd1->price < vkd2->price) return -1; return 0; } /* end of vkd1.c */