From fc0a1a43afab8c0939d51d1582095764ed7df0b4 Mon Sep 17 00:00:00 2001 From: Bert Peters Date: Thu, 3 Dec 2020 19:39:45 +0100 Subject: [PATCH] Simplify read_char_grid --- 2020/src/common.rs | 26 +++++--------------------- 1 file changed, 5 insertions(+), 21 deletions(-) diff --git a/2020/src/common.rs b/2020/src/common.rs index 84fca41..c31cc84 100644 --- a/2020/src/common.rs +++ b/2020/src/common.rs @@ -35,27 +35,11 @@ where } pub fn read_char_grid(input: &mut dyn Read) -> Vec> { - let mut reader = BufReader::new(input); - let mut buffer = Vec::new(); - - let mut grid = Vec::new(); - - while let Ok(read) = reader.read_until(b'\n', &mut buffer) { - if read == 0 { - break; - } - - let line: &[u8] = if let Some(&b'\n') = buffer.last() { - &buffer[..(buffer.len() - 1)] - } else { - &buffer[..] - }; - - grid.push(line.to_owned()); - buffer.clear(); - } - - grid + BufReader::new(input) + .lines() + // filter_map avoids an expensive unwrap and we know our input is valid ascii + .filter_map(|s| s.ok().map(String::into_bytes)) + .collect() } /// An interface to count elements in particular categories.