Day 4 part 2

It passes the tests but the real solution is incorrect :(
This commit is contained in:
Tyler Hallada 2018-12-17 23:34:54 -05:00
parent dc1211cae2
commit 3f74dcb73e
2 changed files with 26 additions and 0 deletions

View File

@ -65,6 +65,10 @@ pub fn solve_part1() -> Result<u32, Box<Error>> {
Ok(get_part1(INPUT)?) Ok(get_part1(INPUT)?)
} }
pub fn solve_part2() -> Result<u32, Box<Error>> {
Ok(get_part2(INPUT)?)
}
fn get_part1(filename: &str) -> Result<u32, Box<Error>> { fn get_part1(filename: &str) -> Result<u32, Box<Error>> {
let records = read_records(filename)?; let records = read_records(filename)?;
let minutes_asleep = minutes_asleep_per_guard(records); let minutes_asleep = minutes_asleep_per_guard(records);
@ -73,6 +77,22 @@ fn get_part1(filename: &str) -> Result<u32, Box<Error>> {
Ok(sleepiest_guard.0 * sleepiest_minute) Ok(sleepiest_guard.0 * sleepiest_minute)
} }
fn get_part2(filename: &str) -> Result<u32, Box<Error>> {
let records = read_records(filename)?;
let minutes_asleep = minutes_asleep_per_guard(records);
let all_mins: Vec<u32> = minutes_asleep
.values()
.flat_map(|mins| mins.iter())
.cloned()
.collect();
let sleepiest_minute = mode(&all_mins[..]);
let sleepiest_guard = minutes_asleep
.iter()
.max_by_key(|(_, mins)| mins.into_iter().filter(|min| **min == sleepiest_minute).count())
.unwrap();
Ok(sleepiest_guard.0 * sleepiest_minute)
}
fn mode(numbers: &[u32]) -> u32 { fn mode(numbers: &[u32]) -> u32 {
let mut occurences = HashMap::new(); let mut occurences = HashMap::new();
for &value in numbers { for &value in numbers {
@ -283,4 +303,9 @@ mod tests {
fn solves_part1() { fn solves_part1() {
assert_eq!(get_part1(TEST_INPUT).unwrap(), 240); assert_eq!(get_part1(TEST_INPUT).unwrap(), 240);
} }
#[test]
fn solves_part2() {
assert_eq!(get_part2(TEST_INPUT).unwrap(), 4455);
}
} }

View File

@ -15,4 +15,5 @@ fn main() {
println!("{}", day3::solve_part2().unwrap().unwrap()); println!("{}", day3::solve_part2().unwrap().unwrap());
println!("Day 4:"); println!("Day 4:");
println!("{}", day4::solve_part1().unwrap()); println!("{}", day4::solve_part1().unwrap());
println!("{}", day4::solve_part2().unwrap());
} }