Created
August 30, 2017 12:40
-
-
Save zer0tonin/90b7e23f794dc88ea1b5aa6e964c55d7 to your computer and use it in GitHub Desktop.
Daily programmer #329 easy
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <time.h> | |
int *initializeNumbers(int size) { | |
int *numbers = malloc(sizeof(int) * size); | |
for(int i = 0; i < size; i++) { | |
numbers[i] = i + 1; | |
} | |
return numbers; | |
} | |
int *removeNumbers(int* originalNumbers, int step, int *arrayLength) { | |
int positionToRemove; | |
if (step == 0) { | |
positionToRemove = originalNumbers[1]; | |
} else { | |
positionToRemove = originalNumbers[step]; | |
} | |
int *numbers = malloc(*arrayLength * sizeof(int)); | |
int j = 0; | |
for(int i = 0; i < *arrayLength; i++) { | |
if ((i + 1) % positionToRemove != 0) { | |
numbers[j] = originalNumbers[i]; | |
j++; | |
} | |
} | |
free(originalNumbers); | |
*arrayLength = j; | |
if (step + 1 >= *arrayLength) { | |
return numbers; | |
} | |
return removeNumbers(numbers, step + 1, arrayLength); | |
} | |
void printNumbers(int *numbers, int arrayLength) { | |
for(int i = 0; i < arrayLength; i++) { | |
printf("%i\n", numbers[i]); | |
} | |
} | |
int *findClosests(int number, int *luckyNumbers, int length, int *closestCount) { | |
for (int i = 0; i < length; i++) { | |
if (luckyNumbers[i] == number) { | |
int *numbers = malloc(sizeof(int)); | |
numbers[0] = luckyNumbers[i]; | |
*closestCount = 1; | |
return numbers; | |
} | |
if (luckyNumbers[i] > number) { | |
if (i > 0) { | |
int *numbers = malloc(2 * sizeof(int)); | |
numbers[0] = luckyNumbers[i]; | |
numbers[1] = luckyNumbers[i -1]; | |
*closestCount = 2; | |
return numbers; | |
} | |
int *numbers = malloc(sizeof(int)); | |
numbers[0] = luckyNumbers[i]; | |
*closestCount = 1; | |
return numbers; | |
} | |
} | |
} | |
int main(int argc, char *argv[]) { | |
clock_t t1 = clock(); | |
int *numbers; | |
int size = 10000; | |
numbers = initializeNumbers(size); | |
numbers = removeNumbers(numbers, 0, &size); | |
clock_t t2 = clock(); | |
if (argc == 2) { | |
int searchNumber = strtol(argv[1], NULL, 10); | |
if (searchNumber > numbers[size-1]) { | |
printf("Please enter a number inferior to %i", numbers[size-1]); | |
return 1; | |
} | |
int *closestCount = malloc(sizeof(int)); | |
int *closestNumbers = findClosests(searchNumber, numbers, size, closestCount); | |
printNumbers(closestNumbers, *closestCount); | |
free(closestCount); | |
free(closestNumbers); | |
} else { | |
printNumbers(numbers, size); | |
printf("Time to calculate : %f", (double)(t2-t1) / CLOCKS_PER_SEC); | |
} | |
free(numbers); | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment