From a1255b5c1ada720b416b06a6abb1b4d1777291e9 Mon Sep 17 00:00:00 2001 From: Om Raheja Date: Wed, 28 Aug 2024 17:21:31 -0400 Subject: [PATCH] pushing broken code --- rank.h | 26 +++++++++++++++-------- weightedrank | Bin 0 -> 51056 bytes weightedrank.c | 56 ++++++++++++++++++++++++++++++------------------- 3 files changed, 51 insertions(+), 31 deletions(-) create mode 100755 weightedrank diff --git a/rank.h b/rank.h index dfab2e0..c8588fe 100644 --- a/rank.h +++ b/rank.h @@ -6,32 +6,40 @@ struct Rank { - char name[M_STR_LEN]; - int score; + int score; + char name[M_STR_LEN]; }; struct RankList { + int rank_count; struct Rank rank[M_STR]; - struct Rank rank_sorted[M_STR]; - int rank_count; + struct Rank srank[M_STR]; }; +struct WRankList +{ + int rank_count; + struct Weighted rank[M_STR]; + struct Weighted srank[3][M_STR]; +} + struct Weighted { - char opt1[M_STR_LEN]; float opt1_w; - char opt2[M_STR_LEN]; float opt2_w; - char opt3[M_STR_LEN]; float opt3_w; + + char opt1[M_STR_LEN]; + char opt2[M_STR_LEN]; + char opt3[M_STR_LEN]; }; /* for one big alloc operation instead of multiple */ struct WAlloc { - struct Weighted w; - struct RankList r[3]; + struct Weighted w; + struct WRankList rl; }; void isort(char [][M_STR], struct Rank[], int); diff --git a/weightedrank b/weightedrank new file mode 100755 index 0000000000000000000000000000000000000000..0e9cc77befc9f424ca4d6eed626a39ec004e2a26 GIT binary patch literal 51056 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 = rrlstdin(items->rank); + memcpy(items->srank, items->rank, sizeof(items->rank)); rank(items); if (!weighted) { @@ -66,9 +68,9 @@ main(int argc, char *argv[]) } else { // leave if any are null - if (items->rank_sorted[0].name[0] == 0 || - items->rank_sorted[1].name[0] == 0 || - items->rank_sorted[2].name[0] == 0) { + if (items->srank[0].name[0] == 0 || + items->srank[1].name[0] == 0 || + items->srank[2].name[0] == 0) { puts(BOLDRED "Error: not enough weights.\n" RESET); goto w_end; @@ -78,34 +80,34 @@ main(int argc, char *argv[]) // init struct WAlloc *mem = malloc(sizeof(struct WAlloc)); - struct Weighted weighted = mem->weighted; + struct Weighted weighted = mem->w; // move the top 3 items from the ranklist here - weighted.opt1 = items->rank_sorted[0].name; - weighted.opt2 = items->rank_sorted[1].name; - weighted.opt3 = items->rank_sorted[2].name; + strncpy(weighted.opt1, items->srank[0].name, M_STR); + strncpy(weighted.opt2, items->srank[1].name, M_STR); + strncpy(weighted.opt3, items->srank[2].name, M_STR); char buf[16]; //enough to hold weight char *ptr; // ask for weights - printf(BOLDGREEN "Enter weight for %s\n" RESET); + printf(BOLDGREEN "Enter weight for %s\n" RESET, weighted.opt1); fgets(buf, 16, stdin); - weighted.opt1_w = strtof(buf, &ptr, 10); + weighted.opt1_w = strtof(buf, &ptr); if (ptr != NULL) { printf(BOLDWHITE "Using %f" RESET "\n", weighted.opt1_w); } - printf(BOLDGREEN "Enter weight for %s\n" RESET); + printf(BOLDGREEN "Enter weight for %s\n" RESET, weighted.opt2); fgets(buf, 16, stdin); - weighted.opt2_w = strtof(buf, &ptr, 10); + weighted.opt2_w = strtof(buf, &ptr); if (ptr != NULL) { printf(BOLDWHITE "Using %f" RESET "\n", weighted.opt2_w); } - printf(BOLDGREEN "Enter weight for %s\n" RESET); + printf(BOLDGREEN "Enter weight for %s\n" RESET, weighted.opt3); fgets(buf, 16, stdin); - weighted.opt3_w = strtof(buf, &ptr, 10); + weighted.opt3_w = strtof(buf, &ptr); if (ptr != NULL) { printf(BOLDWHITE "Using %f" RESET "\n", weighted.opt3_w); @@ -151,16 +153,15 @@ isort(char matrix[][M_STR], struct Rank to_sort[], int len) { return; } -void -rank(struct RankList *items) { - // read strings - printf(BOLDWHITE "Enter a ranking (empty line when done) \n" RESET); - +int +rrlstdin(struct Rank items[]) { + printf(BOLDWHITE "Enter items...\n" RESET); int i; for (i = 0; i < M_STR; i++) { // local buffer for name char *name = items->rank[i].name; + puts(BOLDGREEN "> " RESET); fgets(name, M_STR_LEN, stdin); // if its an empty string, stop reading @@ -170,9 +171,18 @@ rank(struct RankList *items) { } // remove newline - name[strcspn(name, "\n")] = '\0'; + char nl = strcspn(name, "\n"); + if (nl != '\n' || nl != 0) { + // it was cut off + puts(BOLDRED "Truncated to 255 chars." RESET); + name[nl] = '\0'; + } + name[nl] = '\0'; } +} +void +rank(struct RankList *items) { // construct matrix of comparisons // NOTE: it doesn't actually store the "reason", // it just forces the user to type something out lol @@ -210,12 +220,12 @@ rank(struct RankList *items) { } } - memcpy(items->rank_sorted, items->rank, sizeof(struct Rank) * M_STR); + memcpy(items->srank, items->rank, sizeof(struct Rank) * M_STR); items->rank_count = i; // insertion sort: the array **should be** nearly sorted - isort(matrix, items->rank_sorted, i); + isort(matrix, items->srank, i); } void @@ -224,7 +234,7 @@ print_ranklist(struct RankList *items) { for (int j = 0; j < items->rank_count; j++) { printf("%s: %d | %s: %d\n", items->rank[j].name, items->rank[j].score, - items->rank_sorted[j].name, items->rank_sorted[j].score); + items->srank[j].name, items->srank[j].score); } } @@ -236,4 +246,6 @@ usage(void) { " -n, --no-color disable colors\n" " -w, --weighted use weighted rankings\n" " -l, --log-file FILE write log to FILE\n"); + + exit(0); }