#include #include #include void getFlag(); int compare_ascending(const void *a, const void *b); int compare_descending(const void *a, const void *b); int main(int argc, char **argv) { char buffer[32]; int n; struct { int numbers[16]; volatile int (*comparator)(const void *, const void *); } sort_data; sort_data.comparator = compare_ascending; setbuf(stdout, NULL); // turn off output buffering printf("Welcome to *Acme, Inc.*'s number sorting service. Please enter some numbers, end with an empty line:\n"); n = 0; while (fgets(buffer, 128, stdin) != NULL) { if (buffer[0] == 'A') sort_data.comparator = compare_ascending; else if (buffer[0] == 'D') sort_data.comparator = compare_descending; else if (isdigit(buffer[0])) sort_data.numbers[n++] = atoi(buffer); else break; } printf("Sorting %d numbers...\n", n); qsort(sort_data.numbers, n, sizeof(int), sort_data.comparator); printf("Here are your sorted numbers:\n"); for (int i = 0; i < n; i++) printf("%d\n", sort_data.numbers[i]); return 0; } void getFlag() { if(getenv("TASK_NAME")) { system("python ctf.py success"); exit(0); } else { printf("Success!"); exit(0); } } int compare_ascending(const void *a, const void *b) { return *((int *)a) - *((int *)b); } int compare_descending(const void *a, const void *b) { return *((int *)b) - *((int *)a); }