summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/lib.rs21
1 files changed, 17 insertions, 4 deletions
diff --git a/src/lib.rs b/src/lib.rs
index eead58f..5f0903a 100644
--- a/src/lib.rs
+++ b/src/lib.rs
@@ -1,10 +1,23 @@
-pub fn brutal(arr: &[usize]) -> Option<usize> {
- let sum: usize = arr.iter().sum();
+use std::{
+ cmp::PartialEq,
+ iter::Sum,
+ ops::{Add, Sub},
+};
+
+pub fn brutal<T>(arr: &[T]) -> Option<usize>
+where
+ T: for<'a> Sum<&'a T>
+ + for<'a> Sub<&'a T, Output = T>
+ + for<'a> Add<&'a T, Output = T>
+ + PartialEq
+ + Copy,
+{
+ let sum: T = arr.iter().sum();
let x = arr
.iter()
.enumerate()
- .try_fold((0, sum), |(left, right), (idx, x)| {
+ .try_fold((sum - &sum, sum), |(left, right), (idx, x)| {
if left == right - x {
Err(idx)
} else {
@@ -12,7 +25,7 @@ pub fn brutal(arr: &[usize]) -> Option<usize> {
}
});
- if let Err(idx) = x { Some(idx) } else { None }
+ x.err()
}
#[cfg(test)]