40 lines
1.1 KiB
Rust
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(())
|
|
}
|