diff --git a/src/combinations.rs b/src/combinations.rs index e230119c1..06764cc85 100644 --- a/src/combinations.rs +++ b/src/combinations.rs @@ -208,8 +208,8 @@ fn remaining_for(n: usize, first: bool, indices: &[usize]) -> Option { indices .iter() .enumerate() - .fold(Some(0), |sum, (i, n0)| { - sum.and_then(|s| s.checked_add(checked_binomial(n - 1 - *n0, k - i)?)) + .try_fold(0usize, |sum, (i, n0)| { + sum.checked_add(checked_binomial(n - 1 - *n0, k - i)?) }) } } diff --git a/src/combinations_with_replacement.rs b/src/combinations_with_replacement.rs index 5d6a034b5..07c64c2c0 100644 --- a/src/combinations_with_replacement.rs +++ b/src/combinations_with_replacement.rs @@ -157,8 +157,8 @@ fn remaining_for(n: usize, first: bool, indices: &[usize]) -> Option { indices .iter() .enumerate() - .fold(Some(0), |sum, (i, n0)| { - sum.and_then(|s| s.checked_add(count(n - 1 - *n0, k - i)?)) + .try_fold(0usize, |sum, (i, n0)| { + sum.checked_add(count(n - 1 - *n0, k - i)?) }) } } diff --git a/src/permutations.rs b/src/permutations.rs index 21a84c401..cfdb06b2a 100644 --- a/src/permutations.rs +++ b/src/permutations.rs @@ -240,20 +240,16 @@ impl CompleteState { if n < k { return Some(0); } - (n - k + 1..=n).fold(Some(1), |acc, i| { - acc.and_then(|acc| acc.checked_mul(i)) - }) + (n - k + 1..=n).try_fold(1usize, |acc, i| acc.checked_mul(i)) } CompleteState::Ongoing { ref indices, ref cycles } => { - let mut count: usize = 0; - - for (i, &c) in cycles.iter().enumerate() { - let radix = indices.len() - i; - count = count.checked_mul(radix) - .and_then(|count| count.checked_add(c))?; - } - - Some(count) + cycles + .iter() + .enumerate() + .try_fold(0usize, |acc, (i, &c)| { + acc.checked_mul(indices.len() - i) + .and_then(|count| count.checked_add(c)) + }) } } } diff --git a/src/powerset.rs b/src/powerset.rs index f84cecfbd..9f0965bc5 100644 --- a/src/powerset.rs +++ b/src/powerset.rs @@ -82,7 +82,7 @@ impl FusedIterator for Powerset {} fn remaining_for(n: usize, k: usize) -> Option { - (k + 1..=n).fold(Some(0), |sum, i| { - sum.and_then(|s| s.checked_add(checked_binomial(n, i)?)) + (k + 1..=n).try_fold(0usize, |sum, i| { + sum.checked_add(checked_binomial(n, i)?) }) }