summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKjetil Orbekk <kjetil.orbekk@gmail.com>2017-05-27 11:07:31 -0400
committerKjetil Orbekk <kjetil.orbekk@gmail.com>2017-05-27 11:07:31 -0400
commitb84a25e4a62b026984cab06bc77a89d873c5d9d1 (patch)
tree12c13b1618217d86fa3235159354d8eeeac90def
parenta72cfc1d2e9382f14ca2e06b46323f1431c967dd (diff)
Pattern generator.
-rw-r--r--passwords.rs36
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);
+}