blob: 991590b7b9d49c7aceaebd004cb7d75f91082f4e (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
use std::env;
use std::collections::HashMap;
fn calc_mean(numbers: &Vec<i32>) -> f32 {
let sum: i32 = numbers.iter().sum();
sum as f32 / numbers.len() as f32
}
fn calc_median(numbers: &Vec<i32>) -> i32 {
numbers[numbers.len() / 2]
}
fn calc_mode(numbers: &Vec<i32>) -> i32 {
let mut counts: HashMap<i32, i32> = HashMap::new();
for each in numbers {
let count = counts.entry(*each).or_insert(0);
*count += 1;
}
let mut most: i32 = 0;
let mut result: i32 = 0;
for (key, val) in counts.iter() {
if val > &most {
most = *val;
result = *key;
}
}
if most <= 1 {
0
}
else {
result
}
}
fn main() {
// grab numbers
let mut numbers: Vec<i32> = Vec::new();
for arg in env::args().skip(1) {
let number: i32 = arg.trim().parse()
.expect("error: could not parse arg");
numbers.push(number);
}
// sort list (mostly for median)
numbers.sort_by(|a, b| a.partial_cmp(b).unwrap());
// calculate and print results
let mean: f32 = calc_mean(&numbers);
println!("mean: {}", mean);
let median: i32 = calc_median(&numbers);
println!("median: {}", median);
let mode: i32 = calc_mode(&numbers);
println!("mode: {}", mode);
}
|