Krolyxon
Commit f94f903

Branches

Refs →

trosf94f903

Initial Commit

Author
krolyxon
Date
2023-08-31 08:39 +0530
Parents
None
Commit
f94f903987b167b0bc641aeabe20c708a0cc0a6f

+210 −0

5 files changed

  1. A src/main.c +117 −0
  2. A src/sort.c +41 −0
  3. A src/sort.h +7 −0
  4. A src/utils.c +26 −0
  5. A src/utils.h +19 −0
A src/main.c View
@@ -0,0 +1,117 @@
1+#include "sort.h"
2+#include "utils.h"
3+#include <stdio.h>
4+#include <stdlib.h>
5+#include <time.h>
6+// https://texteditor.com/multiline-text-art/
7+const int EASY_SCORE_DECREMENT = 10;
8+const int MEDIUM_SCORE_DECREMENT = 20;
9+const int LOWER = 1;
10+const int UPPER = 3;
11+
12+enum Difficulty {
13+ Easy,
14+ Medium,
15+ Hard,
16+};
17+
18+int list[] = {40, 78, 94, 62, 68, 74, 56, 55, 88, 55, 59, 73,
19+ 19, 32, 81, 95, 71, 63, 15, 41, 11, 38, 86};
20+
21+int score = 100;
22+
23+void decrement_score(enum Difficulty diff);
24+enum Difficulty get_difficulty();
25+
26+int main(int argc, char *argv[]) {
27+ // Get a random number to run a random algorithm
28+ int guess;
29+ srand(time(0));
30+ int random_number = (rand() % (UPPER - LOWER + 1)) + LOWER;
31+
32+ printf(COLOR_RED);
33+ print_ascii("./assets/banner.txt");
34+ int size;
35+ enum Difficulty diff = get_difficulty();
36+ switch (diff) {
37+ case Easy:
38+ size = 5;
39+ break;
40+ case Medium:
41+ size = 10;
42+ break;
43+ case Hard:
44+ size = 23;
45+ break;
46+ }
47+
48+ printf(BAR);
49+ switch (random_number) {
50+ case 1:
51+ bubblesort(list, size);
52+ break;
53+ case 2:
54+ insertionsort(list, size);
55+ break;
56+ case 3:
57+ selectionsort(list, size);
58+ break;
59+ // case 4: radixsort(list); break;
60+ default:
61+ break;
62+ }
63+
64+ printf(BAR);
65+ printf("1. BubbleSort\n");
66+ printf("2. InsertionSort\n");
67+ printf("3. SelectionSort\n");
68+ printf("4. RadixSort\n");
69+ printf("Enter your guess: ");
70+ scanf("%d", &guess);
71+ if (guess == random_number) {
72+ printf("Congratulations!!! Your answer was right!!\n");
73+ score += 10;
74+ } else {
75+ decrement_score(diff);
76+ }
77+ printf("Score: %d\n", score);
78+ return 0;
79+}
80+
81+void decrement_score(enum Difficulty diff) {
82+ if (diff == Easy) {
83+ printf("Wrong Answer!! The score will be decremented by 10\n");
84+ score -= EASY_SCORE_DECREMENT;
85+ } else if (diff == Medium) {
86+ printf("Wrong Answer!! The score will be decremented by 20\n");
87+ score -= MEDIUM_SCORE_DECREMENT;
88+ } else {
89+ printf("Wrong Answer!! The score will be reseted to 0\n");
90+ score = 0;
91+ }
92+}
93+
94+enum Difficulty get_difficulty() {
95+ int choice;
96+ enum Difficulty difficulty;
97+ printf(COLOR_CYAN " CHOOSE DIFFICULTY\n" COLOR_OFF);
98+ printf(COLOR_RED BAR COLOR_OFF);
99+ printf("1. Easy\n");
100+ printf("2. Medium\n");
101+ printf("3. Hard\n");
102+ printf(BAR);
103+ printf("Enter difficulty: ");
104+ scanf("%d", &choice);
105+ switch (choice) {
106+ case 1:
107+ difficulty = Easy;
108+ break;
109+ case 2:
110+ difficulty = Medium;
111+ break;
112+ case 3:
113+ difficulty = Hard;
114+ break;
115+ }
116+ return difficulty;
117+}
A src/sort.c View
@@ -0,0 +1,41 @@
1+#include "utils.h"
2+#include <stdio.h>
3+void bubblesort(int a[], int n) {
4+ int comparisons = 0;
5+ for (int i = 0; i < n; i++) {
6+ for (int j = 1; j < n - i; j++) {
7+ comparisons++;
8+ if (a[j - 1] > a[j]) {
9+ swap(a, j, j - 1);
10+ }
11+ }
12+ printarr(a, n);
13+ printf("\n");
14+ }
15+}
16+
17+void selectionsort(int a[], int n) {
18+ for (int i = 0; i < n; i++) {
19+ int small = i;
20+ for (int j = i; j < n; j++) {
21+ if (a[j] < a[small]) {
22+ small = j;
23+ }
24+ }
25+ swap(a, i, small);
26+ printarr(a, n);
27+ printf("\n");
28+ }
29+}
30+
31+void insertionsort(int a[], int n) {
32+ for (int i = 1; i < n; i++) {
33+ int j = i;
34+ while (j > 0 && a[j - 1] > a[j]) {
35+ swap(a, j, j - 1);
36+ j--;
37+ }
38+ printarr(a, n);
39+ printf("\n");
40+ }
41+}
A src/sort.h View
@@ -0,0 +1,7 @@
1+#include <stdio.h>
2+#include "utils.h"
3+
4+void bubblesort(int a[], int n);
5+void selectionsort(int a[], int n);
6+void insertionsort(int a[], int n);
7+void radixsort(int a[]);
A src/utils.c View
@@ -0,0 +1,26 @@
1+#include "utils.h"
2+#include <stdio.h>
3+
4+void printarr(int a[], int n) {
5+ for (int i = 0; i < n; i++) {
6+ printf("%d ", a[i]);
7+ }
8+}
9+
10+void print_ascii(char *filename) {
11+ char read_string[MAX_LEN];
12+ FILE *fptr = NULL;
13+ if ((fptr = fopen(filename, "r")) == NULL) {
14+ fprintf(stderr, "error opening %s\n", filename);
15+ }
16+ while (fgets(read_string, sizeof(read_string), fptr) != NULL) {
17+ printf("%s", read_string);
18+ }
19+ fclose(fptr);
20+}
21+
22+void swap(int a[], int i, int j) {
23+ int tmp = a[i];
24+ a[i] = a[j];
25+ a[j] = tmp;
26+}
A src/utils.h View
@@ -0,0 +1,19 @@
1+#include <stdio.h>
2+
3+#define MAX_LEN 128
4+#define BAR "────────────────────────────────\n"
5+
6+// COLORS
7+#define COLOR_RED "\x1b[31m"
8+#define COLOR_GREEN "\x1b[32m"
9+#define COLOR_YELLOW "\x1b[33m"
10+#define COLOR_BLUE "\x1b[34m"
11+#define COLOR_MAGENTA "\x1b[35m"
12+#define COLOR_CYAN "\x1b[36m"
13+#define COLOR_RESET "\x1b[0m"
14+#define COLOR_BOLD "\e[1m"
15+#define COLOR_OFF "\e[m"
16+
17+void printarr(int a[], int n);
18+void print_ascii(char *filename);
19+void swap(int a[], int i, int j);