diff options
author | Jesse Luehrs <doy@tozt.net> | 2022-12-01 04:21:57 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2022-12-01 04:47:05 -0500 |
commit | 18cab4c9209996aeaa29a88f8ac98e91dcfdede9 (patch) | |
tree | dbf156a4a8951facc32fefaaa83a4ea6ff38db24 /src/2020 | |
parent | 3cdefe9564d7d13ce0c643c1b4433f21f2d2e839 (diff) | |
download | advent-of-code-18cab4c9209996aeaa29a88f8ac98e91dcfdede9.tar.gz advent-of-code-18cab4c9209996aeaa29a88f8ac98e91dcfdede9.zip |
simplify
Diffstat (limited to 'src/2020')
-rw-r--r-- | src/2020/4/mod.rs | 31 |
1 files changed, 15 insertions, 16 deletions
diff --git a/src/2020/4/mod.rs b/src/2020/4/mod.rs index 98a35fb..b198c31 100644 --- a/src/2020/4/mod.rs +++ b/src/2020/4/mod.rs @@ -6,23 +6,22 @@ const REQUIRED_KEYS: &[&str] = pub fn parse(fh: File) -> Result<Vec<HashMap<String, String>>> { let mut res = vec![]; let mut cur = HashMap::new(); - for line in parse::lines(fh) { - if line.is_empty() { - res.push(cur); - cur = HashMap::new(); - continue; - } - - for field in line.split(' ') { - let mut parts = field.split(':'); - let key = parts.next().with_context(|| { - format!("failed to parse field '{}'", field) - })?; - let value = parts.next().with_context(|| { - format!("failed to parse field '{}'", field) - })?; - cur.insert(key.to_string(), value.to_string()); + let mut lines = parse::lines(fh).peekable(); + while lines.peek().is_some() { + for line in parse::chunk(&mut lines) { + for field in line.split(' ') { + let mut parts = field.split(':'); + let key = parts.next().with_context(|| { + format!("failed to parse field '{}'", field) + })?; + let value = parts.next().with_context(|| { + format!("failed to parse field '{}'", field) + })?; + cur.insert(key.to_string(), value.to_string()); + } } + res.push(cur); + cur = HashMap::new(); } if !cur.is_empty() { res.push(cur); |