@@ -11,68 +11,73 @@ struct Range {
1111fn is_double ( n : Id ) -> bool {
1212 let s = n. to_string ( ) ;
1313 let len = s. len ( ) ;
14- if len % 2 != 0 {
14+ if ! len. is_multiple_of ( 2 ) {
1515 return false ;
1616 }
1717
1818 let mid = len / 2 ;
19- & s[ ..mid] == & s[ mid..]
19+ s[ ..mid] == s[ mid..]
2020}
2121
2222impl Range {
2323 pub fn get_doubles ( & self ) -> Vec < Id > {
24- ( self . lower ..=self . upper ) . into_iter ( ) . filter ( |& e|is_double ( e) ) . collect ( )
24+ ( self . lower ..=self . upper )
25+ . filter ( |& e| is_double ( e) )
26+ . collect ( )
2527 }
2628}
2729
2830#[ derive( Debug ) ]
2931enum ParseRangeError {
3032 CannotParseRange ,
31- NotExactlyTwoNumbers
33+ NotExactlyTwoNumbers ,
3234}
3335
3436impl FromStr for Range {
3537 type Err = ParseRangeError ;
3638
3739 fn from_str ( s : & str ) -> Result < Self , Self :: Err > {
3840 let parts = s. split ( '-' ) . collect :: < Vec < & str > > ( ) ;
39- if parts. len ( ) != 2 {
41+ if parts. len ( ) != 2 {
4042 return Err ( ParseRangeError :: NotExactlyTwoNumbers ) ;
4143 }
4244
4345 if let [ lower, upper] = parts. as_slice ( ) {
44- match ( lower. parse :: < Id > ( ) , upper. parse :: < Id > ( ) ) {
45- ( Ok ( lower_number) , Ok ( upper_number) ) => {
46- return Ok ( Range { lower : lower_number, upper : upper_number} ) ;
47- } ,
48- _ => Err ( ParseRangeError :: CannotParseRange )
46+ match ( lower. parse :: < Id > ( ) , upper. parse :: < Id > ( ) ) {
47+ ( Ok ( lower_number) , Ok ( upper_number) ) => Ok ( Range {
48+ lower : lower_number,
49+ upper : upper_number,
50+ } ) ,
51+ _ => Err ( ParseRangeError :: CannotParseRange ) ,
4952 }
5053 } else {
51- return Err ( ParseRangeError :: CannotParseRange )
54+ Err ( ParseRangeError :: CannotParseRange )
5255 }
5356 }
54-
5557}
5658
5759fn parse_ranges ( input : & str ) -> Option < Vec < Range > > {
5860 input
59- . trim ( )
60- . split ( ',' )
61- . map ( |line|line. parse ( ) )
62- . collect :: < Result < Vec < _ > , _ > > ( )
63- . ok ( )
61+ . trim ( )
62+ . split ( ',' )
63+ . map ( |line| line. parse ( ) )
64+ . collect :: < Result < Vec < _ > , _ > > ( )
65+ . ok ( )
6466}
6567
66- fn solve_1 ( ranges : & Vec < Range > ) -> Id {
67- ranges. into_iter ( ) . map ( |range| range. get_doubles ( ) . iter ( ) . sum :: < Id > ( ) ) . sum ( )
68+ fn solve_1 ( ranges : & [ Range ] ) -> Id {
69+ ranges
70+ . iter ( )
71+ . map ( |range| range. get_doubles ( ) . iter ( ) . sum :: < Id > ( ) )
72+ . sum ( )
6873}
6974
7075pub fn run ( ) {
7176 let input = include_str ! ( "2_input" ) ;
7277
7378 if let Some ( ranges) = parse_ranges ( input) {
7479 println ! ( "Day 2 Part 1: {}" , solve_1( & ranges) ) ;
75- }
80+ }
7681}
7782
7883#[ cfg( test) ]
@@ -112,67 +117,100 @@ mod tests {
112117
113118 #[ test]
114119 fn test_range_11_22 ( ) {
115- let range = Range { lower : 11 , upper : 22 } ;
120+ let range = Range {
121+ lower : 11 ,
122+ upper : 22 ,
123+ } ;
116124 assert_eq ! ( range. get_doubles( ) , vec![ 11 , 22 ] ) ;
117125 }
118126
119127 #[ test]
120128 fn test_range_95_115 ( ) {
121- let range = Range { lower : 95 , upper : 115 } ;
129+ let range = Range {
130+ lower : 95 ,
131+ upper : 115 ,
132+ } ;
122133 assert_eq ! ( range. get_doubles( ) , vec![ 99 ] ) ;
123134 }
124135
125136 #[ test]
126137 fn test_range_998_1012 ( ) {
127- let range = Range { lower : 998 , upper : 1012 } ;
138+ let range = Range {
139+ lower : 998 ,
140+ upper : 1012 ,
141+ } ;
128142 assert_eq ! ( range. get_doubles( ) , vec![ 1010 ] ) ;
129143 }
130144
131145 #[ test]
132146 fn test_range_1188511880_1188511890 ( ) {
133- let range = Range { lower : 1188511880 , upper : 1188511890 } ;
147+ let range = Range {
148+ lower : 1188511880 ,
149+ upper : 1188511890 ,
150+ } ;
134151 assert_eq ! ( range. get_doubles( ) , vec![ 1188511885 ] ) ;
135152 }
136153
137154 #[ test]
138155 fn test_range_222220_222224 ( ) {
139- let range = Range { lower : 222220 , upper : 222224 } ;
156+ let range = Range {
157+ lower : 222220 ,
158+ upper : 222224 ,
159+ } ;
140160 assert_eq ! ( range. get_doubles( ) , vec![ 222222 ] ) ;
141161 }
142162
143163 #[ test]
144164 fn test_range_1698522_1698528 ( ) {
145- let range = Range { lower : 1698522 , upper : 1698528 } ;
165+ let range = Range {
166+ lower : 1698522 ,
167+ upper : 1698528 ,
168+ } ;
146169 assert_eq ! ( range. get_doubles( ) , Vec :: <Id >:: new( ) ) ;
147170 }
148171
149172 #[ test]
150173 fn test_range_446443_446449 ( ) {
151- let range = Range { lower : 446443 , upper : 446449 } ;
174+ let range = Range {
175+ lower : 446443 ,
176+ upper : 446449 ,
177+ } ;
152178 assert_eq ! ( range. get_doubles( ) , vec![ 446446 ] ) ;
153179 }
154180
155181 #[ test]
156182 fn test_range_38593856_38593862 ( ) {
157- let range = Range { lower : 38593856 , upper : 38593862 } ;
183+ let range = Range {
184+ lower : 38593856 ,
185+ upper : 38593862 ,
186+ } ;
158187 assert_eq ! ( range. get_doubles( ) , vec![ 38593859 ] ) ;
159188 }
160189
161190 #[ test]
162191 fn test_range_565653_565659 ( ) {
163- let range = Range { lower : 565653 , upper : 565659 } ;
192+ let range = Range {
193+ lower : 565653 ,
194+ upper : 565659 ,
195+ } ;
164196 assert_eq ! ( range. get_doubles( ) , Vec :: <Id >:: new( ) ) ;
165197 }
166198
167199 #[ test]
168200 fn test_range_824824821_824824827 ( ) {
169- let range = Range { lower : 824824821 , upper : 824824827 } ;
201+ let range = Range {
202+ lower : 824824821 ,
203+ upper : 824824827 ,
204+ } ;
170205 assert_eq ! ( range. get_doubles( ) , Vec :: <Id >:: new( ) ) ;
171206 }
172207
173208 #[ test]
174209 fn test_range_2121212118_2121212124 ( ) {
175- let range = Range { lower : 2121212118 , upper : 2121212124 } ;
210+ let range = Range {
211+ lower : 2121212118 ,
212+ upper : 2121212124 ,
213+ } ;
176214 assert_eq ! ( range. get_doubles( ) , Vec :: <Id >:: new( ) ) ;
177215 }
178216
@@ -191,7 +229,8 @@ mod tests {
191229 fn test_example_sum ( ) {
192230 let input = "11-22,95-115,998-1012,1188511880-1188511890,222220-222224,1698522-1698528,446443-446449,38593856-38593862,565653-565659,824824821-824824827,2121212118-2121212124" ;
193231 let ranges = parse_ranges ( input) . unwrap ( ) ;
194- let sum: u64 = ranges. iter ( )
232+ let sum: u64 = ranges
233+ . iter ( )
195234 . flat_map ( |r| ( r. lower ..=r. upper ) . filter ( |& n| is_double ( n) ) )
196235 . map ( |n| n as u64 )
197236 . sum ( ) ;
0 commit comments