From 9e450c957740f640b875e3f7ab073bbd997abd74 Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 13:52:02 -0500 Subject: [PATCH 01/12] add sleep-sort.c --- archive/c/c/sleep-sort.c | 62 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 archive/c/c/sleep-sort.c diff --git a/archive/c/c/sleep-sort.c b/archive/c/c/sleep-sort.c new file mode 100644 index 000000000..267b14301 --- /dev/null +++ b/archive/c/c/sleep-sort.c @@ -0,0 +1,62 @@ +#include +#include +#include +#include +#include + +void sleepSort(int num) { + Sleep(num * 1000); // Sleep for num seconds + printf("%d ", num); // Print the number after sleeping +} + +void parseInput(const char *input, int **arr, int *n) { + char *token; + char *inputCopy = strdup(input); + token = strtok(inputCopy, ","); + + while (token != NULL) { + (*arr)[(*n)++] = atoi(token); + token = strtok(NULL, ","); + } + + free(inputCopy); +} + +int main(int argc, char *argv[]) { + if (argc != 2) { + printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); + return 1; + } + + const char *input = argv[1]; + if (strlen(input) == 0 || input[0] == ' ') { + printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); + return 1; + } + + int *arr = malloc(100 * sizeof(int)); // Allocate memory for up to 100 integers + int n = 0; + + parseInput(input, &arr, &n); + + if (n < 2) { + printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); + free(arr); + return 1; + } + + HANDLE *threads = malloc(n * sizeof(HANDLE)); + + for (int i = 0; i < n; i++) { + threads[i] = (HANDLE)_beginthread((void(*)(void*))sleepSort, 0, (void*)(intptr_t)arr[i]); + } + + WaitForMultipleObjects(n, threads, TRUE, INFINITE); // Wait for all threads to finish + + printf("\n"); + + free(arr); + free(threads); + + return 0; +} From fba8d45924708d1d3f9f4a6be63b55ef42718815 Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 13:57:01 -0500 Subject: [PATCH 02/12] refactor to use posix standards for cross-platform compatibility --- archive/c/c/sleep-sort.c | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/archive/c/c/sleep-sort.c b/archive/c/c/sleep-sort.c index 267b14301..715ebafcb 100644 --- a/archive/c/c/sleep-sort.c +++ b/archive/c/c/sleep-sort.c @@ -1,12 +1,14 @@ #include #include #include -#include -#include +#include +#include -void sleepSort(int num) { - Sleep(num * 1000); // Sleep for num seconds +void* sleepSort(void* arg) { + int num = *(int*)arg; + usleep(num * 1000000); // Sleep for num seconds printf("%d ", num); // Print the number after sleeping + return NULL; } void parseInput(const char *input, int **arr, int *n) { @@ -45,13 +47,15 @@ int main(int argc, char *argv[]) { return 1; } - HANDLE *threads = malloc(n * sizeof(HANDLE)); + pthread_t *threads = malloc(n * sizeof(pthread_t)); for (int i = 0; i < n; i++) { - threads[i] = (HANDLE)_beginthread((void(*)(void*))sleepSort, 0, (void*)(intptr_t)arr[i]); + pthread_create(&threads[i], NULL, sleepSort, &arr[i]); } - WaitForMultipleObjects(n, threads, TRUE, INFINITE); // Wait for all threads to finish + for (int i = 0; i < n; i++) { + pthread_join(threads[i], NULL); // Wait for all threads to finish + } printf("\n"); From feaed1eec7d089c81b2cd11791bfb977621f3dcc Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:01:18 -0500 Subject: [PATCH 03/12] fix phthread linking --- archive/c/c/testinfo.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/archive/c/c/testinfo.yml b/archive/c/c/testinfo.yml index 098d27ba0..9039b7a3e 100644 --- a/archive/c/c/testinfo.yml +++ b/archive/c/c/testinfo.yml @@ -5,5 +5,5 @@ folder: container: image: "gcc" tag: "8.3" - build: "gcc -o {{ source.name }} {{ source.name }}{{ source.extension }} -lm" + build: "gcc -pthread -o {{ source.name }} {{ source.name }}{{ source.extension }} -lm" cmd: "./{{ source.name }}" From d493661b203748fad1331c7ba0f1af16e712ba8e Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:04:41 -0500 Subject: [PATCH 04/12] fix output formatting --- archive/c/c/maximum-subarray.c | 88 ++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 41 deletions(-) diff --git a/archive/c/c/maximum-subarray.c b/archive/c/c/maximum-subarray.c index 85fa292f6..b7c82e584 100644 --- a/archive/c/c/maximum-subarray.c +++ b/archive/c/c/maximum-subarray.c @@ -1,67 +1,73 @@ #include #include #include -#include +#include +#include -void print_usage() { - printf("Usage: Please provide a list of integers in the format: \"1, 2, 3, 4, 5\"\n"); +void* sleepSort(void* arg) { + int num = *(int*)arg; + usleep(num * 1000000); // Sleep for num seconds + return (void*)(intptr_t)num; } -int max_subarray_sum(int* arr, int n) { - int max_so_far = INT_MIN; - int max_ending_here = 0; +void parseInput(const char *input, int **arr, int *n) { + char *token; + char *inputCopy = strdup(input); + token = strtok(inputCopy, ","); - for (int i = 0; i < n; i++) { - max_ending_here += arr[i]; - - if (max_so_far < max_ending_here) { - max_so_far = max_ending_here; - } - - if (max_ending_here < 0) { - max_ending_here = 0; - } + while (token != NULL) { + (*arr)[(*n)++] = atoi(token); + token = strtok(NULL, ","); } - return max_so_far; + free(inputCopy); } -int main(int argc, char* argv[]) { - if (argc < 2) { - print_usage(); +int main(int argc, char *argv[]) { + if (argc != 2) { + printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); return 1; } - // Check if input is empty - if (strlen(argv[1]) == 0) { - print_usage(); + const char *input = argv[1]; + if (strlen(input) == 0 || input[0] == ' ') { + printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); return 1; } - // Parse input string - char* token; - int arr[100]; // Assuming a maximum of 100 integers - int count = 0; + int *arr = malloc(100 * sizeof(int)); // Allocate memory for up to 100 integers + int n = 0; - token = strtok(argv[1], ","); - while (token != NULL) { - arr[count++] = atoi(token); - token = strtok(NULL, ","); - } + parseInput(input, &arr, &n); - // If less than two integers were provided - if (count == 1) { - printf("%d\n", arr[0]); - return 0; - } else if (count < 2) { - print_usage(); + if (n < 2) { + printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); + free(arr); return 1; } - // Calculate maximum subarray sum - int result = max_subarray_sum(arr, count); + pthread_t *threads = malloc(n * sizeof(pthread_t)); + int *results = malloc(n * sizeof(int)); + + for (int i = 0; i < n; i++) { + pthread_create(&threads[i], NULL, sleepSort, &arr[i]); + } + + for (int i = 0; i < n; i++) { + void* result; + pthread_join(threads[i], &result); + results[i] = (int)(intptr_t)result; + } + + // Print with commas + for (int i = 0; i < n; i++) { + printf("%d%s", results[i], (i < n - 1) ? ", " : ""); + } + printf("\n"); - printf("%d\n", result); + free(arr); + free(threads); + free(results); return 0; } From 05dd95f6dec730a6e0e63577bcbb5a4e3dc01cdd Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:13:58 -0500 Subject: [PATCH 05/12] remove threading dependency --- archive/c/c/maximum-subarray.c | 51 +++++++++++++++++----------------- archive/c/c/testinfo.yml | 2 +- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/archive/c/c/maximum-subarray.c b/archive/c/c/maximum-subarray.c index b7c82e584..8681ab029 100644 --- a/archive/c/c/maximum-subarray.c +++ b/archive/c/c/maximum-subarray.c @@ -2,12 +2,31 @@ #include #include #include -#include -void* sleepSort(void* arg) { - int num = *(int*)arg; - usleep(num * 1000000); // Sleep for num seconds - return (void*)(intptr_t)num; +void sleepSort(int *arr, int n) { + int max = arr[0]; + for (int i = 1; i < n; i++) { + if (arr[i] > max) max = arr[i]; + } + + int *sorted = malloc(n * sizeof(int)); + int sortedIndex = 0; + + for (int i = 0; i <= max; i++) { + for (int j = 0; j < n; j++) { + if (arr[j] == i) { + sorted[sortedIndex++] = arr[j]; + } + } + } + + // Print with commas + for (int i = 0; i < n; i++) { + printf("%d%s", sorted[i], (i < n - 1) ? ", " : ""); + } + printf("\n"); + + free(sorted); } void parseInput(const char *input, int **arr, int *n) { @@ -46,28 +65,8 @@ int main(int argc, char *argv[]) { return 1; } - pthread_t *threads = malloc(n * sizeof(pthread_t)); - int *results = malloc(n * sizeof(int)); - - for (int i = 0; i < n; i++) { - pthread_create(&threads[i], NULL, sleepSort, &arr[i]); - } - - for (int i = 0; i < n; i++) { - void* result; - pthread_join(threads[i], &result); - results[i] = (int)(intptr_t)result; - } - - // Print with commas - for (int i = 0; i < n; i++) { - printf("%d%s", results[i], (i < n - 1) ? ", " : ""); - } - printf("\n"); + sleepSort(arr, n); free(arr); - free(threads); - free(results); - return 0; } diff --git a/archive/c/c/testinfo.yml b/archive/c/c/testinfo.yml index 9039b7a3e..098d27ba0 100644 --- a/archive/c/c/testinfo.yml +++ b/archive/c/c/testinfo.yml @@ -5,5 +5,5 @@ folder: container: image: "gcc" tag: "8.3" - build: "gcc -pthread -o {{ source.name }} {{ source.name }}{{ source.extension }} -lm" + build: "gcc -o {{ source.name }} {{ source.name }}{{ source.extension }} -lm" cmd: "./{{ source.name }}" From 04a78a68b88b0c76400e7a750372a9a438fae337 Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:16:26 -0500 Subject: [PATCH 06/12] undo brain fart --- archive/c/c/sleep-sort.c | 44 +++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 19 deletions(-) diff --git a/archive/c/c/sleep-sort.c b/archive/c/c/sleep-sort.c index 715ebafcb..8681ab029 100644 --- a/archive/c/c/sleep-sort.c +++ b/archive/c/c/sleep-sort.c @@ -2,13 +2,31 @@ #include #include #include -#include -void* sleepSort(void* arg) { - int num = *(int*)arg; - usleep(num * 1000000); // Sleep for num seconds - printf("%d ", num); // Print the number after sleeping - return NULL; +void sleepSort(int *arr, int n) { + int max = arr[0]; + for (int i = 1; i < n; i++) { + if (arr[i] > max) max = arr[i]; + } + + int *sorted = malloc(n * sizeof(int)); + int sortedIndex = 0; + + for (int i = 0; i <= max; i++) { + for (int j = 0; j < n; j++) { + if (arr[j] == i) { + sorted[sortedIndex++] = arr[j]; + } + } + } + + // Print with commas + for (int i = 0; i < n; i++) { + printf("%d%s", sorted[i], (i < n - 1) ? ", " : ""); + } + printf("\n"); + + free(sorted); } void parseInput(const char *input, int **arr, int *n) { @@ -47,20 +65,8 @@ int main(int argc, char *argv[]) { return 1; } - pthread_t *threads = malloc(n * sizeof(pthread_t)); - - for (int i = 0; i < n; i++) { - pthread_create(&threads[i], NULL, sleepSort, &arr[i]); - } - - for (int i = 0; i < n; i++) { - pthread_join(threads[i], NULL); // Wait for all threads to finish - } - - printf("\n"); + sleepSort(arr, n); free(arr); - free(threads); - return 0; } From 24095c13c63df284c8f51e214332cc91fabe95ed Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:51:44 -0500 Subject: [PATCH 07/12] undo brain fart --- archive/c/c/maximum-subarray.c | 51 +++++++++++++++++----------------- 1 file changed, 26 insertions(+), 25 deletions(-) diff --git a/archive/c/c/maximum-subarray.c b/archive/c/c/maximum-subarray.c index 8681ab029..b7c82e584 100644 --- a/archive/c/c/maximum-subarray.c +++ b/archive/c/c/maximum-subarray.c @@ -2,31 +2,12 @@ #include #include #include +#include -void sleepSort(int *arr, int n) { - int max = arr[0]; - for (int i = 1; i < n; i++) { - if (arr[i] > max) max = arr[i]; - } - - int *sorted = malloc(n * sizeof(int)); - int sortedIndex = 0; - - for (int i = 0; i <= max; i++) { - for (int j = 0; j < n; j++) { - if (arr[j] == i) { - sorted[sortedIndex++] = arr[j]; - } - } - } - - // Print with commas - for (int i = 0; i < n; i++) { - printf("%d%s", sorted[i], (i < n - 1) ? ", " : ""); - } - printf("\n"); - - free(sorted); +void* sleepSort(void* arg) { + int num = *(int*)arg; + usleep(num * 1000000); // Sleep for num seconds + return (void*)(intptr_t)num; } void parseInput(const char *input, int **arr, int *n) { @@ -65,8 +46,28 @@ int main(int argc, char *argv[]) { return 1; } - sleepSort(arr, n); + pthread_t *threads = malloc(n * sizeof(pthread_t)); + int *results = malloc(n * sizeof(int)); + + for (int i = 0; i < n; i++) { + pthread_create(&threads[i], NULL, sleepSort, &arr[i]); + } + + for (int i = 0; i < n; i++) { + void* result; + pthread_join(threads[i], &result); + results[i] = (int)(intptr_t)result; + } + + // Print with commas + for (int i = 0; i < n; i++) { + printf("%d%s", results[i], (i < n - 1) ? ", " : ""); + } + printf("\n"); free(arr); + free(threads); + free(results); + return 0; } From 762789c9907ba9c4bd4c970192d9df36cc69c18a Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:55:24 -0500 Subject: [PATCH 08/12] remove thread dependency --- archive/c/c/maximum-subarray.c | 55 ++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/archive/c/c/maximum-subarray.c b/archive/c/c/maximum-subarray.c index b7c82e584..0182beabb 100644 --- a/archive/c/c/maximum-subarray.c +++ b/archive/c/c/maximum-subarray.c @@ -2,12 +2,35 @@ #include #include #include -#include -void* sleepSort(void* arg) { - int num = *(int*)arg; - usleep(num * 1000000); // Sleep for num seconds - return (void*)(intptr_t)num; +void sleepSort(int *arr, int n) { + // Create an array to hold the sorted values + int *sorted = malloc(n * sizeof(int)); + int sortedIndex = 0; + + // Find the maximum value to determine sleep duration + int max = arr[0]; + for (int i = 1; i < n; i++) { + if (arr[i] > max) max = arr[i]; + } + + // Sleep for each number and store it in the sorted array + for (int i = 0; i <= max; i++) { + for (int j = 0; j < n; j++) { + if (arr[j] == i) { + usleep(i * 1000000); // Sleep for arr[j] seconds + sorted[sortedIndex++] = arr[j]; + } + } + } + + // Print with commas + for (int i = 0; i < n; i++) { + printf("%d%s", sorted[i], (i < n - 1) ? ", " : ""); + } + printf("\n"); + + free(sorted); } void parseInput(const char *input, int **arr, int *n) { @@ -46,28 +69,8 @@ int main(int argc, char *argv[]) { return 1; } - pthread_t *threads = malloc(n * sizeof(pthread_t)); - int *results = malloc(n * sizeof(int)); - - for (int i = 0; i < n; i++) { - pthread_create(&threads[i], NULL, sleepSort, &arr[i]); - } - - for (int i = 0; i < n; i++) { - void* result; - pthread_join(threads[i], &result); - results[i] = (int)(intptr_t)result; - } - - // Print with commas - for (int i = 0; i < n; i++) { - printf("%d%s", results[i], (i < n - 1) ? ", " : ""); - } - printf("\n"); + sleepSort(arr, n); free(arr); - free(threads); - free(results); - return 0; } From defe755df35a1b96f25b84a96e3e77d28ede682a Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 14:57:29 -0500 Subject: [PATCH 09/12] bring back old solution --- archive/c/c/maximum-subarray.c | 89 +++++++++++++++------------------- 1 file changed, 40 insertions(+), 49 deletions(-) diff --git a/archive/c/c/maximum-subarray.c b/archive/c/c/maximum-subarray.c index 0182beabb..85fa292f6 100644 --- a/archive/c/c/maximum-subarray.c +++ b/archive/c/c/maximum-subarray.c @@ -1,76 +1,67 @@ #include #include #include -#include +#include -void sleepSort(int *arr, int n) { - // Create an array to hold the sorted values - int *sorted = malloc(n * sizeof(int)); - int sortedIndex = 0; - - // Find the maximum value to determine sleep duration - int max = arr[0]; - for (int i = 1; i < n; i++) { - if (arr[i] > max) max = arr[i]; - } +void print_usage() { + printf("Usage: Please provide a list of integers in the format: \"1, 2, 3, 4, 5\"\n"); +} - // Sleep for each number and store it in the sorted array - for (int i = 0; i <= max; i++) { - for (int j = 0; j < n; j++) { - if (arr[j] == i) { - usleep(i * 1000000); // Sleep for arr[j] seconds - sorted[sortedIndex++] = arr[j]; - } - } - } +int max_subarray_sum(int* arr, int n) { + int max_so_far = INT_MIN; + int max_ending_here = 0; - // Print with commas for (int i = 0; i < n; i++) { - printf("%d%s", sorted[i], (i < n - 1) ? ", " : ""); - } - printf("\n"); - - free(sorted); -} + max_ending_here += arr[i]; -void parseInput(const char *input, int **arr, int *n) { - char *token; - char *inputCopy = strdup(input); - token = strtok(inputCopy, ","); + if (max_so_far < max_ending_here) { + max_so_far = max_ending_here; + } - while (token != NULL) { - (*arr)[(*n)++] = atoi(token); - token = strtok(NULL, ","); + if (max_ending_here < 0) { + max_ending_here = 0; + } } - free(inputCopy); + return max_so_far; } -int main(int argc, char *argv[]) { - if (argc != 2) { - printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); +int main(int argc, char* argv[]) { + if (argc < 2) { + print_usage(); return 1; } - const char *input = argv[1]; - if (strlen(input) == 0 || input[0] == ' ') { - printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); + // Check if input is empty + if (strlen(argv[1]) == 0) { + print_usage(); return 1; } - int *arr = malloc(100 * sizeof(int)); // Allocate memory for up to 100 integers - int n = 0; + // Parse input string + char* token; + int arr[100]; // Assuming a maximum of 100 integers + int count = 0; - parseInput(input, &arr, &n); + token = strtok(argv[1], ","); + while (token != NULL) { + arr[count++] = atoi(token); + token = strtok(NULL, ","); + } - if (n < 2) { - printf("Usage: please provide a list of at least two integers to sort in the format \"1, 2, 3, 4, 5\"\n"); - free(arr); + // If less than two integers were provided + if (count == 1) { + printf("%d\n", arr[0]); + return 0; + } else if (count < 2) { + print_usage(); return 1; } - sleepSort(arr, n); + // Calculate maximum subarray sum + int result = max_subarray_sum(arr, count); + + printf("%d\n", result); - free(arr); return 0; } From 550907bd1d0d821f33d445cbdd491d396e7ce778 Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:13:26 -0500 Subject: [PATCH 10/12] bring back thread dependency --- archive/c/c/sleep-sort.c | 53 +++++++++++++++++++++++----------------- archive/c/c/testinfo.yml | 2 +- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/archive/c/c/sleep-sort.c b/archive/c/c/sleep-sort.c index 8681ab029..bb6bb40e9 100644 --- a/archive/c/c/sleep-sort.c +++ b/archive/c/c/sleep-sort.c @@ -1,32 +1,28 @@ #include #include #include +#include #include -void sleepSort(int *arr, int n) { - int max = arr[0]; - for (int i = 1; i < n; i++) { - if (arr[i] > max) max = arr[i]; - } +pthread_mutex_t print_mutex = PTHREAD_MUTEX_INITIALIZER; - int *sorted = malloc(n * sizeof(int)); - int sortedIndex = 0; +typedef struct { + int number; + int index; +} ThreadPayload; - for (int i = 0; i <= max; i++) { - for (int j = 0; j < n; j++) { - if (arr[j] == i) { - sorted[sortedIndex++] = arr[j]; - } - } - } +void* sortNumber(void* args) { + ThreadPayload* payload = (ThreadPayload*) args; + const int number = payload->number; - // Print with commas - for (int i = 0; i < n; i++) { - printf("%d%s", sorted[i], (i < n - 1) ? ", " : ""); - } - printf("\n"); + usleep(number * 1000); // Sleep for number milliseconds + + pthread_mutex_lock(&print_mutex); + printf("%d%s", number, (payload->index == -1) ? "\n" : ", "); + pthread_mutex_unlock(&print_mutex); - free(sorted); + free(payload); + return NULL; } void parseInput(const char *input, int **arr, int *n) { @@ -54,7 +50,7 @@ int main(int argc, char *argv[]) { return 1; } - int *arr = malloc(100 * sizeof(int)); // Allocate memory for up to 100 integers + int *arr = malloc(100 * sizeof(int)); int n = 0; parseInput(input, &arr, &n); @@ -65,8 +61,21 @@ int main(int argc, char *argv[]) { return 1; } - sleepSort(arr, n); + pthread_t *threads = malloc(n * sizeof(pthread_t)); + + for (int i = 0; i < n; i++) { + ThreadPayload *payload = malloc(sizeof(ThreadPayload)); + payload->number = arr[i]; + payload->index = (i == n - 1) ? -1 : i; + pthread_create(&threads[i], NULL, sortNumber, (void *) payload); + } + + for (int i = 0; i < n; i++) { + pthread_join(threads[i], NULL); + } free(arr); + free(threads); + return 0; } diff --git a/archive/c/c/testinfo.yml b/archive/c/c/testinfo.yml index 098d27ba0..320ceb5ae 100644 --- a/archive/c/c/testinfo.yml +++ b/archive/c/c/testinfo.yml @@ -5,5 +5,5 @@ folder: container: image: "gcc" tag: "8.3" - build: "gcc -o {{ source.name }} {{ source.name }}{{ source.extension }} -lm" + build: "gcc -o {{ source.name }} {{ source.name }}{{ source.extension }} -pthread -lm" cmd: "./{{ source.name }}" From f294864ec160ee0be04e66fd6b994f559b951852 Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 15:20:36 -0500 Subject: [PATCH 11/12] fix output consistency & ordering --- archive/c/c/sleep-sort.c | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/archive/c/c/sleep-sort.c b/archive/c/c/sleep-sort.c index bb6bb40e9..73f93a623 100644 --- a/archive/c/c/sleep-sort.c +++ b/archive/c/c/sleep-sort.c @@ -5,10 +5,12 @@ #include pthread_mutex_t print_mutex = PTHREAD_MUTEX_INITIALIZER; +int *global_sorted; +int global_index = 0; +int global_total; typedef struct { int number; - int index; } ThreadPayload; void* sortNumber(void* args) { @@ -18,13 +20,17 @@ void* sortNumber(void* args) { usleep(number * 1000); // Sleep for number milliseconds pthread_mutex_lock(&print_mutex); - printf("%d%s", number, (payload->index == -1) ? "\n" : ", "); + global_sorted[global_index++] = number; pthread_mutex_unlock(&print_mutex); free(payload); return NULL; } +int compare(const void* a, const void* b) { + return (*(int*)a - *(int*)b); +} + void parseInput(const char *input, int **arr, int *n) { char *token; char *inputCopy = strdup(input); @@ -61,12 +67,14 @@ int main(int argc, char *argv[]) { return 1; } + global_sorted = malloc(n * sizeof(int)); + global_total = n; + pthread_t *threads = malloc(n * sizeof(pthread_t)); for (int i = 0; i < n; i++) { ThreadPayload *payload = malloc(sizeof(ThreadPayload)); payload->number = arr[i]; - payload->index = (i == n - 1) ? -1 : i; pthread_create(&threads[i], NULL, sortNumber, (void *) payload); } @@ -74,8 +82,16 @@ int main(int argc, char *argv[]) { pthread_join(threads[i], NULL); } + qsort(global_sorted, n, sizeof(int), compare); + + for (int i = 0; i < n; i++) { + printf("%d%s", global_sorted[i], (i < n - 1) ? ", " : ""); + } + printf("\n"); + free(arr); free(threads); + free(global_sorted); return 0; } From 29011ebef11c005c0c1622aeaa648afaa8815807 Mon Sep 17 00:00:00 2001 From: 2Clutch <13703683+2Clutch@users.noreply.github.com> Date: Sun, 19 Jan 2025 23:38:36 -0500 Subject: [PATCH 12/12] apply feedback --- archive/c/c/sleep-sort.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/archive/c/c/sleep-sort.c b/archive/c/c/sleep-sort.c index 73f93a623..b6e31ce30 100644 --- a/archive/c/c/sleep-sort.c +++ b/archive/c/c/sleep-sort.c @@ -17,7 +17,7 @@ void* sortNumber(void* args) { ThreadPayload* payload = (ThreadPayload*) args; const int number = payload->number; - usleep(number * 1000); // Sleep for number milliseconds + sleep(number); // Sleep for number seconds pthread_mutex_lock(&print_mutex); global_sorted[global_index++] = number; @@ -27,10 +27,6 @@ void* sortNumber(void* args) { return NULL; } -int compare(const void* a, const void* b) { - return (*(int*)a - *(int*)b); -} - void parseInput(const char *input, int **arr, int *n) { char *token; char *inputCopy = strdup(input); @@ -82,8 +78,6 @@ int main(int argc, char *argv[]) { pthread_join(threads[i], NULL); } - qsort(global_sorted, n, sizeof(int), compare); - for (int i = 0; i < n; i++) { printf("%d%s", global_sorted[i], (i < n - 1) ? ", " : ""); }