From 02481656966b0a8dfc95cf3c22bcc049660ff7d4 Mon Sep 17 00:00:00 2001 From: Federico Igne Date: Sat, 26 Dec 2020 17:48:38 +0000 Subject: Move Rust exercises in a subdirectory --- rust/grains/src/lib.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 rust/grains/src/lib.rs (limited to 'rust/grains/src/lib.rs') diff --git a/rust/grains/src/lib.rs b/rust/grains/src/lib.rs new file mode 100644 index 0000000..05449be --- /dev/null +++ b/rust/grains/src/lib.rs @@ -0,0 +1,23 @@ +pub fn square(s: u32) -> u64 { + assert!(s > 0 && s < 65,"Square must be between 1 and 64"); + 2_u64.pow(s-1) +} + +/// This version uses the already defined `square(s)` function. +/// +/// There is also a faster way to compute this according to +/// [Wolfram|Alpha](https://www.wolframalpha.com/input/?i=sum_0%5En+2%5En) +/// +/// 2_u64.pow(65) - 1 == 18_446_744_073_709_551_615 +/// +/// this solution however doesn't work because +/// +/// 2_u64.pow(65) == 18_446_744_073_709_551_616 +/// +/// which overflows since +/// +/// std::u64::MAX == 18_446_744_073_709_551_615 +/// +pub fn total() -> u64 { + (1..65).map(square).sum() // std::u64::MAX +} -- cgit v1.2.3