From 59855803fea1d8b3a950c62b786a38fa2c097f9f Mon Sep 17 00:00:00 2001 From: Vinicius Novaes Date: Sun, 30 Oct 2022 11:59:59 -0300 Subject: [PATCH 1/3] Summation Triangle sucessful submission in C --- Codewars/C/SummationTriangle.c | 62 ++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 Codewars/C/SummationTriangle.c diff --git a/Codewars/C/SummationTriangle.c b/Codewars/C/SummationTriangle.c new file mode 100644 index 00000000..cf4a8b32 --- /dev/null +++ b/Codewars/C/SummationTriangle.c @@ -0,0 +1,62 @@ +// Problem site: https://www.codewars.com/kata/63579823d25aad000ecfad9f/ +#include +#include +#include +#include + +long long pg_approach(unsigned); + +long calculate(int j, int i) +{ + return (2 * j + i + 1) * pow(-1, 2 * j + i); +} +long brute_force(int n) +{ + n++; + int start_point = 0; + int total_sum = 0; + for (int i = 0; i < n; i++) + { + for (int j = start_point; j < n; j++) + { + int triangle_elt = calculate(i, j); + total_sum += triangle_elt; + } + start_point++; + } + return total_sum; +} +long long get_sum(unsigned n) +{ + return pg_approach(n); +} + +long long pg_approach(unsigned n) +{ + long long results[n]; + memset(results, 0, n); + results[0] = 1; + results[1] = 5; + if (n == 0) + return 1; + if (n == 1) + return -5; + unsigned current_col = 1; + long long increase_factor = 4; + while (current_col < n) + { + current_col++; + if (!(current_col % 2)) + increase_factor += 1; + else + increase_factor += 3; + results[current_col] = increase_factor + results[current_col - 1]; + } + return (current_col % 2) ? (-1) * results[current_col] : results[current_col]; +} +int main() +{ + for (int i = 0; i < 10; i++) + printf("\nteste %d:\n\tBrute force: %ld , PG: %lld", i, brute_force(i), pg_approach(i)); + return 0; +} \ No newline at end of file From ebd688103a5f6add397e1007e17b90d47a07fa93 Mon Sep 17 00:00:00 2001 From: Vinicius Novaes Date: Sun, 30 Oct 2022 22:05:02 -0300 Subject: [PATCH 2/3] Circular queue --- data_structures/C/CircularQueue.c | 114 ++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 data_structures/C/CircularQueue.c diff --git a/data_structures/C/CircularQueue.c b/data_structures/C/CircularQueue.c new file mode 100644 index 00000000..fb916458 --- /dev/null +++ b/data_structures/C/CircularQueue.c @@ -0,0 +1,114 @@ +#include +#include +#include +#include +/** + * Circular Queue implementation + */ + +struct CircularQueue +{ + long *_queue; + size_t _length; + size_t _MAX_LENGTH; + size_t _front_idx; + size_t _back_idx; +} typedef CircularQueue; + +void circ_queue_build(CircularQueue *); +int __empty_queue_error(void); +long circ_queue_front(CircularQueue *); +long circ_queue_back(CircularQueue *); +void circ_queue_push(CircularQueue *, long); +long circ_queue_pop(CircularQueue *); +int circ_queue_length(CircularQueue *); +void ___set_circ_queue_MAX_SIZE(CircularQueue *); +void circ_queue_build(CircularQueue *queue) +{ + queue->_MAX_LENGTH = SIZE_MAX; + (*queue->_queue) = (long *)calloc(queue->_MAX_LENGTH, sizeof(long)); + queue->_front_idx = queue->_back_idx = 0; + queue->_length = 0; +} + +void ___set_circ_queue_MAX_SIZE(CircularQueue *queue, long long int MAX_SIZE) +{ + queue->_MAX_LENGTH = MAX_SIZE; +} + +int __empty_queue_error() +{ + printf("Error the queue is empty: -1"); + return -1; +} + +long circ_queue_front(CircularQueue *queue) +{ + if (circ_queue_length(queue) == 0) + __empty_queue_error(); + return queue->_queue[queue->_front_idx]; +} + +long circ_queue_back(CircularQueue *queue) +{ + if (circ_queue_length(queue) == 0) + __empty_queue_error(); + return queue->_queue[queue->_back_idx - 1]; +} + +int circ_queue_length(CircularQueue *queue) +{ + return abs(queue->_front_idx - queue->_back_idx); +} + +void circ_queue_push(CircularQueue *queue, long element) +{ + queue->_queue[queue->_back_idx] = element; + queue->_back_idx++; + queue->_back_idx = queue->_back_idx % queue->_MAX_LENGTH; +} + +long circ_queue_pop(CircularQueue *queue) +{ + int element = queue->_queue[queue->_front_idx]; + queue->_front_idx++; + queue->_front_idx = queue->_front_idx % queue->_MAX_LENGTH; + return element; +} + +void circ_queue_destroy(CircularQueue *queue) +{ + free((void *)(&queue->_queue)); +} + +void ___test(long expected, long result) +{ + assert(expected == result); + printf("Expected: %ld ; Result: %ld \n", expected, result); +} + +int main() +{ + CircularQueue queue; + + circ_queue_build(&queue); // queue: + circ_queue_push(&queue, 1); // 1 + circ_queue_push(&queue, 3); // 1 3 + ___test(1, circ_queue_front(&queue)); + ___test(3, circ_queue_back(&queue)); + circ_queue_push(&queue, 4); // 1 3 4 + ___test(1, circ_queue_front(&queue)); + ___test(4, circ_queue_back(&queue)); + circ_queue_pop(&queue); // 3 4 + ___test(3, circ_queue_front(&queue)); + ___test(4, circ_queue_back(&queue)); + circ_queue_pop(&queue); // 4 + ___test(4, circ_queue_front(&queue)); + ___test(4, circ_queue_back(&queue)); + circ_queue_push(&queue, 3); + + ___test(4, circ_queue_front(&queue)); + ___test(3, circ_queue_back(&queue)); + + return 0; +} \ No newline at end of file From 37433d262d89dab803e1a7af5354278fd0bb053c Mon Sep 17 00:00:00 2001 From: Vinicius Novaes Date: Sun, 30 Oct 2022 22:06:24 -0300 Subject: [PATCH 3/3] Removiing summationTriangle file --- Codewars/C/SummationTriangle.c | 62 ---------------------------------- 1 file changed, 62 deletions(-) delete mode 100644 Codewars/C/SummationTriangle.c diff --git a/Codewars/C/SummationTriangle.c b/Codewars/C/SummationTriangle.c deleted file mode 100644 index cf4a8b32..00000000 --- a/Codewars/C/SummationTriangle.c +++ /dev/null @@ -1,62 +0,0 @@ -// Problem site: https://www.codewars.com/kata/63579823d25aad000ecfad9f/ -#include -#include -#include -#include - -long long pg_approach(unsigned); - -long calculate(int j, int i) -{ - return (2 * j + i + 1) * pow(-1, 2 * j + i); -} -long brute_force(int n) -{ - n++; - int start_point = 0; - int total_sum = 0; - for (int i = 0; i < n; i++) - { - for (int j = start_point; j < n; j++) - { - int triangle_elt = calculate(i, j); - total_sum += triangle_elt; - } - start_point++; - } - return total_sum; -} -long long get_sum(unsigned n) -{ - return pg_approach(n); -} - -long long pg_approach(unsigned n) -{ - long long results[n]; - memset(results, 0, n); - results[0] = 1; - results[1] = 5; - if (n == 0) - return 1; - if (n == 1) - return -5; - unsigned current_col = 1; - long long increase_factor = 4; - while (current_col < n) - { - current_col++; - if (!(current_col % 2)) - increase_factor += 1; - else - increase_factor += 3; - results[current_col] = increase_factor + results[current_col - 1]; - } - return (current_col % 2) ? (-1) * results[current_col] : results[current_col]; -} -int main() -{ - for (int i = 0; i < 10; i++) - printf("\nteste %d:\n\tBrute force: %ld , PG: %lld", i, brute_force(i), pg_approach(i)); - return 0; -} \ No newline at end of file