summaryrefslogtreecommitdiffstats
path: root/src/2021/19/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/2021/19/mod.rs')
-rw-r--r--src/2021/19/mod.rs29
1 files changed, 11 insertions, 18 deletions
diff --git a/src/2021/19/mod.rs b/src/2021/19/mod.rs
index 7468ccc..6a9b66a 100644
--- a/src/2021/19/mod.rs
+++ b/src/2021/19/mod.rs
@@ -93,23 +93,16 @@ struct Scanner {
}
impl Scanner {
- fn parse(lines: &mut impl Iterator<Item = String>) -> Option<Self> {
- if lines.next().is_some() {
- let mut beacons = vec![];
- for line in lines {
- if line.is_empty() {
- break;
- }
- let mut parts = line.split(',').map(|i| i.parse().unwrap());
- let x = parts.next().unwrap();
- let y = parts.next().unwrap();
- let z = parts.next().unwrap();
- beacons.push(Point::new(x, y, z))
- }
- Some(Self { beacons })
- } else {
- None
+ fn parse(lines: impl Iterator<Item = String>) -> Self {
+ let mut beacons = vec![];
+ for line in lines {
+ let mut parts = line.split(',').map(|i| i.parse().unwrap());
+ let x = parts.next().unwrap();
+ let y = parts.next().unwrap();
+ let z = parts.next().unwrap();
+ beacons.push(Point::new(x, y, z))
}
+ Self { beacons }
}
fn matches(&self, other: &HashSet<Point>) -> Option<(usize, Point)> {
@@ -166,8 +159,8 @@ pub struct Scan {
impl Scan {
fn parse(mut lines: impl Iterator<Item = String>) -> Self {
let mut scanners = vec![];
- while let Some(scanner) = Scanner::parse(lines.by_ref()) {
- scanners.push(scanner);
+ while lines.next().is_some() {
+ scanners.push(Scanner::parse(parse::chunk(&mut lines)));
}
Self { scanners }
}