summaryrefslogtreecommitdiffstats
path: root/src/2021/13/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/2021/13/mod.rs')
-rw-r--r--src/2021/13/mod.rs46
1 files changed, 21 insertions, 25 deletions
diff --git a/src/2021/13/mod.rs b/src/2021/13/mod.rs
index 0be74d1..717e032 100644
--- a/src/2021/13/mod.rs
+++ b/src/2021/13/mod.rs
@@ -4,7 +4,7 @@
use crate::util::grid::*;
#[derive(Default)]
-struct Paper {
+pub struct Paper {
grid: Grid<bool>,
}
@@ -94,10 +94,12 @@ impl std::fmt::Display for Paper {
}
}
-pub fn part1() -> anyhow::Result<i64> {
+pub fn parse(
+ fh: std::fs::File,
+) -> anyhow::Result<(Paper, Vec<(bool, usize)>)> {
let mut paper = Paper::default();
let mut folds = vec![];
- for line in data_lines!()? {
+ for line in crate::util::parse::lines(fh) {
if line.is_empty() {
continue;
}
@@ -113,31 +115,19 @@ pub fn part1() -> anyhow::Result<i64> {
paper.set(Row(y), Col(x));
}
}
+ Ok((paper, folds))
+}
+pub fn part1(
+ (mut paper, folds): (Paper, Vec<(bool, usize)>),
+) -> anyhow::Result<i64> {
paper.fold(folds[0].0, folds[0].1);
Ok(paper.total())
}
-pub fn part2() -> anyhow::Result<i64> {
- let mut paper = Paper::default();
- let mut folds = vec![];
- for line in data_lines!()? {
- if line.is_empty() {
- continue;
- }
- if let Some(fold) = line.strip_prefix("fold along ") {
- let mut fold = fold.split('=');
- let horizontal = fold.next().unwrap() == "x";
- let coord: usize = fold.next().unwrap().parse()?;
- folds.push((horizontal, coord));
- } else {
- let mut coords = line.split(',');
- let x: usize = coords.next().unwrap().parse()?;
- let y: usize = coords.next().unwrap().parse()?;
- paper.set(Row(y), Col(x));
- }
- }
-
+pub fn part2(
+ (mut paper, folds): (Paper, Vec<(bool, usize)>),
+) -> anyhow::Result<i64> {
for fold in folds {
paper.fold(fold.0, fold.1);
}
@@ -148,6 +138,12 @@ pub fn part2() -> anyhow::Result<i64> {
#[test]
fn test() {
- assert_eq!(part1().unwrap(), 678);
- assert_eq!(part2().unwrap(), 95);
+ assert_eq!(
+ part1(parse(crate::util::data(2021, 13).unwrap()).unwrap()).unwrap(),
+ 678
+ );
+ assert_eq!(
+ part2(parse(crate::util::data(2021, 13).unwrap()).unwrap()).unwrap(),
+ 95
+ );
}