use std::io::{self, Read}; use std::collections::HashMap; use std::iter::FromIterator; fn main() -> io::Result<()> { let mut buffer = String::new(); io::stdin().read_to_string(&mut buffer)?; // Primitive Tokenize let mut frequency: HashMap<&str, u32> = HashMap::new(); for word in buffer.split_whitespace(){ *frequency.entry(&*word).or_insert(0) += 1; } // Sort by value let mut frequency = Vec::from_iter(frequency); frequency.sort_by(|&(_, a), &(_, b)| b.cmp(&a)); let stdout = io::stdout(); let mut stdout = stdout.lock(); // Push to stdout for (word, count) in frequency{ // Could also do println!("{} {}", word count) here, // but this is faster let out = &*format!("{} {}\n", word, count); io::copy(&mut out.as_bytes(), &mut stdout)?; } Ok(()) }