From f5e98e2851f4542e44a1e418fda9f770be4a3f78 Mon Sep 17 00:00:00 2001 From: Johannes Date: Sun, 25 Sep 2022 10:36:32 +0200 Subject: [PATCH] day 16 added tests --- src/tasks/day16.rs | 44 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/tasks/day16.rs b/src/tasks/day16.rs index 5318783..ae1c33c 100644 --- a/src/tasks/day16.rs +++ b/src/tasks/day16.rs @@ -4,15 +4,21 @@ use std::iter; #[allow(dead_code)] pub fn run() { - let input = "03036732577212944063491565474664" //"59750530221324194853012320069589312027523989854830232144164799228029162830477472078089790749906142587998642764059439173975199276254972017316624772614925079238407309384923979338502430726930592959991878698412537971672558832588540600963437409230550897544434635267172603132396722812334366528344715912756154006039512272491073906389218927420387151599044435060075148142946789007756800733869891008058075303490106699737554949348715600795187032293436328810969288892220127730287766004467730818489269295982526297430971411865028098708555709525646237713045259603175397623654950719275982134690893685598734136409536436003548128411943963263336042840301380655801969822" - .chars() - .map(|it| it.to_digit(10).unwrap() as i32) - .collect_vec(); + let input = "03036732577212944063491565474664"; + // let input = "59750530221324194853012320069589312027523989854830232144164799228029162830477472078089790749906142587998642764059439173975199276254972017316624772614925079238407309384923979338502430726930592959991878698412537971672558832588540600963437409230550897544434635267172603132396722812334366528344715912756154006039512272491073906389218927420387151599044435060075148142946789007756800733869891008058075303490106699737554949348715600795187032293436328810969288892220127730287766004467730818489269295982526297430971411865028098708555709525646237713045259603175397623654950719275982134690893685598734136409536436003548128411943963263336042840301380655801969822"; + let input = to_digits(input); task1(input.clone()); task2(input.clone()); } -fn task1(input: Vec) { +fn to_digits(input: &str) -> Vec { + input + .chars() + .map(|it| it.to_digit(10).unwrap() as i32) + .collect_vec() +} + +fn task1(input: Vec) -> String { let p = [0, 1, 0, -1]; let result = (0..100).fold(input, |old, _| { (1..=old.len()) @@ -30,10 +36,12 @@ fn task1(input: Vec) { }) .collect_vec() }); - println!("Task 1: {:.*}", 8, result.iter().join("")); + let result = format!("{:.*}", 8, result.iter().join("")); + println!("Task 1: {result}"); + result } -fn task2(input: Vec) { +fn task2(input: Vec) -> String { let l = input.len() * 10_000; let big_input = iter::repeat(input.clone().into_iter()) .flatten() @@ -74,4 +82,26 @@ fn task2(input: Vec) { let offset = input[0..7].iter().join("").parse::().unwrap(); let message = result[offset..offset + 8].iter().join(""); println!("Task 2: {}", message); + message +} + +#[cfg(test)] +mod test { + use super::*; + + #[test] + fn test_part_1() { + assert_eq!(task1(to_digits("80871224585914546619083218645595")), "24176176"); + assert_eq!(task1(to_digits("19617804207202209144916044189917")), "73745418"); + assert_eq!(task1(to_digits("69317163492948606335995924319873")), "52432133"); + } + + #[test] + fn test_part_2() { + + assert_eq!(task2(to_digits("02935109699940807407585447034323")), "78725270"); + assert_eq!(task2(to_digits("03036732577212944063491565474664")), "84462026"); + assert_eq!(task2(to_digits("03081770884921959731165446850517")), "53553731"); + + } }