simplify day 5 parsing
This commit is contained in:
parent
d73485111d
commit
32d1b2b370
|
@ -1,33 +1,21 @@
|
|||
use super::model::{Line, Point};
|
||||
use crate::parsing::{newline, parse_number};
|
||||
use yap::{IntoTokens, Tokens};
|
||||
use crate::parsing::{newline, parse_n, parse_number};
|
||||
use yap::Tokens;
|
||||
|
||||
pub fn parse_point(tokens: &mut impl Tokens<Item = char>) -> Option<Point> {
|
||||
let numbers: Vec<usize> = tokens
|
||||
.sep_by(|t| parse_number(t), |t| t.token(','))
|
||||
.collect();
|
||||
if numbers.len() == 2 {
|
||||
Some(Point {
|
||||
x: numbers[0],
|
||||
y: numbers[1],
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
parse_n(tokens, &|t| parse_number(t), &|t| t.token(',')).map(|point: [usize; 2]| Point {
|
||||
x: point[0],
|
||||
y: point[1],
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_line(tokens: &mut impl Tokens<Item = char>) -> Option<Line> {
|
||||
let points: Vec<Point> = tokens
|
||||
.sep_by(|t| parse_point(t), |t| t.tokens(" -> ".into_tokens()))
|
||||
.collect();
|
||||
if points.len() == 2 {
|
||||
Some(Line {
|
||||
parse_n(tokens, &|t| parse_point(t), &|t| t.tokens(" -> ".chars())).map(|points: [Point; 2]| {
|
||||
Line {
|
||||
start: points[0],
|
||||
end: points[1],
|
||||
})
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
pub fn parse_lines(tokens: &mut impl Tokens<Item = char>) -> Vec<Line> {
|
||||
|
|
Loading…
Reference in a new issue