18 lines
537 B
Rust
18 lines
537 B
Rust
use yap::Tokens;
|
|
|
|
use crate::parsing::{newline, parse_digit};
|
|
|
|
pub fn parse_line(tokens: &mut impl Tokens<Item = char>) -> Option<Vec<usize>> {
|
|
tokens.optional(|t| {
|
|
let vec: Vec<usize> = t.many(|t| parse_digit(t)).collect();
|
|
(!vec.is_empty()).then(|| vec)
|
|
})
|
|
}
|
|
|
|
pub fn parse_grid(tokens: &mut impl Tokens<Item = char>) -> Option<Vec<Vec<usize>>> {
|
|
tokens.optional(|t| {
|
|
let vec: Vec<Vec<usize>> = t.sep_by(|t| parse_line(t), |t| newline(t)).collect();
|
|
(!vec.is_empty()).then(|| vec)
|
|
})
|
|
}
|