summaryrefslogtreecommitdiffstats
path: root/src/2020
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2022-12-01 04:21:57 -0500
committerJesse Luehrs <doy@tozt.net>2022-12-01 04:47:05 -0500
commit18cab4c9209996aeaa29a88f8ac98e91dcfdede9 (patch)
treedbf156a4a8951facc32fefaaa83a4ea6ff38db24 /src/2020
parent3cdefe9564d7d13ce0c643c1b4433f21f2d2e839 (diff)
downloadadvent-of-code-18cab4c9209996aeaa29a88f8ac98e91dcfdede9.tar.gz
advent-of-code-18cab4c9209996aeaa29a88f8ac98e91dcfdede9.zip
simplify
Diffstat (limited to 'src/2020')
-rw-r--r--src/2020/4/mod.rs31
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);