add day 5
This commit is contained in:
Generated
+16
@@ -0,0 +1,16 @@
|
|||||||
|
# This file is automatically @generated by Cargo.
|
||||||
|
# It is not intended for manual editing.
|
||||||
|
version = 4
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "day05"
|
||||||
|
version = "0.1.0"
|
||||||
|
dependencies = [
|
||||||
|
"md5",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "md5"
|
||||||
|
version = "0.8.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ae960838283323069879657ca3de837e9f7bbb4c7bf6ea7f1b290d5e9476d2e0"
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
[package]
|
||||||
|
name = "day05"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2024"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
md5 = "0.8"
|
||||||
@@ -0,0 +1,69 @@
|
|||||||
|
use std::io::Write;
|
||||||
|
|
||||||
|
#[cfg(debug_assertions)]
|
||||||
|
const INPUT: &str = "abc";
|
||||||
|
#[cfg(not(debug_assertions))]
|
||||||
|
const INPUT: &str = "cxdnnyjw";
|
||||||
|
// const INPUT: &str = "abc";
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
part1();
|
||||||
|
|
||||||
|
println!();
|
||||||
|
|
||||||
|
part2();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2() {
|
||||||
|
let mut result = [' '; 8];
|
||||||
|
|
||||||
|
for i in 0_i64.. {
|
||||||
|
let s = format!("{INPUT}{i}");
|
||||||
|
let digest = md5::compute(s);
|
||||||
|
|
||||||
|
let result_string = format!("{:x}", digest);
|
||||||
|
|
||||||
|
if result_string.chars().take(5).all(|c| c == '0') {
|
||||||
|
let mut chars = result_string.chars();
|
||||||
|
let the_position = chars.nth(5).unwrap();
|
||||||
|
let the_char = chars.next().unwrap();
|
||||||
|
|
||||||
|
if ('0'..'8').contains(&the_position) {
|
||||||
|
let position = the_position.to_string().parse::<usize>().unwrap();
|
||||||
|
if result[position] == ' ' {
|
||||||
|
result[position] = the_char;
|
||||||
|
println!("{}", result.iter().collect::<String>());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if !result.contains(&' ') {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1() {
|
||||||
|
let mut result = vec![];
|
||||||
|
for i in 0_i64.. {
|
||||||
|
let s = format!("{INPUT}{i}");
|
||||||
|
let digest = md5::compute(s);
|
||||||
|
|
||||||
|
let result_string = format!("{:x}", digest);
|
||||||
|
|
||||||
|
if let Some(the_char) = result_string
|
||||||
|
.chars()
|
||||||
|
.take(5)
|
||||||
|
.all(|c| c == '0')
|
||||||
|
.then(|| result_string.chars().nth(5).unwrap())
|
||||||
|
{
|
||||||
|
print!("{the_char}");
|
||||||
|
std::io::stdout().flush().unwrap();
|
||||||
|
result.push(the_char);
|
||||||
|
if result.len() == 8 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
println!();
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user