optimize get_case_string (51)

This commit is contained in:
Dr. Matthias Ratajczak
2022-08-16 19:04:15 +02:00
parent 799516005f
commit 2f59e63dbf
+5 -3
View File
@@ -34,14 +34,16 @@ fn main() {
let all_primes = Primes::get_between(MIN_VALUE, MAX_VALUE); let all_primes = Primes::get_between(MIN_VALUE, MAX_VALUE);
let mut processed_cases = HashSet::new(); let mut processed_cases = HashSet::new();
let mut primes_matching_pattern = Vec::with_capacity(TARGET_LENGTH); 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 pattern in PositionCombinations::new(MIN_LENGTH, MAX_LENGTH, LENGTH) {
for prime in &all_primes.vector { for prime in &all_primes.vector {
case.clear();
primes_matching_pattern.clear(); primes_matching_pattern.clear();
let digits = prime.to_digits(); let digits = prime.to_digits();
let case = get_case_string(&digits, &pattern); get_case_string(&digits, &pattern, &mut case);
if processed_cases.contains(&case) { if processed_cases.contains(&case) {
continue; continue;
} else { } 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 digits
.iter() .iter()
.zip(pattern) .zip(pattern)
.map(|(d, b)| if *b { '*' } else { *d as char }) .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( fn replace_digits_with_new_digit_according_to_pattern(