@@ -31,29 +31,23 @@ impl Day06 {
3131 input
3232 . lines ( )
3333 . map ( |line| -> Box < dyn Instruction > {
34- if line. starts_with ( "turn on " ) {
35- let trimmed = line. trim_start_matches ( "turn on " ) ;
36-
37- Box :: new ( TurnOn :: from ( self . parse_points ( trimmed) ) )
38- } else if line. starts_with ( "turn off " ) {
39- let trimmed = line. trim_start_matches ( "turn off " ) ;
40-
41- Box :: new ( TurnOff :: from ( self . parse_points ( trimmed) ) )
42- } else if line. starts_with ( "toggle " ) {
43- let trimmed = line. trim_start_matches ( "toggle " ) ;
44-
45- Box :: new ( Toggle :: from ( self . parse_points ( trimmed) ) )
34+ let parts = line. split_whitespace ( ) . collect :: < Vec < _ > > ( ) ;
35+
36+ if parts[ 0 ] == "turn" && parts[ 1 ] == "on" {
37+ Box :: new ( TurnOn :: from ( self . parse_points ( parts[ 2 ] , parts[ 4 ] ) ) )
38+ } else if parts[ 0 ] == "turn" && parts[ 1 ] == "off" {
39+ Box :: new ( TurnOff :: from ( self . parse_points ( parts[ 2 ] , parts[ 4 ] ) ) )
40+ } else if parts[ 0 ] == "toggle" {
41+ Box :: new ( Toggle :: from ( self . parse_points ( parts[ 1 ] , parts[ 3 ] ) ) )
4642 } else {
4743 unreachable ! ( )
4844 }
4945 } )
5046 . collect ( )
5147 }
5248
53- fn parse_points ( & self , points_str : & str ) -> ( Point , Point ) {
54- let p = points_str. split_once ( " through " ) . unwrap ( ) ;
55-
56- ( p. 0 . parse ( ) . unwrap ( ) , p. 1 . parse ( ) . unwrap ( ) )
49+ fn parse_points ( & self , from_str : & str , to_str : & str ) -> ( Point , Point ) {
50+ ( from_str. parse ( ) . unwrap ( ) , to_str. parse ( ) . unwrap ( ) )
5751 }
5852}
5953
0 commit comments