summaryrefslogtreecommitdiffstats
path: root/src/2021/5/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/2021/5/mod.rs')
-rw-r--r--src/2021/5/mod.rs47
1 files changed, 28 insertions, 19 deletions
diff --git a/src/2021/5/mod.rs b/src/2021/5/mod.rs
index 229ba20..2e81e34 100644
--- a/src/2021/5/mod.rs
+++ b/src/2021/5/mod.rs
@@ -72,34 +72,37 @@ impl Map {
}
}
-pub fn part1() -> anyhow::Result<i64> {
- let rx = regex::Regex::new("^(\\d+),(\\d+) -> (\\d+),(\\d+)$").unwrap();
- let mut map = Map::default();
- for line in data_lines!()? {
- let nums: Vec<usize> = rx
- .captures(&line)
+pub fn parse(
+ fh: std::fs::File,
+) -> anyhow::Result<impl Iterator<Item = Vec<usize>>> {
+ let rx = regex::Regex::new("^(\\d+),(\\d+) -> (\\d+),(\\d+)$")?;
+ Ok(crate::util::parse::lines(fh).map(move |line| {
+ rx.captures(&line)
.unwrap()
.iter()
.skip(1)
.map(|s| s.unwrap().as_str().parse())
- .collect::<Result<_, _>>()?;
+ .collect::<Result<_, _>>()
+ .unwrap()
+ }))
+}
+
+pub fn part1(
+ coords: impl Iterator<Item = Vec<usize>>,
+) -> anyhow::Result<i64> {
+ let mut map = Map::default();
+ for nums in coords {
let _ = map.mark_horizontal(nums[0], nums[1], nums[2], nums[3])
|| map.mark_vertical(nums[0], nums[1], nums[2], nums[3]);
}
Ok(map.count_overlapping().try_into()?)
}
-pub fn part2() -> anyhow::Result<i64> {
- let rx = regex::Regex::new("^(\\d+),(\\d+) -> (\\d+),(\\d+)$").unwrap();
+pub fn part2(
+ coords: impl Iterator<Item = Vec<usize>>,
+) -> anyhow::Result<i64> {
let mut map = Map::default();
- for line in data_lines!()? {
- let nums: Vec<usize> = rx
- .captures(&line)
- .unwrap()
- .iter()
- .skip(1)
- .map(|s| s.unwrap().as_str().parse())
- .collect::<Result<_, _>>()?;
+ for nums in coords {
let _ = map.mark_horizontal(nums[0], nums[1], nums[2], nums[3])
|| map.mark_vertical(nums[0], nums[1], nums[2], nums[3])
|| map.mark_diagonal(nums[0], nums[1], nums[2], nums[3])
@@ -110,6 +113,12 @@ pub fn part2() -> anyhow::Result<i64> {
#[test]
fn test() {
- assert_eq!(part1().unwrap(), 6311);
- assert_eq!(part2().unwrap(), 19929);
+ assert_eq!(
+ part1(parse(crate::util::data(2021, 5).unwrap()).unwrap()).unwrap(),
+ 6311
+ );
+ assert_eq!(
+ part2(parse(crate::util::data(2021, 5).unwrap()).unwrap()).unwrap(),
+ 19929
+ );
}