From c164070d19e765029aafd02aa0385b8a4e34bed3 Mon Sep 17 00:00:00 2001 From: Andrew Coleman Date: Thu, 20 Dec 2018 10:25:11 -0500 Subject: [PATCH] day 14 solution --- 2018/day14/Cargo.lock | 4 ++++ 2018/day14/Cargo.toml | 7 ++++++ 2018/day14/input | 1 + 2018/day14/src/main.rs | 52 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 64 insertions(+) create mode 100644 2018/day14/Cargo.lock create mode 100644 2018/day14/Cargo.toml create mode 100644 2018/day14/input create mode 100644 2018/day14/src/main.rs diff --git a/2018/day14/Cargo.lock b/2018/day14/Cargo.lock new file mode 100644 index 0000000..90e7534 --- /dev/null +++ b/2018/day14/Cargo.lock @@ -0,0 +1,4 @@ +[[package]] +name = "day14" +version = "0.1.0" + diff --git a/2018/day14/Cargo.toml b/2018/day14/Cargo.toml new file mode 100644 index 0000000..b6d9962 --- /dev/null +++ b/2018/day14/Cargo.toml @@ -0,0 +1,7 @@ +[package] +name = "day14" +version = "0.1.0" +authors = ["Andrew Coleman "] +edition = "2018" + +[dependencies] diff --git a/2018/day14/input b/2018/day14/input new file mode 100644 index 0000000..f8765c7 --- /dev/null +++ b/2018/day14/input @@ -0,0 +1 @@ +939601 diff --git a/2018/day14/src/main.rs b/2018/day14/src/main.rs new file mode 100644 index 0000000..d0e5cb7 --- /dev/null +++ b/2018/day14/src/main.rs @@ -0,0 +1,52 @@ +use std::fs::File; +use std::io::{BufRead, BufReader}; + +fn mutate_chocolate(scores: &mut Vec, recipes: i32) -> (String, usize) { + let mut elf1: usize = 0; + let mut elf2: usize = 1; + loop { + let elf1score = scores[elf1]; + let elf2score = scores[elf2]; + let sum = elf1score + elf2score; + let sum_str = format!("{}", sum); + for c in sum_str.chars() { + scores.push(c as u8 - 48); + } + + if scores.len() > recipes as usize + 100000000 { + break; + } + + elf1 = (elf1 + (1 + elf1score as usize)) % scores.len(); + elf2 = (elf2 + (1 + elf2score as usize)) % scores.len(); + } + + let mut result = String::new(); + for i in 0..10 { + result.push((scores[recipes as usize + i] + 48) as char); + } + + let mut score_str = String::with_capacity(scores.len()); + for s in scores.iter() { + score_str.push((s + 48) as char); + } + //println!("{}", score_str); + let recipe_str = format!("{}", recipes); + let recipe_index = score_str.find(recipe_str.as_str()).unwrap(); + + (result, recipe_index) +} + +fn main() { + let mut line = String::new(); + BufReader::new(File::open("input").unwrap()) + .read_line(&mut line) + .unwrap(); + let recipes = line.trim().parse::().unwrap(); + let mut scores: Vec = Vec::with_capacity(1000000); + scores.push(3); + scores.push(7); + let (final_score, final_index) = mutate_chocolate(&mut scores.clone(), recipes); + println!("part 1 final score {}", final_score); + println!("recipe repeated at index {}", final_index); +}