commit f94f903987b167b0bc641aeabe20c708a0cc0a6f Author: krolyxon Date: Thu Aug 31 08:39:20 2023 +0530 Initial Commit diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..4e6d57a --- /dev/null +++ b/src/main.c @@ -0,0 +1,117 @@ +#include "sort.h" +#include "utils.h" +#include +#include +#include +// https://texteditor.com/multiline-text-art/ +const int EASY_SCORE_DECREMENT = 10; +const int MEDIUM_SCORE_DECREMENT = 20; +const int LOWER = 1; +const int UPPER = 3; + +enum Difficulty { + Easy, + Medium, + Hard, +}; + +int list[] = {40, 78, 94, 62, 68, 74, 56, 55, 88, 55, 59, 73, + 19, 32, 81, 95, 71, 63, 15, 41, 11, 38, 86}; + +int score = 100; + +void decrement_score(enum Difficulty diff); +enum Difficulty get_difficulty(); + +int main(int argc, char *argv[]) { + // Get a random number to run a random algorithm + int guess; + srand(time(0)); + int random_number = (rand() % (UPPER - LOWER + 1)) + LOWER; + + printf(COLOR_RED); + print_ascii("./assets/banner.txt"); + int size; + enum Difficulty diff = get_difficulty(); + switch (diff) { + case Easy: + size = 5; + break; + case Medium: + size = 10; + break; + case Hard: + size = 23; + break; + } + + printf(BAR); + switch (random_number) { + case 1: + bubblesort(list, size); + break; + case 2: + insertionsort(list, size); + break; + case 3: + selectionsort(list, size); + break; + // case 4: radixsort(list); break; + default: + break; + } + + printf(BAR); + printf("1. BubbleSort\n"); + printf("2. InsertionSort\n"); + printf("3. SelectionSort\n"); + printf("4. RadixSort\n"); + printf("Enter your guess: "); + scanf("%d", &guess); + if (guess == random_number) { + printf("Congratulations!!! Your answer was right!!\n"); + score += 10; + } else { + decrement_score(diff); + } + printf("Score: %d\n", score); + return 0; +} + +void decrement_score(enum Difficulty diff) { + if (diff == Easy) { + printf("Wrong Answer!! The score will be decremented by 10\n"); + score -= EASY_SCORE_DECREMENT; + } else if (diff == Medium) { + printf("Wrong Answer!! The score will be decremented by 20\n"); + score -= MEDIUM_SCORE_DECREMENT; + } else { + printf("Wrong Answer!! The score will be reseted to 0\n"); + score = 0; + } +} + +enum Difficulty get_difficulty() { + int choice; + enum Difficulty difficulty; + printf(COLOR_CYAN " CHOOSE DIFFICULTY\n" COLOR_OFF); + printf(COLOR_RED BAR COLOR_OFF); + printf("1. Easy\n"); + printf("2. Medium\n"); + printf("3. Hard\n"); + printf(BAR); + printf("Enter difficulty: "); + scanf("%d", &choice); + switch (choice) { + case 1: + difficulty = Easy; + break; + case 2: + difficulty = Medium; + break; + case 3: + difficulty = Hard; + break; + } + return difficulty; +} diff --git a/src/sort.c b/src/sort.c new file mode 100644 index 0000000..6ea4b26 --- /dev/null +++ b/src/sort.c @@ -0,0 +1,41 @@ +#include "utils.h" +#include +void bubblesort(int a[], int n) { + int comparisons = 0; + for (int i = 0; i < n; i++) { + for (int j = 1; j < n - i; j++) { + comparisons++; + if (a[j - 1] > a[j]) { + swap(a, j, j - 1); + } + } + printarr(a, n); + printf("\n"); + } +} + +void selectionsort(int a[], int n) { + for (int i = 0; i < n; i++) { + int small = i; + for (int j = i; j < n; j++) { + if (a[j] < a[small]) { + small = j; + } + } + swap(a, i, small); + printarr(a, n); + printf("\n"); + } +} + +void insertionsort(int a[], int n) { + for (int i = 1; i < n; i++) { + int j = i; + while (j > 0 && a[j - 1] > a[j]) { + swap(a, j, j - 1); + j--; + } + printarr(a, n); + printf("\n"); + } +} diff --git a/src/sort.h b/src/sort.h new file mode 100644 index 0000000..f1ea550 --- /dev/null +++ b/src/sort.h @@ -0,0 +1,7 @@ +#include +#include "utils.h" + +void bubblesort(int a[], int n); +void selectionsort(int a[], int n); +void insertionsort(int a[], int n); +void radixsort(int a[]); diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..390aa7c --- /dev/null +++ b/src/utils.c @@ -0,0 +1,26 @@ +#include "utils.h" +#include + +void printarr(int a[], int n) { + for (int i = 0; i < n; i++) { + printf("%d ", a[i]); + } +} + +void print_ascii(char *filename) { + char read_string[MAX_LEN]; + FILE *fptr = NULL; + if ((fptr = fopen(filename, "r")) == NULL) { + fprintf(stderr, "error opening %s\n", filename); + } + while (fgets(read_string, sizeof(read_string), fptr) != NULL) { + printf("%s", read_string); + } + fclose(fptr); +} + +void swap(int a[], int i, int j) { + int tmp = a[i]; + a[i] = a[j]; + a[j] = tmp; +} diff --git a/src/utils.h b/src/utils.h new file mode 100644 index 0000000..a667b73 --- /dev/null +++ b/src/utils.h @@ -0,0 +1,19 @@ +#include + +#define MAX_LEN 128 +#define BAR "────────────────────────────────\n" + +// COLORS +#define COLOR_RED "\x1b[31m" +#define COLOR_GREEN "\x1b[32m" +#define COLOR_YELLOW "\x1b[33m" +#define COLOR_BLUE "\x1b[34m" +#define COLOR_MAGENTA "\x1b[35m" +#define COLOR_CYAN "\x1b[36m" +#define COLOR_RESET "\x1b[0m" +#define COLOR_BOLD "\e[1m" +#define COLOR_OFF "\e[m" + +void printarr(int a[], int n); +void print_ascii(char *filename); +void swap(int a[], int i, int j);