diff --git a/highscores.txt b/highscores.txt index 4edd5a7..425930e 100644 --- a/highscores.txt +++ b/highscores.txt @@ -1 +1,2 @@ +player_name;18787 player1;3999 diff --git a/numbers.c b/numbers.c index f59d9a2..f406c20 100644 --- a/numbers.c +++ b/numbers.c @@ -16,11 +16,68 @@ // creating random numbers. unsigned int *createNumbers(unsigned int len) { + srand(time(NULL)); + unsigned int *numbers = malloc(len * sizeof(unsigned int)); //reserving memory for array + if(!numbers){ + printf("Error allocating Memory"); + return NULL; + } + + for (int i = 0; i < len; i++){ + numbers[i] = rand() % (2 * len) + 1; //creates randorm number between 1 and 2x len + if(getDuplicate(numbers, i+1)){ //We use i+1 to refer to current initialised array length + i--; //If there a douplicate has been created, i gets 1 lower therefore overwriting it in next iteration + } + } + //Creating Duplicate + unsigned int duplicationSuccess = 0; + while (duplicationSuccess == 0){ + unsigned int duplicateInitialIndex = rand()%len; //Getting random index for creating duplicate + unsigned int duplicateReplaceIndex = rand ()%len; //Index of Number replaced by duplicateInitialIndex + + if(duplicateInitialIndex == duplicateReplaceIndex) + continue; //returning process if chosen duplicate is replacing itsself + + duplicationSuccess = 1; + numbers[duplicateReplaceIndex] = numbers [duplicateInitialIndex]; + } + + + + return numbers; } // Returns only the only number in numbers which is present twice. Returns zero on errors. unsigned int getDuplicate(const unsigned int numbers[], unsigned int len) { + unsigned int *sortedNumbers = malloc(len * sizeof(unsigned int)); + if(!sortedNumbers){ + printf("Error allocating memory"); + return 0; + } + + //Creating Copy of Numbers Array + for (int i = 0; i < len; i++){ + sortedNumbers[i] = numbers[i]; + } + + unsigned int duplicate = 0; + unsigned int temp = 0; + + for (int i = 0; i < len; i++){ + for(int j = 0; j< len - 1; j++){ + if(sortedNumbers[j]> sortedNumbers[j+1]){ //Switching Elements + temp = sortedNumbers[j]; + sortedNumbers[j] = sortedNumbers[j+1]; + sortedNumbers[j+1] = temp; + } + if(sortedNumbers[j] == sortedNumbers[j+1]){ + duplicate = sortedNumbers[j]; + free(sortedNumbers); + return duplicate; + } + } + return 0; } \ No newline at end of file