Skip to content

Commit 4014206

Browse files
committed
refactor(06/2015): implement FromStr to parse
1 parent e85f09b commit 4014206

File tree

1 file changed

+20
-20
lines changed

1 file changed

+20
-20
lines changed

src/solutions/year2015/day06.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ use crate::utils::point::Point;
44
use crate::utils::surface_range::SurfaceRange;
55
use std::collections::HashMap;
66
use std::fmt::Debug;
7+
use std::str::FromStr;
78

89
pub struct Day06;
910

@@ -34,26 +35,7 @@ impl Solution for Day06 {
3435

3536
impl Day06 {
3637
fn parse(&self, input: &str) -> Vec<Instruction> {
37-
input
38-
.lines()
39-
.map(|line| {
40-
let parts = line.split_whitespace().collect::<Vec<_>>();
41-
42-
if parts[0] == "turn" && parts[1] == "on" {
43-
Instruction::new(TurnOn, self.parse_points(parts[2], parts[4]))
44-
} else if parts[0] == "turn" && parts[1] == "off" {
45-
Instruction::new(TurnOff, self.parse_points(parts[2], parts[4]))
46-
} else if parts[0] == "toggle" {
47-
Instruction::new(Toggle, self.parse_points(parts[1], parts[3]))
48-
} else {
49-
unreachable!()
50-
}
51-
})
52-
.collect()
53-
}
54-
55-
fn parse_points(&self, from_str: &str, to_str: &str) -> (Point, Point) {
56-
(from_str.parse().unwrap(), to_str.parse().unwrap())
38+
input.lines().map(|line| line.parse().unwrap()).collect()
5739
}
5840

5941
fn apply_instructions<F>(&self, input: &str, mut func: F) -> LightGrid
@@ -135,6 +117,24 @@ impl Instruction {
135117
}
136118
}
137119

120+
impl FromStr for Instruction {
121+
type Err = ();
122+
123+
fn from_str(s: &str) -> Result<Self, Self::Err> {
124+
let parts = s.split_whitespace().collect::<Vec<_>>();
125+
126+
if parts[0] == "turn" && parts[1] == "on" {
127+
Ok(Self::new(TurnOn, (parts[2].parse()?, parts[4].parse()?)))
128+
} else if parts[0] == "turn" && parts[1] == "off" {
129+
Ok(Self::new(TurnOff, (parts[2].parse()?, parts[4].parse()?)))
130+
} else if parts[0] == "toggle" {
131+
Ok(Self::new(Toggle, (parts[1].parse()?, parts[3].parse()?)))
132+
} else {
133+
unreachable!()
134+
}
135+
}
136+
}
137+
138138
#[cfg(test)]
139139
mod tests {
140140
use super::*;

0 commit comments

Comments
 (0)