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
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);
|
|
}
|
|
}
|
|
}
|
|
|