You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

29 lines
884 B

use std::collections::HashMap;
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut stdin_lines = stdin.lock().lines();
let seed: Vec<usize> = stdin_lines.next().unwrap().unwrap().split(",")
.map(|entry| entry.parse().unwrap())
.collect();
let mut last_occurrences = HashMap::new();
for i in 0..seed.len()-1 {
last_occurrences.insert(seed[i], i+1);
}
let mut last_number = seed[seed.len()-1];
for turn in seed.len()+1.. {
let next_number = match last_occurrences.get(&last_number) {
Some(&last_occurrence) => (turn-1) - last_occurrence,
None => 0,
};
last_occurrences.insert(last_number, turn-1);
last_number = next_number;
if turn == 2020 || (turn % 1_000_000) == 0 {
println!("{}: {}", turn, last_number);
}
}
}