From 13ea061fcc18a5e10bff00907cf6cdd139151ffd Mon Sep 17 00:00:00 2001 From: tosu Date: Thu, 30 Mar 2023 01:56:30 +0200 Subject: [PATCH] Up until ex06 --- ex00/ft_iterative_factorial.c | 29 +++++++++++++ ex01/ft_recursive_factorial.c | 24 ++++++++++ ex02/ft_iterative_power.c | 82 +++++++++++++++++++++++++++++++++++ ex03/ft_recursive_power.c | 77 ++++++++++++++++++++++++++++++++ ex04/ft_fibonacci.c | 60 +++++++++++++++++++++++++ ex05/ft_sqrt.c | 64 +++++++++++++++++++++++++++ ex06/ft_is_prime.c | 48 ++++++++++++++++++++ ex08/ft_ten_queens_puzzle.c | 29 +++++++++++++ 8 files changed, 413 insertions(+) create mode 100644 ex00/ft_iterative_factorial.c create mode 100644 ex01/ft_recursive_factorial.c create mode 100644 ex02/ft_iterative_power.c create mode 100644 ex03/ft_recursive_power.c create mode 100644 ex04/ft_fibonacci.c create mode 100644 ex05/ft_sqrt.c create mode 100644 ex06/ft_is_prime.c create mode 100644 ex08/ft_ten_queens_puzzle.c diff --git a/ex00/ft_iterative_factorial.c b/ex00/ft_iterative_factorial.c new file mode 100644 index 0000000..95f2967 --- /dev/null +++ b/ex00/ft_iterative_factorial.c @@ -0,0 +1,29 @@ +int ft_iterative_factorial(int nb) +{ + int fact; + + if (nb < 0) + return (0); + fact = 1; + while (--nb > 0) + fact *= (nb + 1); + return (fact); +} + +#define START +#include + +int main(void) +{ + printf("-10: %d\n", ft_iterative_factorial(-10)); + printf("-1: %d\n", ft_iterative_factorial(-1)); + printf("0: %d\n", ft_iterative_factorial(0)); + printf("1: %d\n", ft_iterative_factorial(1)); + printf("2: %d\n", ft_iterative_factorial(2)); + printf("3: %d\n", ft_iterative_factorial(3)); + printf("4: %d\n", ft_iterative_factorial(4)); + printf("5: %d\n", ft_iterative_factorial(5)); + printf("10: %d\n", ft_iterative_factorial(10)); + printf("15: %d\n", ft_iterative_factorial(15)); + return (0); +} diff --git a/ex01/ft_recursive_factorial.c b/ex01/ft_recursive_factorial.c new file mode 100644 index 0000000..8988dbd --- /dev/null +++ b/ex01/ft_recursive_factorial.c @@ -0,0 +1,24 @@ +int ft_recursive_factorial(int nb) +{ + if (nb < 1) + return (nb == 0); + return (nb * ft_recursive_factorial(nb - 1)); +} + +#define START +#include + +int main(void) +{ + printf("-10: %d\n", ft_recursive_factorial(-10)); + printf("-1: %d\n", ft_recursive_factorial(-1)); + printf("0: %d\n", ft_recursive_factorial(0)); + printf("1: %d\n", ft_recursive_factorial(1)); + printf("2: %d\n", ft_recursive_factorial(2)); + printf("3: %d\n", ft_recursive_factorial(3)); + printf("4: %d\n", ft_recursive_factorial(4)); + printf("5: %d\n", ft_recursive_factorial(5)); + printf("10: %d\n", ft_recursive_factorial(10)); + printf("15: %d\n", ft_recursive_factorial(15)); + return (0); +} diff --git a/ex02/ft_iterative_power.c b/ex02/ft_iterative_power.c new file mode 100644 index 0000000..5670bfc --- /dev/null +++ b/ex02/ft_iterative_power.c @@ -0,0 +1,82 @@ +int ft_iterative_power(int nb, int power) +{ + int res; + + res = 1; + if (power < 1) + return (power == 0); + while (power--) + res *= nb; + return (res); +} + +#define START +#include + +int main(void) +{ + printf("base: <-3>, power <-2>, result: <%d>\n", ft_iterative_power(-3, -2)); + printf("base: <-2>, power <-2>, result: <%d>\n", ft_iterative_power(-2, -2)); + printf("base: <-1>, power <-2>, result: <%d>\n", ft_iterative_power(-1, -2)); + printf("base: <0>, power <-2>, result: <%d>\n", ft_iterative_power(0, -2)); + printf("base: <1>, power <-2>, result: <%d>\n", ft_iterative_power(1, -2)); + printf("base: <2>, power <-2>, result: <%d>\n", ft_iterative_power(2, -2)); + printf("base: <3>, power <-2>, result: <%d>\n", ft_iterative_power(3, -2)); + printf("\n"); + + printf("base: <-3>, power <-1>, result: <%d>\n", ft_iterative_power(-3, -1)); + printf("base: <-2>, power <-1>, result: <%d>\n", ft_iterative_power(-2, -1)); + printf("base: <-1>, power <-1>, result: <%d>\n", ft_iterative_power(-1, -1)); + printf("base: <0>, power <-1>, result: <%d>\n", ft_iterative_power(0, -1)); + printf("base: <1>, power <-1>, result: <%d>\n", ft_iterative_power(1, -1)); + printf("base: <2>, power <-1>, result: <%d>\n", ft_iterative_power(2, -1)); + printf("base: <3>, power <-1>, result: <%d>\n", ft_iterative_power(3, -1)); + printf("\n"); + + printf("base: <-3>, power: <0>, result: <%d>\n", ft_iterative_power(-3, 0)); + printf("base: <-2>, power <0>, result: <%d>\n", ft_iterative_power(-2, 0)); + printf("base: <-1>, power <0>, result: <%d>\n", ft_iterative_power(-1, 0)); + printf("base: <0>, power <0>, result: <%d>\n", ft_iterative_power(0, 0)); + printf("base: <1>, power <0>, result: <%d>\n", ft_iterative_power(1, 0)); + printf("base: <2>, power <0>, result: <%d>\n", ft_iterative_power(2, 0)); + printf("base: <3>, power <0>, result: <%d>\n", ft_iterative_power(3, 0)); + printf("\n"); + + printf("base: <-3>, power <1>, result: <%d>\n", ft_iterative_power(-3, 1)); + printf("base: <-2>, power <1>, result: <%d>\n", ft_iterative_power(-2, 1)); + printf("base: <-1>, power <1>, result: <%d>\n", ft_iterative_power(-1, 1)); + printf("base: <0>, power <1>, result: <%d>\n", ft_iterative_power(0, 1)); + printf("base: <1>, power <1>, result: <%d>\n", ft_iterative_power(1, 1)); + printf("base: <2>, power <1>, result: <%d>\n", ft_iterative_power(2, 1)); + printf("base: <3>, power <1>, result: <%d>\n", ft_iterative_power(3, 1)); + printf("\n"); + + printf("base: <-3>, power <2>, result: <%d>\n", ft_iterative_power(-3, 2)); + printf("base: <-2>, power <2>, result: <%d>\n", ft_iterative_power(-2, 2)); + printf("base: <-1>, power <2>, result: <%d>\n", ft_iterative_power(-1, 2)); + printf("base: <0>, power <2>, result: <%d>\n", ft_iterative_power(0, 2)); + printf("base: <1>, power <2>, result: <%d>\n", ft_iterative_power(1, 2)); + printf("base: <2>, power <2>, result: <%d>\n", ft_iterative_power(2, 2)); + printf("base: <3>, power <2>, result: <%d>\n", ft_iterative_power(3, 2)); + printf("\n"); + + printf("base: <-3>, power <3>, result: <%d>\n", ft_iterative_power(-3, 3)); + printf("base: <-2>, power <3>, result: <%d>\n", ft_iterative_power(-2, 3)); + printf("base: <-1>, power <3>, result: <%d>\n", ft_iterative_power(-1, 3)); + printf("base: <0>, power <3>, result: <%d>\n", ft_iterative_power(0, 3)); + printf("base: <1>, power <3>, result: <%d>\n", ft_iterative_power(1, 3)); + printf("base: <2>, power <3>, result: <%d>\n", ft_iterative_power(2, 3)); + printf("base: <3>, power <3>, result: <%d>\n", ft_iterative_power(3, 3)); + printf("\n"); + + printf("base: <-3>, power <10>, result: <%d>\n", ft_iterative_power(-3, 10)); + printf("base: <-2>, power <10>, result: <%d>\n", ft_iterative_power(-2, 10)); + printf("base: <-1>, power <10>, result: <%d>\n", ft_iterative_power(-1, 10)); + printf("base: <0>, power <10>, result: <%d>\n", ft_iterative_power(0, 10)); + printf("base: <1>, power <10>, result: <%d>\n", ft_iterative_power(1, 10)); + printf("base: <2>, power <10>, result: <%d>\n", ft_iterative_power(2, 10)); + printf("base: <3>, power <10>, result: <%d>\n", ft_iterative_power(3, 10)); + printf("\n"); + + return (0); +} diff --git a/ex03/ft_recursive_power.c b/ex03/ft_recursive_power.c new file mode 100644 index 0000000..e7929d4 --- /dev/null +++ b/ex03/ft_recursive_power.c @@ -0,0 +1,77 @@ +int ft_recursive_power(int nb, int power) +{ + if (power < 1) + return (power == 0); + return (nb * ft_recursive_power(nb, power - 1)); +} + +#define START +#include + +int main(void) +{ + printf("base: <-3>, power <-2>, result: <%d>\n", ft_recursive_power(-3, -2)); + printf("base: <-2>, power <-2>, result: <%d>\n", ft_recursive_power(-2, -2)); + printf("base: <-1>, power <-2>, result: <%d>\n", ft_recursive_power(-1, -2)); + printf("base: <0>, power <-2>, result: <%d>\n", ft_recursive_power(0, -2)); + printf("base: <1>, power <-2>, result: <%d>\n", ft_recursive_power(1, -2)); + printf("base: <2>, power <-2>, result: <%d>\n", ft_recursive_power(2, -2)); + printf("base: <3>, power <-2>, result: <%d>\n", ft_recursive_power(3, -2)); + printf("\n"); + + printf("base: <-3>, power <-1>, result: <%d>\n", ft_recursive_power(-3, -1)); + printf("base: <-2>, power <-1>, result: <%d>\n", ft_recursive_power(-2, -1)); + printf("base: <-1>, power <-1>, result: <%d>\n", ft_recursive_power(-1, -1)); + printf("base: <0>, power <-1>, result: <%d>\n", ft_recursive_power(0, -1)); + printf("base: <1>, power <-1>, result: <%d>\n", ft_recursive_power(1, -1)); + printf("base: <2>, power <-1>, result: <%d>\n", ft_recursive_power(2, -1)); + printf("base: <3>, power <-1>, result: <%d>\n", ft_recursive_power(3, -1)); + printf("\n"); + + printf("base: <-3>, power: <0>, result: <%d>\n", ft_recursive_power(-3, 0)); + printf("base: <-2>, power <0>, result: <%d>\n", ft_recursive_power(-2, 0)); + printf("base: <-1>, power <0>, result: <%d>\n", ft_recursive_power(-1, 0)); + printf("base: <0>, power <0>, result: <%d>\n", ft_recursive_power(0, 0)); + printf("base: <1>, power <0>, result: <%d>\n", ft_recursive_power(1, 0)); + printf("base: <2>, power <0>, result: <%d>\n", ft_recursive_power(2, 0)); + printf("base: <3>, power <0>, result: <%d>\n", ft_recursive_power(3, 0)); + printf("\n"); + + printf("base: <-3>, power <1>, result: <%d>\n", ft_recursive_power(-3, 1)); + printf("base: <-2>, power <1>, result: <%d>\n", ft_recursive_power(-2, 1)); + printf("base: <-1>, power <1>, result: <%d>\n", ft_recursive_power(-1, 1)); + printf("base: <0>, power <1>, result: <%d>\n", ft_recursive_power(0, 1)); + printf("base: <1>, power <1>, result: <%d>\n", ft_recursive_power(1, 1)); + printf("base: <2>, power <1>, result: <%d>\n", ft_recursive_power(2, 1)); + printf("base: <3>, power <1>, result: <%d>\n", ft_recursive_power(3, 1)); + printf("\n"); + + printf("base: <-3>, power <2>, result: <%d>\n", ft_recursive_power(-3, 2)); + printf("base: <-2>, power <2>, result: <%d>\n", ft_recursive_power(-2, 2)); + printf("base: <-1>, power <2>, result: <%d>\n", ft_recursive_power(-1, 2)); + printf("base: <0>, power <2>, result: <%d>\n", ft_recursive_power(0, 2)); + printf("base: <1>, power <2>, result: <%d>\n", ft_recursive_power(1, 2)); + printf("base: <2>, power <2>, result: <%d>\n", ft_recursive_power(2, 2)); + printf("base: <3>, power <2>, result: <%d>\n", ft_recursive_power(3, 2)); + printf("\n"); + + printf("base: <-3>, power <3>, result: <%d>\n", ft_recursive_power(-3, 3)); + printf("base: <-2>, power <3>, result: <%d>\n", ft_recursive_power(-2, 3)); + printf("base: <-1>, power <3>, result: <%d>\n", ft_recursive_power(-1, 3)); + printf("base: <0>, power <3>, result: <%d>\n", ft_recursive_power(0, 3)); + printf("base: <1>, power <3>, result: <%d>\n", ft_recursive_power(1, 3)); + printf("base: <2>, power <3>, result: <%d>\n", ft_recursive_power(2, 3)); + printf("base: <3>, power <3>, result: <%d>\n", ft_recursive_power(3, 3)); + printf("\n"); + + printf("base: <-3>, power <10>, result: <%d>\n", ft_recursive_power(-3, 10)); + printf("base: <-2>, power <10>, result: <%d>\n", ft_recursive_power(-2, 10)); + printf("base: <-1>, power <10>, result: <%d>\n", ft_recursive_power(-1, 10)); + printf("base: <0>, power <10>, result: <%d>\n", ft_recursive_power(0, 10)); + printf("base: <1>, power <10>, result: <%d>\n", ft_recursive_power(1, 10)); + printf("base: <2>, power <10>, result: <%d>\n", ft_recursive_power(2, 10)); + printf("base: <3>, power <10>, result: <%d>\n", ft_recursive_power(3, 10)); + printf("\n"); + + return (0); +} diff --git a/ex04/ft_fibonacci.c b/ex04/ft_fibonacci.c new file mode 100644 index 0000000..29540e0 --- /dev/null +++ b/ex04/ft_fibonacci.c @@ -0,0 +1,60 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_fibonacci.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tosuman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/03/30 00:36:21 by tosuman #+# #+# */ +/* Updated: 2023/03/30 00:36:22 by tosuman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#include +#include +#define NUM_TYPE int + +NUM_TYPE memoized_fibonacci(unsigned int index, NUM_TYPE *cache) +{ + if (cache[index] == (NUM_TYPE) -1) + cache[index] = memoized_fibonacci(index - 1, cache) + + memoized_fibonacci(index - 2, cache); + return (cache[index]); +} + +int ft_fibonacci(int index) +{ + int i; + NUM_TYPE *cache; + NUM_TYPE fibn; + + if (index < 0) + return (-1); + cache = malloc(sizeof(NUM_TYPE) * (index + 1)); + cache[0] = 0; + cache[1] = 1; + i = 2; + while (i < index + 1) + cache[i++] = (NUM_TYPE)(-1); + fibn = memoized_fibonacci((unsigned int) index, cache); + i = 0; + free(cache); + return (fibn); +} + +/* //// +#include +#define UNSIGNED_LONG_LONG_MAX_FIB 93 +#define INT_MAX_FIB 46 + +int main(void) +{ + int i; + + i = -12; + while (++i <= INT_MAX_FIB + 1) + printf("%d-th fib num: %d\n", i, ft_fibonacci(i)); + + return (0); +} +*/ //// diff --git a/ex05/ft_sqrt.c b/ex05/ft_sqrt.c new file mode 100644 index 0000000..4273586 --- /dev/null +++ b/ex05/ft_sqrt.c @@ -0,0 +1,64 @@ +/* ************************************************************************** */ +/* */ +/* ::: :::::::: */ +/* ft_sqrt.c :+: :+: :+: */ +/* +:+ +:+ +:+ */ +/* By: tosuman +#+ +:+ +#+ */ +/* +#+#+#+#+#+ +#+ */ +/* Created: 2023/03/30 01:42:42 by tosuman #+# #+# */ +/* Updated: 2023/03/30 01:42:45 by tosuman ### ########.fr */ +/* */ +/* ************************************************************************** */ + +#define INT_MAX_SQRT 46340 + +int ft_sqrt(int nb) +{ + int sqrt; + int old_sqrt; + int max; + int min; + + min = 0; + max = nb; + if (nb > INT_MAX_SQRT) + max = INT_MAX_SQRT; + sqrt = max; + while (1) + { + old_sqrt = sqrt; + if (sqrt * sqrt == nb) + return (sqrt); + if (sqrt * sqrt > nb) + max = sqrt; + if (sqrt * sqrt < nb) + min = sqrt; + sqrt = (max + min) / 2; + if (sqrt == old_sqrt) + break ; + } + return (0); +} + +/* //// +#include +#include + +int main(void) +{ + int i; + + printf("%d, %d\n", 0, ft_sqrt(0)); + i = -20; + while (++i <= 4000) + if (ft_sqrt(i)) + printf("%d, %d\n", i, ft_sqrt(i)); + printf("%d, %d\n", INT_MIN, ft_sqrt(INT_MIN)); + printf("%d, %d\n", INT_MAX, ft_sqrt(INT_MAX)); + i = INT_MAX; + while (--i > INT_MAX - 1000000) + if (ft_sqrt(i)) + printf("%d, %d\n", i, ft_sqrt(i)); + return (0); +} +*/ //// diff --git a/ex06/ft_is_prime.c b/ex06/ft_is_prime.c new file mode 100644 index 0000000..a73fb09 --- /dev/null +++ b/ex06/ft_is_prime.c @@ -0,0 +1,48 @@ +#define INT_MAX_SQRT 46340 + +int ft_int_sqrt(int nb) +{ + int sqrt; + int old_sqrt; + int max; + int min; + + min = 0; + max = nb; + if (nb > INT_MAX_SQRT) + max = INT_MAX_SQRT; + sqrt = max; + while (1) + { + old_sqrt = sqrt; + if (sqrt * sqrt == nb) + return (sqrt); + if (sqrt * sqrt > nb) + max = sqrt; + if (sqrt * sqrt < nb) + min = sqrt; + sqrt = (max + min) / 2; + if (sqrt == old_sqrt) + break ; + } + return (0); +} + +int ft_is_prime(int nb) +{ + +} + +#define START +#include + +int main(void) +{ + int i; + + i = 0; + while (i < 200) + if (ft_is_prime(i)) + printf("Prime: %d", i); + return (0); +} diff --git a/ex08/ft_ten_queens_puzzle.c b/ex08/ft_ten_queens_puzzle.c new file mode 100644 index 0000000..82f3f0d --- /dev/null +++ b/ex08/ft_ten_queens_puzzle.c @@ -0,0 +1,29 @@ + +#include +#define SIZE 10 + +int backtrack(cols[SIZE], int col, int sols) +{ + if (col >= SIZE) + return sols + 1; +} + +int ft_ten_queens_puzzle() +{ + int cols[SIZE]; + int i; + + i = 0; + while (i < SIZE) + cols[i] = -1; + + return (backtrack(cols, 0, 0)); +} + + +#include + +int main(void) +{ + printf("%d\n", ft_ten_queens_puzzle()); +}