use std::io::{self, Write}; use std::iter; fn make_passwords(patterns: &[Vec], buffer: &mut Vec, i: usize, writer: &mut W) { if i == patterns.len() { writer.write(&buffer).unwrap(); } else { for c in patterns[i].iter() { buffer[i] = *c; make_passwords(patterns, buffer, i + 1, writer); } } } fn main() { let range = |a, b| (a as u8..b as u8 + 1).collect::>(); let patterns: Vec> = vec![ range('a', 'z').into_iter().chain(range('1', '9').into_iter()).collect(), vec!('a' as u8, 'c' as u8), range('a', 'z'), range('a', 'z'), range('a', 'z') ]; let mut buffer: Vec = vec!(0; patterns.len() + 1); buffer[patterns.len()] = '\n' as u8; let mut writer = io::BufWriter::new(io::stdout()); make_passwords(&patterns, &mut buffer, 0, &mut writer); }