From 25c07b185859a2fa4bb6af6f342c0aa420d6ce01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Th=C3=A9o=20LUDWIG?= Date: Mon, 21 Aug 2023 23:11:33 +0200 Subject: [PATCH] feat(solutions): add `single-number/c/function` --- .../solutions/c/function/solution.c | 18 ++++++------- .../solutions/c/function/README.md | 3 +++ .../solutions/c/function/solution.c | 25 +++++++++++++++++++ 3 files changed, 37 insertions(+), 9 deletions(-) create mode 100644 challenges/single-number/solutions/c/function/README.md create mode 100644 challenges/single-number/solutions/c/function/solution.c diff --git a/challenges/find-outlier-number/solutions/c/function/solution.c b/challenges/find-outlier-number/solutions/c/function/solution.c index ff289ba..b06f197 100644 --- a/challenges/find-outlier-number/solutions/c/function/solution.c +++ b/challenges/find-outlier-number/solutions/c/function/solution.c @@ -6,13 +6,13 @@ bool is_odd(int number) { return number % 2 == 1; } -int find_outlier_number(int* numbers, size_t length) { +int find_outlier_number(int* numbers, size_t numbers_size) { int outlier_number; - int* odd_numbers = malloc(length * sizeof(int)); - int* even_numbers = malloc(length * sizeof(int)); + int* odd_numbers = malloc(numbers_size * sizeof(int)); + int* even_numbers = malloc(numbers_size * sizeof(int)); size_t odd_length = 0; size_t even_length = 0; - for (size_t index = 0; index < length; index++) { + for (size_t index = 0; index < numbers_size; index++) { if (is_odd(numbers[index])) { odd_numbers[odd_length] = numbers[index]; odd_length++; @@ -32,16 +32,16 @@ int find_outlier_number(int* numbers, size_t length) { } int main() { - size_t length = 0; + size_t numbers_size = 0; int number; int* numbers = malloc(sizeof(int)); do { scanf("%d", &number); - numbers = realloc(numbers, sizeof(int) * (length + 1)); - numbers[length] = number; - length++; + numbers = realloc(numbers, sizeof(int) * (numbers_size + 1)); + numbers[numbers_size] = number; + numbers_size++; } while (fgetc(stdin) != EOF); - printf("%d\n", find_outlier_number(numbers, length)); + printf("%d\n", find_outlier_number(numbers, numbers_size)); free(numbers); return EXIT_SUCCESS; } diff --git a/challenges/single-number/solutions/c/function/README.md b/challenges/single-number/solutions/c/function/README.md new file mode 100644 index 0000000..8e236af --- /dev/null +++ b/challenges/single-number/solutions/c/function/README.md @@ -0,0 +1,3 @@ +# single-number/c/function + +Created by [@theoludwig](https://github.com/theoludwig) on 21 August 2023. diff --git a/challenges/single-number/solutions/c/function/solution.c b/challenges/single-number/solutions/c/function/solution.c new file mode 100644 index 0000000..1d890f9 --- /dev/null +++ b/challenges/single-number/solutions/c/function/solution.c @@ -0,0 +1,25 @@ +#include +#include + +int single_number(int* numbers, size_t numbers_size) { + int result = numbers[0]; + for (size_t index = 1; index < numbers_size; index++) { + result = result ^ numbers[index]; + } + return result; +} + +int main() { + size_t numbers_size = 0; + int number; + int* numbers = malloc(sizeof(int)); + do { + scanf("%d", &number); + numbers = realloc(numbers, sizeof(int) * (numbers_size + 1)); + numbers[numbers_size] = number; + numbers_size++; + } while (fgetc(stdin) != EOF); + printf("%d\n", single_number(numbers, numbers_size)); + free(numbers); + return EXIT_SUCCESS; +}