use crate::Solution;
use itertools::Itertools;
use pmath::digits::digits_to_int;
use std::collections::HashSet;
problem!(Problem0032, 32, "Pandigital Products");
impl Solution for Problem0032 {
fn solve(&self) -> String {
let mut sum = 0;
let mut found_products = HashSet::new();
for perm in (1..=9).permutations(9) {
for first_digit_len in 1..=2 {
let fact1: i32 = digits_to_int(&perm[..first_digit_len], 10);
let fact2: i32 = digits_to_int(&perm[first_digit_len..5], 10);
let prod: i32 = digits_to_int(&perm[5..], 10);
if fact1 * fact2 == prod && !found_products.contains(&prod) {
sum += prod;
found_products.insert(prod);
}
}
}
sum.to_string()
}
}