diff options
| author | Igor Pashev <pashev.igor@gmail.com> | 2026-03-31 15:12:08 +0200 |
|---|---|---|
| committer | Igor Pashev <pashev.igor@gmail.com> | 2026-03-31 15:12:08 +0200 |
| commit | 2b63c2dc3c1cf5a78e55bc567066d398c940aeb5 (patch) | |
| tree | 5882a870ac558cff5354f579aa76f3131fdc2aae /src | |
| parent | 9cb69e7fe09caa71cdea5b3f1911076c24ad6ba0 (diff) | |
| download | balance-2b63c2dc3c1cf5a78e55bc567066d398c940aeb5.tar.gz | |
Generalize a bit
Diffstat (limited to 'src')
| -rw-r--r-- | src/lib.rs | 21 |
1 files changed, 17 insertions, 4 deletions
@@ -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)] |
