Skip to content

Instantly share code, notes, and snippets.

@zer0tonin
Created August 30, 2017 12:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zer0tonin/90b7e23f794dc88ea1b5aa6e964c55d7 to your computer and use it in GitHub Desktop.
Save zer0tonin/90b7e23f794dc88ea1b5aa6e964c55d7 to your computer and use it in GitHub Desktop.
Daily programmer #329 easy
#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