From 96552dab2e5bc16c4b3150ba9a9f3181a3d26c89 Mon Sep 17 00:00:00 2001 From: vicllo Date: Sat, 31 Jul 2021 23:13:48 +0200 Subject: [PATCH 01/11] Create Fibonacci Sequence Recursion.ml --- Math/Fibonacci Sequence Recursion.ml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 Math/Fibonacci Sequence Recursion.ml diff --git a/Math/Fibonacci Sequence Recursion.ml b/Math/Fibonacci Sequence Recursion.ml new file mode 100644 index 0000000..6cb81d4 --- /dev/null +++ b/Math/Fibonacci Sequence Recursion.ml @@ -0,0 +1,9 @@ +(*Recursive Fibonacci function*) + +let rec fib n = match n with + | 1 -> 1 + | 2 -> 1 + | _ -> fib (n - 1) + fib(n - 2);; + + + From 9fa09b709bad8adef4088ac6740bbb085e5dfa2f Mon Sep 17 00:00:00 2001 From: vicllo Date: Sat, 31 Jul 2021 23:33:46 +0200 Subject: [PATCH 02/11] Create abs.ml --- Math/abs.ml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Math/abs.ml diff --git a/Math/abs.ml b/Math/abs.ml new file mode 100644 index 0000000..5283060 --- /dev/null +++ b/Math/abs.ml @@ -0,0 +1,3 @@ +(* Absolute value *) + +let abs x = if x > 0 then x else -x;; From d29af488dbd6d0d58a610bd026bb1d41b1b674fd Mon Sep 17 00:00:00 2001 From: vicllo Date: Sat, 31 Jul 2021 23:33:49 +0200 Subject: [PATCH 03/11] Create Sum of digits.ml --- Math/Sum of digits.ml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Math/Sum of digits.ml diff --git a/Math/Sum of digits.ml b/Math/Sum of digits.ml new file mode 100644 index 0000000..6b64efc --- /dev/null +++ b/Math/Sum of digits.ml @@ -0,0 +1,5 @@ +(* Sum of digits *) + +let rec sum_of_digits_recursion n = + let abs x = if x > 0 then x else -x in (* We need the absolute value of the number for the result to be positive) *) + if abs(n) < 10 then abs(n) else abs(n) mod 10 + sum_of_digits_recursion (n / 10);; From 9cb13521fb54cd623b3fd1516515aee7b3796623 Mon Sep 17 00:00:00 2001 From: vicllo Date: Sat, 31 Jul 2021 23:50:55 +0200 Subject: [PATCH 04/11] Create Find min recursion.ml --- Math/Find min recursion.ml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Math/Find min recursion.ml diff --git a/Math/Find min recursion.ml b/Math/Find min recursion.ml new file mode 100644 index 0000000..9d3ca24 --- /dev/null +++ b/Math/Find min recursion.ml @@ -0,0 +1,6 @@ +(* Find min recursion *) + +let rec find_min l = match l with + |[x] -> x + |t::q -> (t if t < (find_min q) else find_min q) + |[] -> failwith "Liste vide!";; \ No newline at end of file From b70546a88e36128b4895122b15fd364a9db3663e Mon Sep 17 00:00:00 2001 From: vicllo Date: Sun, 1 Aug 2021 00:00:23 +0200 Subject: [PATCH 05/11] Create Ceil.ml --- Math/Ceil.ml | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 Math/Ceil.ml diff --git a/Math/Ceil.ml b/Math/Ceil.ml new file mode 100644 index 0000000..63b8858 --- /dev/null +++ b/Math/Ceil.ml @@ -0,0 +1,3 @@ +let ceil x = + if 2 - int_of_float x <= 0 then int_of_float(x) + else int_of_float(x) + 1;; \ No newline at end of file From 44e5cc8841a20e91d347aa7e6504cef1ab34f546 Mon Sep 17 00:00:00 2001 From: vicllo Date: Sun, 1 Aug 2021 00:08:08 +0200 Subject: [PATCH 06/11] Create power-using-recursion.ml --- Math/power-using-recursion.ml | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 Math/power-using-recursion.ml diff --git a/Math/power-using-recursion.ml b/Math/power-using-recursion.ml new file mode 100644 index 0000000..cb755d2 --- /dev/null +++ b/Math/power-using-recursion.ml @@ -0,0 +1,5 @@ +(* Power using recursion *) +(* power : float -> int -> float *) + +let rec power base exponent = + if exponent <> 0 then base *. power base (exponent - 1) else 1.;; \ No newline at end of file From 3ef285a8cb963f4f1339d0eb6ca2c6141f18785c Mon Sep 17 00:00:00 2001 From: vicllo Date: Sun, 1 Aug 2021 00:09:06 +0200 Subject: [PATCH 07/11] Update Ceil.ml Add small comment at the top --- Math/Ceil.ml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Math/Ceil.ml b/Math/Ceil.ml index 63b8858..81cdf02 100644 --- a/Math/Ceil.ml +++ b/Math/Ceil.ml @@ -1,3 +1,5 @@ +(* Ceil function *) + let ceil x = if 2 - int_of_float x <= 0 then int_of_float(x) else int_of_float(x) + 1;; \ No newline at end of file From f213ac0d76a3ade26149730a5dc9eade0e1f2ecb Mon Sep 17 00:00:00 2001 From: vicllo Date: Sun, 1 Aug 2021 00:21:31 +0200 Subject: [PATCH 08/11] Create Find max recursion.ml --- Math/Find max recursion.ml | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 Math/Find max recursion.ml diff --git a/Math/Find max recursion.ml b/Math/Find max recursion.ml new file mode 100644 index 0000000..f4e4f0b --- /dev/null +++ b/Math/Find max recursion.ml @@ -0,0 +1,6 @@ +(* Find max recursion *) + +let rec find_max l = match l with + |[x] -> x + |t::q -> if t > (find_max q) then t else find_max q + |[] -> failwith "Liste vide!";; \ No newline at end of file From 9cbbf64e1d7680651da628ac9d473d6986e98357 Mon Sep 17 00:00:00 2001 From: vicllo Date: Sun, 1 Aug 2021 00:21:47 +0200 Subject: [PATCH 09/11] Update Find min recursion.ml Bug fix --- Math/Find min recursion.ml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Math/Find min recursion.ml b/Math/Find min recursion.ml index 9d3ca24..c1ed0e5 100644 --- a/Math/Find min recursion.ml +++ b/Math/Find min recursion.ml @@ -2,5 +2,5 @@ let rec find_min l = match l with |[x] -> x - |t::q -> (t if t < (find_min q) else find_min q) + |t::q -> if t < (find_min q) then t else find_min q |[] -> failwith "Liste vide!";; \ No newline at end of file From 95039f28d8027221942f64d3f5ce44879321009d Mon Sep 17 00:00:00 2001 From: vicllo Date: Sun, 1 Aug 2021 00:49:13 +0200 Subject: [PATCH 10/11] Create Euclidean gcd.ml Creates both iterative and recursive GCD functions --- Math/Euclidean gcd.ml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 Math/Euclidean gcd.ml diff --git a/Math/Euclidean gcd.ml b/Math/Euclidean gcd.ml new file mode 100644 index 0000000..41366db --- /dev/null +++ b/Math/Euclidean gcd.ml @@ -0,0 +1,18 @@ +(* Euclidean GCD*) + +let euclidean_gcd a b = + let t = ref a in + let a = ref a in + let b = ref b in + while !b <> 0 do + t := !a; + a := !b; + b := !t mod !b; + done; + !a ;; + + +(* Euclidean GCD Recursive *) + +let rec euclidean_gcd_recursive a b = + if b == 0 then a else euclidean_gcd_recursive b (a mod b);; \ No newline at end of file From 617cd6a8852956f46274e4b6f00701ed42ff490b Mon Sep 17 00:00:00 2001 From: vicllo Date: Sat, 7 Aug 2021 15:08:35 +0200 Subject: [PATCH 11/11] First five problems --- project_euler/problem_001/sol1.ml | 9 +++++++++ project_euler/problem_002/sol11.ml | 11 +++++++++++ project_euler/problem_003/sol1.ml | 16 ++++++++++++++++ project_euler/problem_004/sol1.ml | 22 ++++++++++++++++++++++ project_euler/problem_005/sol1.ml | 15 +++++++++++++++ 5 files changed, 73 insertions(+) create mode 100644 project_euler/problem_001/sol1.ml create mode 100644 project_euler/problem_002/sol11.ml create mode 100644 project_euler/problem_003/sol1.ml create mode 100644 project_euler/problem_004/sol1.ml create mode 100644 project_euler/problem_005/sol1.ml diff --git a/project_euler/problem_001/sol1.ml b/project_euler/problem_001/sol1.ml new file mode 100644 index 0000000..26680d3 --- /dev/null +++ b/project_euler/problem_001/sol1.ml @@ -0,0 +1,9 @@ +(* Project Euler - Problem 1 *) + +let rec sum n = match n with + | 1 -> 0 + | _ -> if n mod 3 = 0 || n mod 5 = 0 then n + sum (n - 1) else sum (n - 1) + ;; + +sum (1000 - 1);; + diff --git a/project_euler/problem_002/sol11.ml b/project_euler/problem_002/sol11.ml new file mode 100644 index 0000000..49388e8 --- /dev/null +++ b/project_euler/problem_002/sol11.ml @@ -0,0 +1,11 @@ +(* Euler project - Problem 2 *) + +let rec sum current previous max accu = + if current > max + then accu + else + if current mod 2 = 0 + then sum (current + previous) current max (accu + current) + else sum (current + previous) current max accu;; + +sum 2 1 4000000 0;; \ No newline at end of file diff --git a/project_euler/problem_003/sol1.ml b/project_euler/problem_003/sol1.ml new file mode 100644 index 0000000..ceee013 --- /dev/null +++ b/project_euler/problem_003/sol1.ml @@ -0,0 +1,16 @@ +(* Euler Project - Problem 3 *) + +let rec bigger_div n d = + if n mod d = 0 then n/d + else bigger_div n (d + 1);; + +let is_composed n = bigger_div n 2 <> 1;; + +let solution n = + let test = ref (bigger_div n 2) in + while is_composed !test do + test := bigger_div !test 2 + done; + !test;; + +solution 600851475143 ;; \ No newline at end of file diff --git a/project_euler/problem_004/sol1.ml b/project_euler/problem_004/sol1.ml new file mode 100644 index 0000000..b3ca19a --- /dev/null +++ b/project_euler/problem_004/sol1.ml @@ -0,0 +1,22 @@ +(* Euler Project - Problem 4 *) + +let is_palindromic n = + let str_n = string_of_int n in + let len_n = 1 + int_of_float(log10(float_of_int n)) in + let rec palindrom_test = function + | i when i = len_n / 2 -> true + | i -> str_n.[i] = str_n.[len_n - i - 1] && palindrom_test (i + 1) + in palindrom_test 0;; + +let solution = + let largest = ref 0 in + for a = 100 to 999 do + for b = 100 to 999 do + if is_palindromic (a * b) then + if (a * b) > !largest then largest := (a * b) + done + done; + !largest + ;; + +solution;; diff --git a/project_euler/problem_005/sol1.ml b/project_euler/problem_005/sol1.ml new file mode 100644 index 0000000..103349a --- /dev/null +++ b/project_euler/problem_005/sol1.ml @@ -0,0 +1,15 @@ +(* Euler Project - Problem 5 *) + +let solution = + let solved = ref false in + let i = ref (20*19) in + while !solved = false do + solved := true; + for d = 2 to 20 do + if !i mod d <> 0 then solved := false + done; + if !solved = false then i := !i + (20*19) + done; + !i;; + +solution;; \ No newline at end of file