use std::collections::HashMap; use std::error::Error; use std::fs::File; use std::io::{self, BufRead}; use std::vec::Vec; fn main() -> Result<(), Box> { let file = File::open("inputs/day15.txt")?; let mut lines = io::BufReader::new(file).lines(); let starting_numbers: Vec = lines .nth(0) .unwrap() .unwrap() .split(',') .map(|n| n.parse().unwrap()) .collect(); let mut last_occurences: HashMap = HashMap::new(); let mut last_number = *starting_numbers.first().unwrap(); for turn in 1..30000001 { let spoken_number = if turn <= starting_numbers.len() { starting_numbers[turn - 1] } else if last_occurences.contains_key(&last_number) { turn as u32 - last_occurences[&last_number] } else { 0 }; last_occurences.insert(last_number, turn as u32); //println!("Spoken number {} : {}", turn, spoken_number); last_number = spoken_number; } println!("Last Number: {}", last_number); Ok(()) }