From 2f59e63dbfc12bc2e3f3060b762e51baddc99b6e Mon Sep 17 00:00:00 2001 From: "Dr. Matthias Ratajczak" Date: Tue, 16 Aug 2022 19:04:15 +0200 Subject: [PATCH] optimize get_case_string (51) --- src/euler51/src/main.rs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/euler51/src/main.rs b/src/euler51/src/main.rs index f82733c..b565c21 100644 --- a/src/euler51/src/main.rs +++ b/src/euler51/src/main.rs @@ -34,14 +34,16 @@ fn main() { let all_primes = Primes::get_between(MIN_VALUE, MAX_VALUE); let mut processed_cases = HashSet::new(); let mut primes_matching_pattern = Vec::with_capacity(TARGET_LENGTH); + let mut case = String::with_capacity(LENGTH); for pattern in PositionCombinations::new(MIN_LENGTH, MAX_LENGTH, LENGTH) { for prime in &all_primes.vector { + case.clear(); primes_matching_pattern.clear(); let digits = prime.to_digits(); - let case = get_case_string(&digits, &pattern); + get_case_string(&digits, &pattern, &mut case); if processed_cases.contains(&case) { continue; } else { @@ -63,12 +65,12 @@ fn main() { } } -fn get_case_string(digits: &[u8], pattern: &[bool]) -> String { +fn get_case_string(digits: &[u8], pattern: &[bool], buf: &mut String) { digits .iter() .zip(pattern) .map(|(d, b)| if *b { '*' } else { *d as char }) - .collect() + .for_each(|c| buf.push(c)); } fn replace_digits_with_new_digit_according_to_pattern(