diff options
Diffstat (limited to 'src/util/parse.rs')
-rw-r--r-- | src/util/parse.rs | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/src/util/parse.rs b/src/util/parse.rs index 054952a..903ad2f 100644 --- a/src/util/parse.rs +++ b/src/util/parse.rs @@ -1,11 +1,15 @@ -use std::io::{BufRead as _, Read as _}; +use crate::prelude::*; -pub fn lines(fh: std::fs::File) -> impl Iterator<Item = String> { +pub fn data(year: u16, day: u16) -> Result<File> { + File::open(format!("data/{}/{}.txt", year, day)).map_err(|e| anyhow!(e)) +} + +pub fn lines(fh: File) -> impl Iterator<Item = String> { let fh = std::io::BufReader::new(fh); fh.lines().map(|res| res.unwrap()) } -pub fn split(fh: std::fs::File, sep: u8) -> impl Iterator<Item = String> { +pub fn split(fh: File, sep: u8) -> impl Iterator<Item = String> { let fh = std::io::BufReader::new(fh); fh.split(sep) .map(|res| String::from_utf8(res.unwrap()).unwrap()) @@ -15,11 +19,11 @@ pub fn ints(iter: impl Iterator<Item = String>) -> impl Iterator<Item = i64> { iter.map(|s| s.trim().parse().unwrap()) } -pub fn bytes(fh: std::fs::File) -> impl Iterator<Item = u8> { +pub fn bytes(fh: File) -> impl Iterator<Item = u8> { fh.bytes().map(|res| res.unwrap()) } -pub fn string(fh: std::fs::File) -> String { +pub fn string(fh: File) -> String { let bytes: Vec<_> = bytes(fh).collect(); String::from_utf8(bytes).unwrap() } @@ -28,7 +32,7 @@ pub fn bool_grid( lines: impl Iterator<Item = String>, t: u8, f: u8, -) -> crate::util::grid::Grid<bool> { +) -> Grid<bool> { lines .map(|s| { s.as_bytes() @@ -48,9 +52,7 @@ pub fn bool_grid( .collect() } -pub fn digit_grid( - lines: impl Iterator<Item = String>, -) -> crate::util::grid::Grid<u8> { +pub fn digit_grid(lines: impl Iterator<Item = String>) -> Grid<u8> { lines .map(|s| { s.as_bytes() |