summaryrefslogtreecommitdiffstats
path: root/src/2020/9/mod.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-18 13:21:42 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-18 13:21:42 -0500
commitd16795e44aeac17bee08363bd08c1a9672edf3d4 (patch)
tree3f70ddaf74b10db3f0e38c8a81838607f4e26a2c /src/2020/9/mod.rs
parentd1cacab50a8cab269da867ae900e903648b42cff (diff)
downloadadvent-of-code-d16795e44aeac17bee08363bd08c1a9672edf3d4.tar.gz
advent-of-code-d16795e44aeac17bee08363bd08c1a9672edf3d4.zip
factor out parsing
Diffstat (limited to 'src/2020/9/mod.rs')
-rw-r--r--src/2020/9/mod.rs24
1 files changed, 15 insertions, 9 deletions
diff --git a/src/2020/9/mod.rs b/src/2020/9/mod.rs
index 9d1bc9f..c067ca0 100644
--- a/src/2020/9/mod.rs
+++ b/src/2020/9/mod.rs
@@ -1,7 +1,10 @@
-pub fn part1() -> anyhow::Result<i64> {
- const WINDOW: usize = 25;
+const WINDOW: usize = 25;
- let list: Vec<_> = data_ints!()?.collect();
+pub fn parse(fh: std::fs::File) -> anyhow::Result<Vec<i64>> {
+ Ok(crate::util::parse::ints(crate::util::parse::lines(fh)).collect())
+}
+
+pub fn part1(list: Vec<i64>) -> anyhow::Result<i64> {
for i in 0..(list.len() - WINDOW) {
let set = &list[i..i + WINDOW];
let n = list[i + WINDOW];
@@ -13,10 +16,7 @@ pub fn part1() -> anyhow::Result<i64> {
Err(anyhow::anyhow!("failed to find invalid number"))
}
-pub fn part2() -> anyhow::Result<i64> {
- const WINDOW: usize = 25;
-
- let list: Vec<_> = data_ints!()?.collect();
+pub fn part2(list: Vec<i64>) -> anyhow::Result<i64> {
let mut invalid = None;
for i in 0..(list.len() - WINDOW) {
let set = &list[i..i + WINDOW];
@@ -63,6 +63,12 @@ fn valid(set: &[i64], n: i64) -> bool {
#[test]
fn test() {
- assert_eq!(part1().unwrap(), 373803594);
- assert_eq!(part2().unwrap(), 51152360);
+ assert_eq!(
+ part1(parse(crate::util::data(2020, 9).unwrap()).unwrap()).unwrap(),
+ 373803594
+ );
+ assert_eq!(
+ part2(parse(crate::util::data(2020, 9).unwrap()).unwrap()).unwrap(),
+ 51152360
+ );
}