Day 04: The Ideal Stocking Stuffer

Loading code...

fn first_n_hex_are_0 (n: usize, input: String) -> bool {
	let result = md5::compute(input);

	for i in 0..n {
		let hex_at_index = if i % 2 == 0 {
			(0b11110000 & result[i/2]) >> 4
		} else {
			(0b00001111 & result[i/2]) >> 0
		};
		if hex_at_index != 0 { return false; }
	}

	return true;
}

fn solve_problem (n: usize, input: &str) -> String {
	for i in 1.. {
		let seed = format!("{}{}", input, i);
		if first_n_hex_are_0(n, seed) {
			return i.to_string();
		}
	}

	panic!();
}

pub fn day_04_1 (input: &str) -> String {
	return solve_problem(5, input);
}

pub fn day_04_2 (input: &str) -> String {
	return solve_problem(6, input);
}