@@ -4,6 +4,7 @@ use crate::utils::point::Point;
44use crate :: utils:: surface_range:: SurfaceRange ;
55use std:: collections:: HashMap ;
66use std:: fmt:: Debug ;
7+ use std:: str:: FromStr ;
78
89pub struct Day06 ;
910
@@ -34,26 +35,7 @@ impl Solution for Day06 {
3435
3536impl 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) ]
139139mod tests {
140140 use super :: * ;
0 commit comments