Created
January 30, 2020 02:35
-
-
Save davich/c234a7d73e53fdf759fa6607f8bed6d3 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
use std::collections::HashMap; | |
#[cfg(test)] | |
mod tests { | |
use super::*; | |
#[test] | |
fn it_works() { | |
let ints = vec![1, 3, 5, 7, 8, 1]; | |
assert_eq!(average(&ints), 4.166666666666667); | |
assert_eq!(median(&ints), 6.0); | |
assert_eq!(mode(&ints), 1); | |
} | |
} | |
fn main() { | |
let ints = vec![1,3,5,7,8,1]; | |
println!("Average is {}", average(&ints)); | |
println!("Median is {}", median(&ints)); | |
println!("Mode is {}", mode(&ints)); | |
println!("{:?}", ints); | |
} | |
fn average(ints : &[i32]) -> f64 { | |
assert!(!ints.is_empty(), "must not be empty"); | |
ints.iter().sum::<i32>() as f64 / ints.len() as f64 | |
} | |
fn median(ints : &[i32]) -> f64 { | |
assert!(!ints.is_empty(), "must not be empty"); | |
let mut ints = ints.to_owned(); | |
ints.sort(); | |
match ints.len() % 2 { | |
0 => average(&vec![ints[(ints.len() / 2)], ints[(ints.len() / 2) + 1]]), | |
1 => ints[(ints.len() / 2)] as f64, | |
_ => unreachable!() | |
} | |
} | |
fn mode(ints: &[i32]) -> i32 { | |
assert!(!ints.is_empty(), "must not be empty"); | |
let max = ints | |
.iter() | |
.fold(HashMap::new(), |mut acc, i| { | |
*acc.entry(i).or_insert(0) += 1; | |
acc | |
}) | |
.into_iter() | |
.max_by_key(|&(_, count)| count); | |
match max { | |
Some((val, _)) => *val, | |
_ => -1, | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment