difference-of-squares v2

This commit is contained in:
Alexander Heldt
2025-11-01 11:51:57 +01:00
parent 2cc319d2f2
commit 19f0270202

View File

@@ -1,14 +1,25 @@
pub fn square_of_sum(n: Int) -> Int { pub fn square_of_sum(n: Int) -> Int {
let sum = sum_to(n) // (1 + 2 + ... n)^2
sum * sum square_of_sum_loop(n, 0)
} }
fn sum_to(n: Int) -> Int { fn square_of_sum_loop(n: Int, acc: Int) -> Int {
n * { n + 1 } / 2 case n {
0 -> acc * acc
_ -> square_of_sum_loop(n - 1, acc + n)
}
} }
pub fn sum_of_squares(n: Int) -> Int { pub fn sum_of_squares(n: Int) -> Int {
n * { n + 1 } * { 2 * n + 1 } / 6 // TODO (1^2 + 2^2 ... + n^2)
sum_of_squares_loop(n, 0)
}
fn sum_of_squares_loop(n: Int, acc: Int) -> Int {
case n {
0 -> acc
_ -> sum_of_squares_loop(n - 1, acc + { n * n })
}
} }
pub fn difference(n: Int) -> Int { pub fn difference(n: Int) -> Int {