I am writing a small program that finds a winner of a marathon.
Everything seems logical until I try to filter the vector for runners that are late for some amount of time. The vector remains same after the filter function, and if use iter_mut()
it states type errors.
fn main() {
let mut input_line = String::new();
std::io::stdin().read_line(&mut input_line);
let n = input_line.trim().parse::<u8>().unwrap();
let mut v = Vec::with_capacity(n as usize);
for _ in 0..n {
let mut input_line = String::new();
std::io::stdin().read_line(&mut input_line);
let separated = input_line.trim().split(":").collect::<Vec<_>>();
let hours = separated[0].parse::<u8>().unwrap();
let minutes = separated[1].parse::<u8>().unwrap();
let seconds = separated[2].parse::<u8>().unwrap();
v.push((hours, minutes, seconds));
}
//println!("{:?}", v);
filter_hours(&mut v);
filter_minutes(&mut v);
filter_seconds(&mut v);
println!("{:?}", v[0]);
println!("{:?}", v);
}
fn filter_hours(v: &mut Vec<(u8, u8, u8)>) {
let (mut minimum, _, _) = v[0];
for &i in v.iter() {
let (h, _, _) = i;
if h < minimum {
minimum = h;
}
}
v.iter().filter(|&&(h, _, _)| h == minimum);
}
fn filter_minutes(v: &mut Vec<(u8, u8, u8)>) {
let (_, mut minimum, _) = v[0];
for &i in v.iter() {
let (_, m, _) = i;
if m < minimum {
minimum = m;
}
}
v.iter().filter(|&&(_, m, _)| m == minimum);
}
fn filter_seconds(v: &mut Vec<(u8, u8, u8)>) {
let (_, _, mut minimum) = v[0];
for &i in v.iter() {
let (_, _, s) = i;
if s < minimum {
minimum = s;
}
}
v.iter().filter(|&&(_, _, s)| s == minimum);
}