| extern crate csv; | |
| use std::collections::HashMap; | |
| use std::error; | |
| use std::result; | |
| use std::path::Path; | |
| use std::process; | |
| type Result<T> = result::Result<T, Box<error::Error>>; | |
| fn process_file<P: AsRef<Path>>(path: P) -> Result<(u64, u64)> { | |
| let mut sum_by_key = HashMap::new(); | |
| let mut rdr = csv::ReaderBuilder::new() | |
| .has_headers(false) | |
| .delimiter(b'\t') | |
| .from_path(path)?; | |
| let mut record = csv::StringRecord::new(); | |
| while rdr.read_record(&mut record)? { | |
| let year = record[1].parse()?; | |
| let count = record[2].parse()?; | |
| *sum_by_key.entry(year).or_insert(0) += count; | |
| } | |
| match sum_by_key.iter().max_by_key(|&(_, &v)| v) { | |
| Some((&k, &v)) => Ok((k, v)), | |
| None => Err(format!("no records").into()), | |
| } | |
| } | |
| fn try_main() -> Result<()> { | |
| let (k, v) = process_file("/tmp/ngrams.tsv")?; | |
| if k != 2006 || v != 22569013 { | |
| Err(format!("bad result {:?} | {:?}", k, v).into()) | |
| } else { | |
| Ok(()) | |
| } | |
| } | |
| fn main() { | |
| if let Err(err) = try_main() { | |
| println!("{}", err); | |
| process::exit(1); | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment