From 2e5a3f5ae3cb950a2c3efe24d7eb6a83d082dba4 Mon Sep 17 00:00:00 2001 From: kageru Date: Sun, 8 Dec 2019 14:43:26 +0100 Subject: [PATCH] Add D8P2 in Rust --- 2019/08/src/main.rs | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/2019/08/src/main.rs b/2019/08/src/main.rs index c961dc2..57eb834 100644 --- a/2019/08/src/main.rs +++ b/2019/08/src/main.rs @@ -6,17 +6,37 @@ const WIDTH: usize = 25; const HEIGHT: usize = 6; fn main() { - let input: Vec<_> = std::io::stdin().lock().lines().next().unwrap().unwrap().chars().collect(); + let input: Vec<_> = std::io::stdin() + .lock() + .lines() + .next() + .unwrap() + .unwrap() + .chars() + .collect(); let mut counters: Vec<_> = vec![]; let mut chunks = input.chunks(WIDTH).peekable(); + let mut img = vec!['2'; WIDTH * HEIGHT]; + let mut cur_pos = (0..WIDTH * HEIGHT).cycle(); while chunks.peek().is_some() { let mut counter = Counter::new(); for _ in 0..HEIGHT { - counter.add(chunks.next().unwrap()); + let next_chunk = chunks.next().unwrap(); + for p in next_chunk { + let pos = cur_pos.next().unwrap(); + if let Some(&'2') = img.get(pos) { + img[pos] = *p; + } + } + counter.add(next_chunk); } counters.push(counter); } - + let fewest_zeros = counters.into_iter().min_by_key(|c| c['0']).unwrap(); - println!("{:?}", fewest_zeros['1'] * fewest_zeros['2']); + println!("Part 1: {}", fewest_zeros['1'] * fewest_zeros['2']); + + for line in img.chunks(WIDTH) { + println!("{}", line.into_iter().collect::().replace('0', " ")); + } }