Browse Source

Day 4 part 2

It passes the tests but the real solution is incorrect :(
Tyler Hallada 5 years ago
parent
commit
3f74dcb73e
2 changed files with 26 additions and 0 deletions
  1. 25 0
      src/day4.rs
  2. 1 0
      src/main.rs

+ 25 - 0
src/day4.rs

@@ -65,6 +65,10 @@ pub fn solve_part1() -> Result<u32, Box<Error>> {
65 65
     Ok(get_part1(INPUT)?)
66 66
 }
67 67
 
68
+pub fn solve_part2() -> Result<u32, Box<Error>> {
69
+    Ok(get_part2(INPUT)?)
70
+}
71
+
68 72
 fn get_part1(filename: &str) -> Result<u32, Box<Error>> {
69 73
     let records = read_records(filename)?;
70 74
     let minutes_asleep = minutes_asleep_per_guard(records);
@@ -73,6 +77,22 @@ fn get_part1(filename: &str) -> Result<u32, Box<Error>> {
73 77
     Ok(sleepiest_guard.0 * sleepiest_minute)
74 78
 }
75 79
 
80
+fn get_part2(filename: &str) -> Result<u32, Box<Error>> {
81
+    let records = read_records(filename)?;
82
+    let minutes_asleep = minutes_asleep_per_guard(records);
83
+    let all_mins: Vec<u32> = minutes_asleep
84
+        .values()
85
+        .flat_map(|mins| mins.iter())
86
+        .cloned()
87
+        .collect();
88
+    let sleepiest_minute = mode(&all_mins[..]);
89
+    let sleepiest_guard = minutes_asleep
90
+        .iter()
91
+        .max_by_key(|(_, mins)| mins.into_iter().filter(|min| **min == sleepiest_minute).count())
92
+        .unwrap();
93
+    Ok(sleepiest_guard.0 * sleepiest_minute)
94
+}
95
+
76 96
 fn mode(numbers: &[u32]) -> u32 {
77 97
     let mut occurences = HashMap::new();
78 98
     for &value in numbers {
@@ -283,4 +303,9 @@ mod tests {
283 303
     fn solves_part1() {
284 304
         assert_eq!(get_part1(TEST_INPUT).unwrap(), 240);
285 305
     }
306
+
307
+    #[test]
308
+    fn solves_part2() {
309
+        assert_eq!(get_part2(TEST_INPUT).unwrap(), 4455);
310
+    }
286 311
 }

+ 1 - 0
src/main.rs

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