aoc-rs-2021/src/day_09/parsing.rs
Jan Christian Grünhage 0416116a65 implement day 9
2021-12-10 08:17:38 +01:00

38 lines
828 B
Rust

use yap::Tokens;
use crate::parsing::{newline, parse_digit};
use super::HeightMap;
pub fn parse_map(tokens: &mut impl Tokens<Item = char>) -> HeightMap {
let map: Vec<Vec<usize>> = tokens.sep_by(|t| parse_line(t), |t| newline(t)).collect();
HeightMap::new(map)
}
pub fn parse_line(tokens: &mut impl Tokens<Item = char>) -> Option<Vec<usize>> {
let digits: Vec<usize> = tokens.many(|t| parse_digit(t)).collect();
if digits.is_empty() {
None
} else {
Some(digits)
}
}
#[cfg(test)]
mod test {
use yap::IntoTokens;
#[test]
fn parse_line() {
assert_eq!(
dbg!(super::parse_line(&mut "2199943210".into_tokens()).unwrap()).len(),
10
)
}
#[test]
fn parse_map() {
super::parse_map(&mut "01\n11".into_tokens());
}
}