diff options
author | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2017-05-27 11:07:31 -0400 |
---|---|---|
committer | Kjetil Orbekk <kjetil.orbekk@gmail.com> | 2017-05-27 11:07:31 -0400 |
commit | b84a25e4a62b026984cab06bc77a89d873c5d9d1 (patch) | |
tree | 12c13b1618217d86fa3235159354d8eeeac90def | |
parent | a72cfc1d2e9382f14ca2e06b46323f1431c967dd (diff) |
Pattern generator.
-rw-r--r-- | passwords.rs | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/passwords.rs b/passwords.rs new file mode 100644 index 0000000..533e282 --- /dev/null +++ b/passwords.rs @@ -0,0 +1,36 @@ +use std::io::{self, Write}; +use std::iter; + +fn make_passwords<W: Write>(patterns: &[Vec<u8>], + buffer: &mut Vec<u8>, + 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::<Vec<_>>() + }; + + let patterns: Vec<Vec<u8>> = vec!( + range('a', 'z'), + range('1', '9'), + range('a', 'z'), + range('a', 'z'), + range('a', 'z'), + ); + + let mut buffer: Vec<u8> = 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); +} |