From 4d3ecc4bd9362729461459be1cbfd088d00f385a Mon Sep 17 00:00:00 2001 From: inga-lovinde <52715130+inga-lovinde@users.noreply.github.com> Date: Wed, 16 Dec 2020 18:13:25 +0100 Subject: [PATCH] Solution for day 15 --- day15/Cargo.toml | 9 +++++++++ day15/src/main.rs | 29 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 day15/Cargo.toml create mode 100644 day15/src/main.rs diff --git a/day15/Cargo.toml b/day15/Cargo.toml new file mode 100644 index 0000000..45f6143 --- /dev/null +++ b/day15/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "day15" +version = "0.1.0" +authors = ["inga-lovinde <52715130+inga-lovinde@users.noreply.github.com>"] +edition = "2018" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/day15/src/main.rs b/day15/src/main.rs new file mode 100644 index 0000000..72bb0fd --- /dev/null +++ b/day15/src/main.rs @@ -0,0 +1,29 @@ +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 = 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); + } + } +}