From 5abf4a2916c430bbde2d05a3017758aadf3459bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20B=C3=BChler?= Date: Mon, 9 Dec 2019 09:13:06 +0100 Subject: [PATCH] day8 tests --- day8/src/main.rs | 50 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 37 insertions(+), 13 deletions(-) diff --git a/day8/src/main.rs b/day8/src/main.rs index 42e4c89..4e835f1 100644 --- a/day8/src/main.rs +++ b/day8/src/main.rs @@ -1,10 +1,25 @@ +fn merge_layers(layers: &[&[u8]]) -> Vec { + let mut image = Vec::new(); + image.resize(layers[0].len(), 2); + for layer in layers { + for (ndx, b) in layer.into_iter().enumerate() { + let digit = *b - b'0'; + if image[ndx] != 2 { continue; } + image[ndx] = digit; + } + } + image +} + +fn split_layers(input: &[u8], image_size: usize) -> Vec<&[u8]> { + assert_eq!(input.len() % image_size, 0); + input.chunks(image_size).collect::>() +} + fn main() { - let input = include_str!("input.txt").as_bytes(); + let input = include_bytes!("input.txt"); + let layers = split_layers(input, 6*25); - const LAYER_SIZE: usize = 6*25; - assert_eq!(input.len() % LAYER_SIZE, 0); - - let layers = input.chunks(LAYER_SIZE).collect::>(); let min0_product12 = layers.iter().map(|layer| { let mut count = [0, 0, 0]; for b in *layer { @@ -17,14 +32,7 @@ fn main() { }).min_by_key(|(zeroes, _product12)| *zeroes).unwrap().1; println!("Product of counts of 1 and 2 for the layer with min 0s: {}", min0_product12); - let mut image = [2u8; LAYER_SIZE]; - for layer in layers { - for (ndx, b) in layer.into_iter().enumerate() { - let digit = *b - b'0'; - if image[ndx] != 2 { continue; } - image[ndx] = digit; - } - } + let image = merge_layers(&layers); for row in image.chunks(25) { for cell in row { @@ -36,3 +44,19 @@ fn main() { println!(""); } } + +#[cfg(test)] +mod day8test { + use super::*; + + #[test] + fn examples1() { + // no runnable examples + } + + #[test] + fn examples2() { + let layers = split_layers(b"0222112222120000", 4); + assert_eq!(merge_layers(&layers), [0, 1, 1, 0]); + } +}