From 3b30b7870c781e8630e5ec7a4c901985a5f5938c Mon Sep 17 00:00:00 2001 From: Pedro Lopes Date: Tue, 24 Oct 2023 08:48:01 -0300 Subject: [PATCH] add: TP02Q16 solved --- .../753045_insercaoParcial.txt | 1 + .../Player | Bin 0 -> 22648 bytes .../Player.c | 450 +++++++++++++++++ .../pedro.out | 10 + .../pub.in | 465 ++++++++++++++++++ .../pub.out | 10 + 6 files changed, 936 insertions(+) create mode 100644 tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/753045_insercaoParcial.txt create mode 100644 tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/Player create mode 100644 tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/Player.c create mode 100644 tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pedro.out create mode 100644 tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.in create mode 100644 tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.out diff --git a/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/753045_insercaoParcial.txt b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/753045_insercaoParcial.txt new file mode 100644 index 0000000..29a9ab8 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/753045_insercaoParcial.txt @@ -0,0 +1 @@ +753045 1ms 191739 \ No newline at end of file diff --git a/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/Player b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/Player new file mode 100644 index 0000000000000000000000000000000000000000..b1964ed8b4e4fd2c6edb94dc3c83449e7daa9f1f GIT binary patch literal 22648 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 srTFJ|^ZZNK2m7uh)o0~RivH9!{ +#include +#include +#include +#include +#include + +// ---------------------------------------------------------------------------------------------------- // + +// Constants +#define MAX_PLAYERS 4000 +#define FILE_PATH "/tmp/players.csv" + +#define MAX_NAME_SIZE 40 +#define MAX_COLLEGE_SIZE 60 +#define MAX_BIRTH_CITY_SIZE 40 +#define MAX_BIRTH_STATE_SIZE 40 + +#define MAX_LINE_SIZE 300 +#define MAX_ATTRIBUTE_SIZE 100 + +// ---------------------------------------------------------------------------------------------------- // + +// Structs +typedef struct Player { + int id; + char *name; + int height; + int weight; + int birthYear; + char *birthCity; + char *birthState; + char *college; +} Player; + +// ---------------------------------------------------------------------------------------------------- // + +// Global variables +Player allPlayers[MAX_PLAYERS]; +int n = 0; + +// ---------------------------------------------------------------------------------------------------- // + +// Functions +bool isEnd(char* line) { return line[0] == 'F' && line[1] == 'I' && line[2] == 'M'; } + +void substring(char *string, char *stringStart, int length) { + + strncpy(string, stringStart, length); + string[length] = '\0'; +} + +void proccess_attribute(char *attribute, char **substringStart, char **substringEnd, bool isFirstAttribute) { + + // Skip first comma + if(!isFirstAttribute) { + + if(*substringEnd != NULL) *substringStart = *substringEnd + 1; + else *substringStart = *substringEnd; + } + + // Get next comma + *substringEnd = strchr(*substringStart, ','); + + // Get substring + if(*substringEnd) substring(attribute, *substringStart, *substringEnd - *substringStart); + else strcpy(attribute, *substringStart); + + // Set default value if attribute is empty + if(strcmp(attribute, "") == 0 || attribute[0] == '\n' || attribute[0] == '\r' || attribute[0] == '\0') strcpy(attribute, "nao informado"); + + // Clean \n from the end of the string + if(attribute[strlen(attribute) - 1] == '\n') attribute[strlen(attribute) - 1] = '\0'; +} + +// ---------------------------------------------------------------------------------------------------- // + +// Methods signatures + +// Class +Player player_newBlank(); +Player player_new(int id, char *name, int height, int weight, int birthYear, char *birthCity, char *birthState, char *college); +Player *player_clone(Player *player); +void player_print(Player *player); +Player player_read(char *line); +Player *player_searchById(int id); + +// Gets +int player_getId(Player *player); +char *player_getName(Player *player); +int player_getHeight(Player *player); +int player_getWeight(Player *player); +char *player_getCollege(Player *player); +int player_getBirthYear(Player *player); +char *player_getBirthCity(Player *player); +char *player_getBirthState(Player *player); + +// Sets +void player_setId(Player *player, int id); +void player_setName(Player *player, char *name); +void player_setHeight(Player *player, int height); +void player_setWeight(Player *player, int weight); +void player_setCollege(Player *player, char *college); +void player_setBirthYear(Player *player, int birthYear); +void player_setBirthCity(Player *player, char *birthCity); +void player_setBirthState(Player *player, char *birthState); + +// General +void startPlayers(); + +// ---------------------------------------------------------------------------------------------------- // + +// Methods implementations + +// Class +Player player_newBlank() { + + Player player; + + player.id = -1; + player.height = -1; + player.weight = -1; + player.birthYear = -1; + + player.name = (char *) calloc(MAX_NAME_SIZE, sizeof(char)); + strcpy(player.name, ""); + + player.birthCity = (char *) calloc(MAX_BIRTH_CITY_SIZE, sizeof(char)); + strcpy(player.birthCity, ""); + + player.birthState = (char *) calloc(MAX_BIRTH_STATE_SIZE, sizeof(char)); + strcpy(player.birthState, ""); + + player.college = (char *) calloc(MAX_COLLEGE_SIZE, sizeof(char)); + strcpy(player.college, ""); + + return player; +} + +Player player_new(int id, char *name, int height, int weight, int birthYear, char *birthCity, char *birthState, char *college) { + + Player player; + + player.id = id; + player.height = height; + player.weight = weight; + player.birthYear = birthYear; + + player.name = (char *) calloc(MAX_NAME_SIZE, sizeof(char)); + strcpy(player.name, name); + + player.birthCity = (char *) calloc(MAX_BIRTH_CITY_SIZE, sizeof(char)); + strcpy(player.birthCity, birthCity); + + player.birthState = (char *) calloc(MAX_BIRTH_STATE_SIZE, sizeof(char)); + strcpy(player.birthState, birthState); + + player.college = (char *) calloc(MAX_COLLEGE_SIZE, sizeof(char)); + strcpy(player.college, college); + + return player; +} + +Player *player_clone(Player *player) { + + Player *clone = (Player *) malloc(sizeof(Player)); + + clone -> id = player -> id; + clone -> height = player -> height; + clone -> weight = player -> weight; + + clone -> name = (char *) calloc(MAX_NAME_SIZE, sizeof(char)); + strcpy(clone -> name, player -> name); + + clone -> birthCity = (char *) calloc(MAX_BIRTH_CITY_SIZE, sizeof(char)); + strcpy(clone -> birthCity, player -> birthCity); + + clone -> birthState = (char *) calloc(MAX_BIRTH_STATE_SIZE, sizeof(char)); + strcpy(clone -> birthState, player -> birthState); + + clone -> college = (char *) calloc(MAX_COLLEGE_SIZE, sizeof(char)); + strcpy(clone -> college, player -> college); + + return clone; +} + +void player_print(Player *player) { + + printf("[%d ## %s ## %d ## %d ## %d ## %s ## %s ## %s]\n", + player -> id, + player -> name, + player -> height, + player -> weight, + player -> birthYear, + player -> college, + player -> birthCity, + player -> birthState + ); +} + +Player player_read(char *line) { + + Player player = player_newBlank(); + + char *substringStart = line; + char *substringEnd = NULL; + char attribute[MAX_ATTRIBUTE_SIZE]; + + // Get id + proccess_attribute(attribute, &substringStart, &substringEnd, true); + player_setId(&player, atoi(attribute)); + + // Get name + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setName(&player, attribute); + + // Get height + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setHeight(&player, atoi(attribute)); + + // Get weight + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setWeight(&player, atoi(attribute)); + + // Get college + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setCollege(&player, attribute); + + // Get birth year + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setBirthYear(&player, atoi(attribute)); + + // Get birth city + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setBirthCity(&player, attribute); + + // Get birth state + proccess_attribute(attribute, &substringStart, &substringEnd, false); + player_setBirthState(&player, attribute); + + return player; +} + +Player *player_searchById(int id) { + + for(int i = 0; i < n; i++) { + + if(player_getId(&allPlayers[i]) == id) return &allPlayers[i]; + } + return NULL; +} + +// Gets +int player_getId(Player *player) { return player -> id; } +char *player_getName(Player *player) { return player -> name; } +int player_getHeight(Player *player) { return player -> height; } +int player_getWeight(Player *player) { return player -> weight; } +char *player_getCollege(Player *player) { return player -> college; } +int player_getBirthYear(Player *player) { return player -> birthYear; } +char *player_getBirthCity(Player *player) { return player -> birthCity; } +char *player_getBirthState(Player *player) { return player -> birthState; } + +// Sets +void player_setId(Player *player, int id) { player -> id = id; } +void player_setName(Player *player, char *name) { strcpy(player -> name, name); } +void player_setHeight(Player *player, int height) { player -> height = height; } +void player_setWeight(Player *player, int weight) { player -> weight = weight; } +void player_setBirthYear(Player *player, int birthYear) { player -> birthYear = birthYear; } +void player_setBirthCity(Player *player, char *birthCity) { strcpy(player -> birthCity, birthCity); } +void player_setBirthState(Player *player, char *birthState) { strcpy(player -> birthState, birthState); } +void player_setCollege(Player *player, char *college) { strcpy(player -> college, college); } + +// General +void startPlayers() { + + // Open file + FILE *fp; + char *line = NULL; + size_t len = 0; + ssize_t read; + + fp = fopen(FILE_PATH, "r"); + + if(fp == NULL) { + + perror("x Error opening file"); + exit(EXIT_FAILURE); + } + + // Skip first line + getline(&line, &len, fp); + + // Read all lines + while((read = getline(&line, &len, fp)) != -1) { + + // Read player from line + Player player = player_read(line); + + allPlayers[n++] = player; + + if(n >= MAX_PLAYERS) { + + perror("x Max players reached"); + exit(EXIT_FAILURE); + } + } + + // Close file and free memory + fclose(fp); + + if(line) free(line); +} + +// ---------------------------------------------------------------------------------------------------- // + +// Main +int main() { + + // ----------------------------------------------------------------- // + + // #1 - Start - Read all players in CSV file + startPlayers(); + + // ----------------------------------------------------------------- // + + // #2 - Read input and print players from pub.in id entries and add to mainPlayers array + + // Initialize mainPlayers array + Player mainPlayers[MAX_PLAYERS]; + int m = 0; + + char in[5]; + scanf(" %[^\n]s", in); + + while(true) { + + if(isEnd(in)) break; + else { + + int id = atoi(in); + + Player *player = player_searchById(id); + + if(player) mainPlayers[m++] = *player; + + // ------------------------- // + + scanf(" %[^\n]s", in); + } + } + + // ----------------------------------------------------------------- // + + // #3 - Order mainPlayers array by key "yearOfBirth" using partial insertion sort, in draw case, order by key "name" + + // Start benchmark + clock_t startTime = clock(); + int comparisons = 0; + + // ----------------- // + + // Partial insertion sort with k = 10 + int k = 10; + + for(int i = 1; i < m; i++) { + + comparisons++; + + Player current = mainPlayers[i]; + int j = i - 1; + + // Compare based on birth year + while(j >= 0 && player_getBirthYear(&mainPlayers[j]) > player_getBirthYear(¤t)) { + + mainPlayers[j + 1] = mainPlayers[j]; + j--; + comparisons++; + } + + // If there's a tie in birth year, compare by name + while(j >= 0 && player_getBirthYear(&mainPlayers[j]) == player_getBirthYear(¤t)) { + + comparisons += 2; + + if(strcmp(player_getName(&mainPlayers[j]), player_getName(¤t)) > 0) { + + mainPlayers[j + 1] = mainPlayers[j]; + j--; + } + else break; + } + + mainPlayers[j + 1] = current; + + // Check if we need to maintain only the top k elements + if(i >= k) { + + comparisons++; + + for(int l = k; l < i; l++) { + + comparisons++; + + player_setBirthYear(&mainPlayers[l], INT_MAX); // Set birth year to a high value for elements outside the top k + } + + for(int l = k - 1; l >= 0; l--) { + + comparisons += 4; + + if(player_getBirthYear(&mainPlayers[l]) > player_getBirthYear(&mainPlayers[l + 1]) || + (player_getBirthYear(&mainPlayers[l]) == player_getBirthYear(&mainPlayers[l + 1]) && + strcmp(player_getName(&mainPlayers[l]), player_getName(&mainPlayers[l + 1])) > 0)) { + + Player temp = mainPlayers[l]; + mainPlayers[l] = mainPlayers[l + 1]; + mainPlayers[l + 1] = temp; + } + else break; + } + } + } + + // ----------------- // + + // Save benchmark in file + FILE *fp = fopen("753045_insercaoParcial.txt", "w"); + fprintf(fp, "753045\t%.0fms\t%d", (double)(clock() - startTime) / CLOCKS_PER_SEC * 1000.0, comparisons); + fclose(fp); + + // ----------------- // + + // Print mainPlayers array + for(int i = 0; i < k; i++) player_print(&mainPlayers[i]); + + // ----------------- // + + return 0; +} \ No newline at end of file diff --git a/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pedro.out b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pedro.out new file mode 100644 index 0000000..0c625fa --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pedro.out @@ -0,0 +1,10 @@ +[683 ## Matt Guokas ## 190 ## 88 ## 1915 ## Saint Joseph's University ## nao informado ## nao informado] +[90 ## Buddy Jeannette* ## 180 ## 79 ## 1917 ## Washington & Jefferson College ## New Kensington ## Pennsylvania] +[3420 ## Armon Johnson ## 196 ## 107 ## 1920 ## Bemidji State University ## Gonvick ## Minnesota] +[39 ## Bob Davies* ## 185 ## 79 ## 1920 ## Seton Hall University ## Harrisburg ## Pennsylvania] +[89 ## Tony Jaros ## 190 ## 83 ## 1920 ## University of Minnesota ## Minneapolis ## Minnesota] +[150 ## Don Otten ## 208 ## 108 ## 1921 ## Bowling Green State University ## Bellefontaine ## Ohio] +[54 ## Joe Fulks* ## 196 ## 86 ## 1921 ## Murray State University ## Birmingham ## Kentucky] +[141 ## Johnny Norlander ## 190 ## 81 ## 1921 ## Hamline University ## Virginia ## Minnesota] +[213 ## Whitey Von ## 193 ## 92 ## 1921 ## nao informado ## nao informado ## nao informado] +[55 ## Bill Gabor ## 180 ## 77 ## 1922 ## Syracuse University ## nao informado ## nao informado] diff --git a/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.in b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.in new file mode 100644 index 0000000..dbaf6f9 --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.in @@ -0,0 +1,465 @@ +10 +1022 +1026 +104 +1046 +1086 +1103 +1118 +1122 +1144 +1145 +1146 +1150 +1152 +1160 +1165 +1169 +1171 +1173 +1183 +1188 +1201 +1208 +1212 +122 +1220 +1227 +1231 +1232 +1235 +1242 +1248 +1249 +1252 +1253 +1259 +1280 +1292 +1303 +1320 +1334 +1336 +1350 +1358 +1367 +1389 +1401 +141 +1415 +1417 +1435 +144 +1442 +145 +146 +1461 +1464 +1465 +1466 +1472 +1473 +15 +150 +1501 +1508 +1525 +154 +1541 +1545 +1549 +1555 +1558 +1559 +1568 +1585 +1587 +1597 +1613 +1618 +1630 +1631 +1650 +1656 +1672 +1675 +1680 +1686 +1693 +1702 +1704 +1718 +1730 +1733 +1739 +1740 +1743 +1744 +1752 +1768 +1772 +1785 +1798 +1805 +1807 +1810 +1829 +183 +1833 +1835 +1839 +1841 +1842 +1853 +1870 +1884 +1887 +1914 +1923 +1939 +1940 +1950 +1951 +1958 +1959 +1973 +1975 +1985 +1987 +1988 +1992 +1995 +2011 +2019 +2020 +2023 +2024 +2025 +204 +2040 +2046 +2047 +2052 +2056 +2067 +2069 +2075 +208 +2087 +2088 +2092 +2107 +211 +2117 +2124 +2126 +2127 +213 +2130 +2132 +2137 +2182 +2198 +220 +2203 +2204 +2210 +2215 +2216 +2227 +2246 +2261 +2275 +2297 +2312 +2317 +2323 +2326 +2327 +233 +2360 +2361 +2383 +2398 +2402 +2405 +2406 +2408 +2429 +2433 +2448 +246 +2462 +2470 +2472 +2478 +2482 +251 +2514 +2522 +2532 +2534 +2535 +2540 +2546 +255 +2559 +2564 +2569 +2576 +2582 +2586 +2589 +2596 +2600 +2603 +2617 +2619 +2621 +2623 +2628 +2631 +2636 +264 +2643 +2653 +2654 +2655 +2663 +267 +2675 +2682 +2683 +2690 +2698 +2701 +2712 +2738 +2751 +2752 +2789 +2792 +280 +2809 +2813 +282 +2827 +2843 +2863 +2864 +2865 +2866 +287 +2870 +2880 +2888 +289 +2904 +291 +2914 +2916 +2921 +2930 +2933 +295 +2960 +2963 +298 +299 +2997 +3 +3000 +3010 +3029 +3045 +3060 +3067 +3078 +3079 +3084 +309 +3096 +3109 +3127 +3128 +313 +3138 +3139 +3149 +3157 +3189 +3208 +3227 +3229 +3241 +3261 +3277 +3284 +3289 +3299 +33 +3308 +3313 +3315 +3325 +3330 +3331 +3346 +3355 +3358 +3368 +3370 +3374 +3376 +3387 +3394 +3397 +34 +3403 +3420 +3427 +3439 +345 +3474 +3475 +3477 +3494 +3501 +3516 +3520 +3525 +3548 +3559 +3582 +3586 +3588 +3595 +3620 +3628 +3629 +3638 +3639 +3643 +3644 +3659 +3664 +3667 +3671 +3682 +3698 +370 +3719 +3728 +3729 +3734 +3744 +3745 +3746 +3757 +3778 +3780 +3783 +3787 +3789 +3795 +3814 +3821 +3826 +3829 +3834 +3838 +3844 +3850 +3851 +3862 +3877 +3896 +39 +395 +403 +419 +430 +439 +444 +46 +462 +467 +471 +479 +483 +496 +511 +539 +54 +545 +55 +558 +563 +566 +575 +587 +588 +590 +593 +599 +60 +602 +605 +610 +618 +630 +634 +640 +65 +651 +665 +672 +68 +683 +686 +7 +713 +717 +726 +738 +749 +760 +769 +772 +775 +787 +788 +79 +797 +805 +806 +808 +826 +831 +833 +845 +868 +874 +88 +886 +889 +89 +892 +90 +902 +910 +919 +921 +936 +94 +947 +953 +954 +966 +969 +975 +980 +982 +984 +FIM + diff --git a/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.out b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.out new file mode 100644 index 0000000..0c625fa --- /dev/null +++ b/tps/gabaritos/tp02/TP02Q16 - Ordenação PARCIAL por Inserção em C/pub.out @@ -0,0 +1,10 @@ +[683 ## Matt Guokas ## 190 ## 88 ## 1915 ## Saint Joseph's University ## nao informado ## nao informado] +[90 ## Buddy Jeannette* ## 180 ## 79 ## 1917 ## Washington & Jefferson College ## New Kensington ## Pennsylvania] +[3420 ## Armon Johnson ## 196 ## 107 ## 1920 ## Bemidji State University ## Gonvick ## Minnesota] +[39 ## Bob Davies* ## 185 ## 79 ## 1920 ## Seton Hall University ## Harrisburg ## Pennsylvania] +[89 ## Tony Jaros ## 190 ## 83 ## 1920 ## University of Minnesota ## Minneapolis ## Minnesota] +[150 ## Don Otten ## 208 ## 108 ## 1921 ## Bowling Green State University ## Bellefontaine ## Ohio] +[54 ## Joe Fulks* ## 196 ## 86 ## 1921 ## Murray State University ## Birmingham ## Kentucky] +[141 ## Johnny Norlander ## 190 ## 81 ## 1921 ## Hamline University ## Virginia ## Minnesota] +[213 ## Whitey Von ## 193 ## 92 ## 1921 ## nao informado ## nao informado ## nao informado] +[55 ## Bill Gabor ## 180 ## 77 ## 1922 ## Syracuse University ## nao informado ## nao informado]