optimize get_case_string (51)
This commit is contained in:
@@ -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(
|
||||||
|
|||||||
Reference in New Issue
Block a user