(rust) day 4 part 1 done
This commit is contained in:
parent
b2401c3d27
commit
c7dc3d3891
|
@ -55,7 +55,7 @@ fn group_shifts_by_guard(shifts: Vec<Shift>) -> HashMap<i32, Vec<Shift>> {
|
|||
return shifts_by_guard;
|
||||
}
|
||||
|
||||
fn calculate_sleep(events: Vec<Event>) -> Vec<bool> {
|
||||
fn calculate_sleep(events: &Vec<Event>) -> Vec<bool> {
|
||||
let mut minutes = vec![false; 60];
|
||||
let mut sleeping = false;
|
||||
let mut last = 0;
|
||||
|
@ -74,6 +74,44 @@ fn calculate_sleep(events: Vec<Event>) -> Vec<bool> {
|
|||
return minutes;
|
||||
}
|
||||
|
||||
fn count_awake_minutes(minutes: &Vec<bool>) -> i32 {
|
||||
let mut sum = 0;
|
||||
for minute in minutes {
|
||||
if *minute {
|
||||
sum+=1;
|
||||
}
|
||||
}
|
||||
return sum;
|
||||
}
|
||||
|
||||
fn find_sleepy_guard(guards: &HashMap<i32, Vec<Shift>>) -> i32 {
|
||||
let mut max_sleep = 0;
|
||||
let mut id_of_sleepiest = -1;
|
||||
for (guard, shifts) in guards {
|
||||
let mut minutes_asleep = 0;
|
||||
for shift in shifts {
|
||||
minutes_asleep += count_awake_minutes(&calculate_sleep(&shift.events));
|
||||
}
|
||||
if minutes_asleep > max_sleep {
|
||||
max_sleep = minutes_asleep;
|
||||
id_of_sleepiest = guard.clone();
|
||||
}
|
||||
}
|
||||
return id_of_sleepiest;
|
||||
}
|
||||
|
||||
fn get_sleepy_minute(shifts: &Vec<Shift>) -> i32 {
|
||||
let mut sleep_during_shifts = vec![0; 60];
|
||||
for shift in shifts {
|
||||
let minutes_asleep = calculate_sleep(&shift.events);
|
||||
for i in 0..sleep_during_shifts.len() {
|
||||
sleep_during_shifts[i] += if minutes_asleep[i] {1} else {0};
|
||||
}
|
||||
}
|
||||
let sleepy_minute = sleep_during_shifts.iter().max().unwrap();
|
||||
return sleep_during_shifts.iter().position(|&m| &m == sleepy_minute).unwrap() as i32;
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let lines: Vec<&str> = include_str!("../input").split("\n").collect();
|
||||
|
||||
|
@ -93,5 +131,7 @@ fn main() {
|
|||
*/
|
||||
let shifts_by_guard = group_shifts_by_guard(shifts);
|
||||
let sleepy_guard = find_sleepy_guard(&shifts_by_guard);
|
||||
let sleepy_minute = get_sleepy_minute(&shifts_by_guard.get(&sleepy_guard).unwrap());
|
||||
println!("guard {}, minute {}: {}", sleepy_guard, sleepy_minute, sleepy_guard * sleepy_minute);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user