From edb0565e92146c93ba3971f88d9034cb623aeed1 Mon Sep 17 00:00:00 2001 From: Philippe-Cholet Date: Wed, 6 Sep 2023 10:48:39 +0200 Subject: [PATCH 1/4] Use `try_fold` in `combinations::remaining_for` --- src/combinations.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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)?) }) } } From ce1eceff77f9171da0942b776e74d949a03f50b2 Mon Sep 17 00:00:00 2001 From: Philippe-Cholet Date: Wed, 6 Sep 2023 10:48:55 +0200 Subject: [PATCH 2/4] Use `try_fold` in `combinations_with_replacement::remaining_for` --- src/combinations_with_replacement.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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)?) }) } } From caed05dfb5778a7f8656796c53d009cebf2f83a5 Mon Sep 17 00:00:00 2001 From: Philippe-Cholet Date: Wed, 6 Sep 2023 10:49:51 +0200 Subject: [PATCH 3/4] Use `try_fold` in `powerset::remaining_for` --- src/powerset.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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)?) }) } From 9521ba0478f4003a6a6230fca8605ea3db7a6fca Mon Sep 17 00:00:00 2001 From: Philippe-Cholet Date: Wed, 6 Sep 2023 17:41:25 +0200 Subject: [PATCH 4/4] Use `try_fold` in `CompleteState::remaining` --- src/permutations.rs | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) 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)) + }) } } }