2021: day05: refacto
This commit is contained in:
parent
15796e4370
commit
22c2591699
|
@ -68,31 +68,25 @@ impl Line {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn cells(&self) -> Box<dyn Iterator<Item = (usize, usize)>> {
|
fn cells(&self) -> Box<dyn Iterator<Item = (usize, usize)>> {
|
||||||
let min_x = self.from.0.min(self.to.0);
|
fn inclusive_range_any_order(a: usize, b: usize) -> Box<dyn Iterator<Item = usize>> {
|
||||||
let max_x = self.from.0.max(self.to.0);
|
if a < b {
|
||||||
|
Box::new(a..=b) as Box<dyn Iterator<Item = _>>
|
||||||
let min_y = self.from.1.min(self.to.1);
|
} else {
|
||||||
let max_y = self.from.1.max(self.to.1);
|
Box::new((b..=a).rev())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if self.is_horizontal() {
|
if self.is_horizontal() {
|
||||||
Box::new((min_x..=max_x).zip(iter::repeat(self.from.1))) as Box<dyn Iterator<Item = _>>
|
Box::new(
|
||||||
|
inclusive_range_any_order(self.from.0, self.to.0).zip(iter::repeat(self.from.1)),
|
||||||
|
) as Box<dyn Iterator<Item = _>>
|
||||||
} else if self.is_vertical() {
|
} else if self.is_vertical() {
|
||||||
Box::new(iter::repeat(self.from.0).zip(min_y..=max_y))
|
Box::new(
|
||||||
|
iter::repeat(self.from.0).zip(inclusive_range_any_order(self.from.1, self.to.1)),
|
||||||
|
)
|
||||||
} else {
|
} else {
|
||||||
let x_range = min_x..=max_x;
|
let x_range = inclusive_range_any_order(self.from.0, self.to.0);
|
||||||
let x_range = if self.from.0 < self.to.0 {
|
let y_range = inclusive_range_any_order(self.from.1, self.to.1);
|
||||||
Box::new(x_range) as Box<dyn Iterator<Item = _>>
|
|
||||||
} else {
|
|
||||||
Box::new(x_range.rev())
|
|
||||||
};
|
|
||||||
|
|
||||||
let y_range = min_y..=max_y;
|
|
||||||
let y_range = if self.from.1 < self.to.1 {
|
|
||||||
Box::new(y_range) as Box<dyn Iterator<Item = _>>
|
|
||||||
} else {
|
|
||||||
Box::new(y_range.rev())
|
|
||||||
};
|
|
||||||
|
|
||||||
Box::new(x_range.zip(y_range))
|
Box::new(x_range.zip(y_range))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue