Skip to content

Instantly share code, notes, and snippets.

Last active July 30, 2017 21:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save anonymous/5bd6dac9dd9ef9eb9b1b44ad3de9ecfd to your computer and use it in GitHub Desktop.
Save anonymous/5bd6dac9dd9ef9eb9b1b44ad3de9ecfd to your computer and use it in GitHub Desktop.
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