fn main() { for base in 2..=64 { println!("Basis {}: {:?}", base, solve(base)); } } fn solve(base: u128) -> Vec { let digits: Vec = (0..base).collect(); let mut candidates = vec![(0, digits)]; for _ in 0..base { candidates = candidates .into_iter() .flat_map(|(stumb, left)| left.clone().into_iter().map(move |digit| { let mut next_left: Vec = left.clone(); next_left.retain(|d| *d != digit); (stumb * base + digit, next_left) })) .filter(|(number, left)| number % (base - (left.len() as u128)) == 0) .collect(); } candidates.into_iter().map(|(number, _)| number).collect() }