diff options
author | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 20:22:56 +0200 |
---|---|---|
committer | Justin Wernick <justin@worthe-it.co.za> | 2022-04-19 20:23:15 +0200 |
commit | 174772b5b8d9f5bf5e3c8e8152adfd89f0e83f6b (patch) | |
tree | a003b748ee939b30a2bcd3caf2378228baa304c1 /2016/aoc5/src | |
parent | fd75b3fb95ad049b0025cb8fc0b3459b8f872d61 (diff) |
Refile for merging repos
Diffstat (limited to '2016/aoc5/src')
-rw-r--r-- | 2016/aoc5/src/main.rs | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/2016/aoc5/src/main.rs b/2016/aoc5/src/main.rs new file mode 100644 index 0000000..31bef5e --- /dev/null +++ b/2016/aoc5/src/main.rs @@ -0,0 +1,49 @@ +extern crate md5; + +fn main() { + let room = "reyedfim"; + + let mut i = 0; + let mut found_bytes = 0; + + let mut code: [Option<u8>; 8] = [None;8]; + + println!("Cracking the passwordz"); + print_code(&code); + + while found_bytes < 8 { + let room_string = format!("{}{}", room, i); + let room_bytes = room_string.into_bytes(); + let hash = md5::compute(room_bytes.as_slice()); + if match_hash(hash) { + let position = hash[2]; + let value = hash[3] / 16; + if code[position as usize].is_none() { + code[position as usize] = Some(value); + print_code(&code); + found_bytes += 1; + } + } + + i+=1; + } + + println!("Password found!"); +} + +fn match_hash(hash: [u8; 16]) -> bool { + hash[0] == 0 && + hash[1] == 0 && + hash[2] < 8 +} + +fn print_code(code: &[Option<u8>; 8]) { + println!(""); + for &byte in code.iter() { + match byte { + None => {print!("-");}, + Some(x) => {print!("{:x}", x);} + } + } + println!(""); +} |