AoC2020/src/bin/day15.rs

40 lines
1.1 KiB
Rust

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<dyn Error>> {
let file = File::open("inputs/day15.txt")?;
let mut lines = io::BufReader::new(file).lines();
let starting_numbers: Vec<u32> = lines
.nth(0)
.unwrap()
.unwrap()
.split(',')
.map(|n| n.parse().unwrap())
.collect();
let mut last_occurences: HashMap<u32, u32> = 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(())
}