use std::env::args; use std::fs::File; use std::io::BufRead; use std::io::BufReader; fn dist(a: i32, numbers: &Vec) -> i32 { return numbers.iter().map(|b| (a - b).abs()).sum(); } fn main() { let path = args().nth(1).unwrap(); let file = File::open(path).unwrap(); let mut numbers: Vec = vec![]; for line in BufReader::new(file).lines() { let mut ns = line .unwrap() .split(",") .map(|p| p.parse::().unwrap()) .collect(); numbers.append(&mut ns); } let mut a_min = *numbers.iter().min().unwrap(); let mut a_max = *numbers.iter().max().unwrap(); while a_max - a_min > 1 { let a = (a_min + a_max) / 2; if dist(a, &numbers) > dist(a + 1, &numbers) { a_min = a; } else { a_max = a; } } let d_min = dist(a_min, &numbers); let d_max = dist(a_max, &numbers); if d_min < d_max { print!("{} {}\n", a_min, d_min); } else { print!("{} {}\n", a_max, d_max); } }