Skip to content
Snippets Groups Projects
Verified Commit 3f11be35 authored by Falk Rehse's avatar Falk Rehse
Browse files

Day 9

parent 66dd172e
No related branches found
No related tags found
No related merge requests found
use crate::util::*;
pub fn solve_from_str(input: &str) -> i32 {
input.lines().map(|line| regex_signed_numbers(line)).map(|series| {
let mut derivatives = Vec::new();
derivatives.push(series);
while !derivatives.last().unwrap().iter().all(|value| *value == 0) {
derivatives.push(derivatives.last().unwrap().windows(2).map(|values| values[1] - values[0]).collect());
}
derivatives.pop();
let mut prediction = 0;
for derivative in derivatives.iter().rev() {
prediction += derivative.last().unwrap();
}
prediction
}).sum()
}
use crate::util::*;
pub fn solve_from_str(input: &str) -> i32 {
input.lines().map(|line| regex_signed_numbers(line)).map(|series| {
let mut derivatives = Vec::new();
derivatives.push(series);
while !derivatives.last().unwrap().iter().all(|value| *value == 0) {
derivatives.push(derivatives.last().unwrap().windows(2).map(|values| values[1] - values[0]).collect());
}
derivatives.pop();
let mut prediction = 0;
for derivative in derivatives.iter().rev() {
prediction = derivative.first().unwrap() - prediction;
}
prediction
}).sum()
}
......@@ -14,6 +14,8 @@ mod day_7_1;
mod day_7_2;
mod day_8_1;
mod day_8_2;
mod day_9_1;
mod day_9_2;
mod util;
......@@ -22,7 +24,7 @@ use std::fs;
fn main() {
let input = fs::read_to_string("input").expect("Could not read input!");
let solution = day_8_2::solve_from_str(input.trim_end());
let solution = day_9_2::solve_from_str(input.trim_end());
println!("Solution: {}", solution);
}
......@@ -16,6 +16,13 @@ pub fn regex_positive_numbers(input: &str) -> Vec<u32> {
.collect()
}
pub fn regex_signed_numbers(input: &str) -> Vec<i32> {
let re = Regex::new(r"-?\d+").unwrap();
re.find_iter(input)
.map(|m| str::parse(m.as_str()).expect("Regex result did not parse as i32!"))
.collect()
}
pub fn regex_positive_numbers_u64(input: &str) -> Vec<u64> {
let re = Regex::new(r"\d+").unwrap();
re.find_iter(input)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment