From d8dab4ab95f68685c47f75e54323f425688c2568 Mon Sep 17 00:00:00 2001 From: LongHairedHacker Date: Tue, 15 Dec 2020 13:29:57 +0100 Subject: [PATCH] Added day 15 --- inputs/day15.txt | 1 + inputs/test.txt | 5 +---- src/bin/day15.rs | 40 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 42 insertions(+), 4 deletions(-) create mode 100644 inputs/day15.txt create mode 100644 src/bin/day15.rs diff --git a/inputs/day15.txt b/inputs/day15.txt new file mode 100644 index 0000000..fe45c3e --- /dev/null +++ b/inputs/day15.txt @@ -0,0 +1 @@ +5,1,9,18,13,8,0 diff --git a/inputs/test.txt b/inputs/test.txt index 2e961e3..c84ffe7 100644 --- a/inputs/test.txt +++ b/inputs/test.txt @@ -1,4 +1 @@ -mask = 000000000000000000000000000000X1001X -mem[42] = 100 -mask = 00000000000000000000000000000000X0XX -mem[26] = 1 +0,3,6 diff --git a/src/bin/day15.rs b/src/bin/day15.rs new file mode 100644 index 0000000..7630a99 --- /dev/null +++ b/src/bin/day15.rs @@ -0,0 +1,40 @@ +use itertools::Itertools; +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> { + let file = File::open("inputs/day15.txt")?; + let mut lines = io::BufReader::new(file).lines(); + + let starting_numbers: Vec = lines + .nth(0) + .unwrap() + .unwrap() + .split(',') + .map(|n| n.parse().unwrap()) + .collect(); + + let mut last_occurences: HashMap = 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(()) +}