From e04c6e3a213089a37047460b5784e3d84981945e Mon Sep 17 00:00:00 2001 From: Om Raheja Date: Thu, 29 Aug 2024 14:00:12 -0400 Subject: [PATCH] small bug in output but everything else fixed --- weightedrank | Bin 51040 -> 51728 bytes weightedrank.c | 72 +++++++++++++++++++++++++++++++------------------ 2 files changed, 46 insertions(+), 26 deletions(-) diff --git a/weightedrank b/weightedrank index 605eed383ac585b939f132c7ce7730504d2c20fd..ae143bc2efa6613b940ec00a462cd6a407018a62 100755 GIT binary patch delta 4898 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 delta 2791 zcmai04{#LK8GrBogiS8VkpvRSMeYcbe}F`}%m0L|Nwh>1;YLS0G$xn?xTFN~X9lUI zw_xc^NClR6iqMQfv=T(7j3=10FkXlRwH=G+49>I+?hytzlsaI?sY@qKe{b*N99Nz0 z%y0L7?|t9*`@QeI-M9OEMrDt2-^KLcQbH&pq%Q?GT*0OC)#d4~>PYXqkxt^OX3OaE zbT!&NY>4!$)odrdLie$C1{<}q?S{_{Ewh;0nA^AoIh}+^v*Ea9l#u7}-Y(0IQ z6`INo!KLh3)2e(GsX1j4z@MCoU-tss7SDs$;18Qt=J{`#hD>b9q7-kv^)pai6w*XZ zbrMZ)r-+(BMQ!+n`QHgda;uw3VEQ--C`U;k{5a7hhZGXY;ct{GqO}`|FT7a{T&)r{ zWhDVb%}AvE4d_?V7AU!`&KkNn+24yrEeWBI zbf?Lf%k0K&$43O3I6$cVQVAu#)ENy8F1ZTn;5&!wP(hEfNAzLLg)t)^LkyR7X?i+~ z&xfQDc@g@a(G7~i43GeKPzS`oBpiyU7yx0X`rc6X3R7g#+&6J_C^T6Bu@EykAO&`# zh&L7!t!R7F?{tAktQQQ=$pN;iIMaLEKzx%0qIP33)`q7*sEW`e9sLR?W)oE)?09zu%R+`_}ypHi^m0W zKR$jWcDzW?$NQrqXM7IoMA)U^nKTj^tF7r`%S+@FUOwo=PQMTohRGWH|HV?Rv1EtVJ+i6`!k5=VKxvXT)Y{wXKRh!Arp<-(5;U-)6- zwK2r11@Az7xpPWo#Y(g_Tmbe$e=grk-oxMMI~W}_r9ObKu}`&NDXb`UOxYTuL5Vx1 zP$M=~Y|PQvn3x%t%@Bp9kS8wY5Muc9DEEPQepESsO>AiM&!E0`$HjnZC4plvJcCap zIVq&DuF6cyG~P1k3ryErnSWVRVgf>N4!Cc!c}^RhVkOQ3dW$tV9m)9I@-m0*lKXSk z?`)+Z_77*L>0KmXk}Hqpx$a>HT~E*y_O&aUZeocg1LkKj_#``6@+B=|+e)9Jv)E^) z_9P2>xuhw=?x0f_LjS@%WyLhi4wfCKr`bd0<>>!ac@N#>;p&xVbCj`f>+9C^KLd39#O zdfVFjHzlzbtMmPD*9eAGewwbpF6Y3Rd9F4;eb7t{m(7G8#<%rnNrX07*qvIR|7EeG zR&EjAk&;F8NqDETv|!6>5vN}pup4+4I0JkFTmr5Ew*UhrGzVA$R0EF!PXiq&L349+ z>&DLBzRu>hbv;`>UF>2omj%XmrEFG84~#o|1w8lPCRu6S1Q44eX1c4g2F2HgTao;k@WDkYxOD z<(H-OAtk?PWY4#^_3&+Rmt->Gt&+T3Lc-xe_v2kHg6*nZ5O2lt77GGMwv*FXsrank, items->rank_count); - if (!weighted) { - // print the rank list - print_ranklist(items); - } else { + print_ranklist(items); + if (weighted) { + // weighted ranking + puts(BOLDWHITE "Choosing top 3 weights." RESET); // leave if any are null if (items->rank_count < 3) { @@ -90,7 +90,6 @@ main(int argc, char *argv[]) char buf[16]; //enough to hold weight float left = 1.0; // 100% char *ptr; - // ask for weights /* weight 1 */ printf(BOLDWHITE "Weight for %s\n" BOLDGREEN "(1.0) > " RESET, weighted.opt1); @@ -101,14 +100,13 @@ main(int argc, char *argv[]) goto w_end; } - if (ptr != NULL) { - printf(BOLDWHITE "Using %f" RESET "\n", weighted.opt1_w); - } + printf(BOLDWHITE "Using %g for %s" RESET "\n", + weighted.opt1_w, weighted.opt1); left -= weighted.opt1_w; /* weight 2 */ - printf(BOLDWHITE "Weight for %s\n" BOLDGREEN "(%f) > " RESET, weighted.opt2, left); + printf(BOLDWHITE "Weight for %s\n" BOLDGREEN "(%g) > " RESET, weighted.opt2, left); fgets(buf, 16, stdin); weighted.opt2_w = strtof(buf, &ptr); if (weighted.opt2_w >= 1.0 || weighted.opt2_w <= 0.0) { @@ -116,24 +114,27 @@ main(int argc, char *argv[]) goto w_end; } - if (ptr != NULL) { - printf(BOLDWHITE "Using %f" RESET "\n", weighted.opt2_w); - } + printf(BOLDWHITE "Using %g for %s" RESET "\n", + weighted.opt2_w, weighted.opt2); left -= weighted.opt2_w; /* weight 3 */ - printf(BOLDWHITE "Weight for %s\n" BOLDGREEN "(%f) > " RESET, weighted.opt3, left); - fgets(buf, 16, stdin); - weighted.opt3_w = strtof(buf, &ptr); - if (weighted.opt3_w >= 1.0 || weighted.opt3_w <= 0.0) { - printf(BOLDRED "Error: weight must be between 0 and 1\n" RESET); - goto w_end; + weighted.opt3_w = left; + printf(BOLDWHITE "Using %g for %s" RESET "\n", + weighted.opt3_w, weighted.opt3); + + // copy memory before ranking + int space = sizeof(struct Rank) * items->rank_count; + + // manual copy with for loop + for (int i = 0; i < items->rank_count; i++) { + strncpy(mem->rl.srank[0][i].name, items->rank[i], M_STR_LEN); } - if (ptr != NULL) { - printf(BOLDWHITE "Using %f" RESET "\n", weighted.opt3_w); - } + memcpy(mem->rl.srank[1], mem->rl.srank[0], space); + memcpy(mem->rl.srank[2], mem->rl.srank[1], space); + printf(BOLDRED "\nRank according to %s\n\n" RESET, weighted.opt1); rank(mem->rl.srank[0], mem->rl.rank_count); @@ -142,15 +143,34 @@ main(int argc, char *argv[]) printf(BOLDRED "\nRank according to %s\n\n" RESET, weighted.opt3); rank(mem->rl.srank[2], mem->rl.rank_count); - // now do some vector math :) - // nothing too performance intensive, don't need to optimize printf("\n\n" BOLDWHITE "**FINAL RANKING**" "\n" - "%s " BOLDGREEN "(%f)" BOLDWHITE " | " - "%s " BOLDGREEN "(%f)" BOLDWHITE " | " - "%s " BOLDGREEN "(%f)" RESET "\n\n", + BOLDYELLOW "name | " + "%s " BOLDGREEN "(%g)" BOLDWHITE " | " + "%s " BOLDGREEN "(%g)" BOLDWHITE " | " + "%s " BOLDGREEN "(%g)" BOLDWHITE " | " + "total " RESET "\n\n", weighted.opt1, weighted.opt1_w, weighted.opt2, weighted.opt2_w, weighted.opt3, weighted.opt3_w); + + for (int i = 0; i < mem->rl.rank_count; i++) { + // garbage dot product T_T + + int total = mem->rl.srank[0][i].score * weighted.opt1_w + + mem->rl.srank[1][i].score * weighted.opt2_w + + mem->rl.srank[2][i].score * weighted.opt3_w; + + printf(BOLDWHITE "%s | " + BOLDGREEN "%d*%g " BOLDWHITE "|" + BOLDGREEN "%d*%g " BOLDWHITE "|" + BOLDGREEN "%d*%g " BOLDWHITE "|" + BOLDGREEN "%d " RESET "\n", + mem->rl.srank[0][i].name, + mem->rl.srank[0][i].score, weighted.opt1_w, + mem->rl.srank[1][i].score, weighted.opt2_w, + mem->rl.srank[2][i].score, weighted.opt3_w, + total); + } w_end: free(mem); }