use std::collections::HashMap; pub fn task_scheduler(tasks: &[char], coldown: u8) -> u16 { let mut num_tasks = HashMap::new(); for task in tasks { *num_tasks.entry(task).or_insert(0) += 1; } let mut num_tasks: Vec<(&&char, &i32)> = num_tasks.iter().collect(); num_tasks.sort_by(|a, b| b.1.cmp(a.1)); let mut result = 0; let mut pos = 0; let mut range = 1; for _ in 0..tasks.len() { if num_tasks.get(pos as usize).is_none() { result += if pos > coldown as u16 { 0 } else { coldown as u16 - pos + 1 }; pos = 0; range += 1; } if *num_tasks.get(pos as usize).unwrap().1 < range { result += coldown as u16 - pos; pos = 0; range += 1; } result += 1; pos += 1; } result }