use std::collections::HashMap; use std::error::Error; use std::fs::File; use std::io::BufReader; use std::io::prelude::*; fn main() -> std::io::Result<()> { let file = match File::open("input") { Err(why) => panic!("couldn't open input: {}", Error::description(&why)), Ok(file) => file, }; let reader = BufReader::new(file); let lines = reader.lines(); for result in lines { let l = result.unwrap(); let mut freq = HashMap::new(); let mut is2 = false; let mut is3 = false; for ch in l.chars() { let count = freq.entry(ch).or_insert(0); *count += 1; } for (_ch, count) in freq { if count == 2 { is2 = true; } if count == 3 { is3 = true; } } if is2 { count2+=1; } if is3 { count3+=1; } } println!("2: {} 3: {} 2*3: {}", count2, count3, count2 * count3); Ok(()) }