Init commit with C solution
This commit is contained in:
parent
b6b86ff22b
commit
c27059ae5e
4 changed files with 83 additions and 0 deletions
2
c_impl/.gitignore
vendored
Normal file
2
c_impl/.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
LocalMaxima
|
||||
src/*.o
|
20
c_impl/Makefile
Normal file
20
c_impl/Makefile
Normal file
|
@ -0,0 +1,20 @@
|
|||
SOURCES = src/main.c
|
||||
OBJECTS = $(subst .c,.o,$(SOURCES))
|
||||
|
||||
COMMON_FLAGS = -Wall -Wextra -Wpedantic
|
||||
ifdef DEBUG
|
||||
CFLAGS = $(COMMON_FLAGS) -O0 -g
|
||||
else
|
||||
CFLAGS = $(COMMON_FLAGS) -O3 -DNDEBUG
|
||||
endif
|
||||
|
||||
all: LocalMaxima
|
||||
|
||||
LocalMaxima: $(OBJECTS)
|
||||
$(CC) $(CFLAGS) -o LocalMaxima $^
|
||||
|
||||
.PHONY:
|
||||
|
||||
clean:
|
||||
rm -f LocalMaxima
|
||||
rm -f src/*.o
|
57
c_impl/src/main.c
Normal file
57
c_impl/src/main.c
Normal file
|
@ -0,0 +1,57 @@
|
|||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#define INPUT_INIT_SIZE 32
|
||||
|
||||
int parseInteger(int **input, size_t *input_size, size_t *input_capacity, char *argv) {
|
||||
int value = atoi(argv);
|
||||
if(value == 0 && argv[0] != '0') {
|
||||
return 1;
|
||||
}
|
||||
|
||||
if(*input_size == *input_capacity) {
|
||||
int *newBuf = malloc(sizeof(int)*(*input_capacity)*2);
|
||||
memcpy(newBuf, *input, sizeof(int)*(*input_capacity));
|
||||
free(*input);
|
||||
*input_capacity *= 2;
|
||||
*input = newBuf;
|
||||
}
|
||||
(*input)[(*input_size)++] = value;
|
||||
return 0;
|
||||
}
|
||||
|
||||
void findLocalMaxima(int *input, int size) {
|
||||
int consecutive = 0;
|
||||
for(size_t i = 1; i + 1 < size; ++i) {
|
||||
if(input[i-1] <= input[i] && input[i] >= input[i+1]) {
|
||||
if(consecutive == 0) {
|
||||
printf("%d ", input[i]);
|
||||
consecutive = 1;
|
||||
}
|
||||
} else {
|
||||
consecutive = 0;
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
int *input = (int*)malloc(sizeof(int) * INPUT_INIT_SIZE);
|
||||
size_t input_size = 0;
|
||||
size_t input_capacity = INPUT_INIT_SIZE;
|
||||
|
||||
--argc; ++argv;
|
||||
while(argc > 0) {
|
||||
if(parseInteger(&input, &input_size, &input_capacity, argv[0]) != 0) {
|
||||
free(input);
|
||||
return 1;
|
||||
}
|
||||
--argc; ++argv;
|
||||
}
|
||||
|
||||
findLocalMaxima(input, input_size);
|
||||
|
||||
free(input);
|
||||
return 0;
|
||||
}
|
4
problem
Normal file
4
problem
Normal file
|
@ -0,0 +1,4 @@
|
|||
Write a program that finds the local maxima of a list of integers.
|
||||
|
||||
A local maxima in a list is a number that is greater than or equal to adjacent
|
||||
numbers.
|
Loading…
Reference in a new issue