File tree Expand file tree Collapse file tree 3 files changed +80
-0
lines changed Expand file tree Collapse file tree 3 files changed +80
-0
lines changed Original file line number Diff line number Diff line change
1
+ [package ]
2
+ name = " day04"
3
+ version = " 0.1.0"
4
+ authors = [" Dennis Pettersson <mail@dennispettersson.se>" ]
5
+ edition = " 2018"
6
+
7
+ # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
8
+
9
+ [dependencies ]
Original file line number Diff line number Diff line change
1
+ #![ feature( label_break_value) ]
2
+
3
+ use std:: io:: Result ;
4
+
5
+ mod part_01;
6
+
7
+ use part_01:: main as part_01;
8
+
9
+ const PUZZLE_INPUT : & ' static str = "347312-805915" ;
10
+
11
+ fn main ( ) -> Result < ( ) > {
12
+ ' part_01: {
13
+ println ! ( "part_01: {}" , part_01( & PUZZLE_INPUT ) . unwrap( ) ) ;
14
+ }
15
+
16
+ ' part_02: { }
17
+ Ok ( ( ) )
18
+ }
19
+
20
+ #[ cfg( test) ]
21
+ mod tests {
22
+ use super :: * ;
23
+
24
+ #[ test]
25
+ fn it_gets_the_right_answer_for_examples ( ) {
26
+ assert_eq ! ( true , part_01:: meet_criteria( "111111" ) ) ;
27
+ assert_eq ! ( false , part_01:: meet_criteria( "223450" ) ) ;
28
+ assert_eq ! ( false , part_01:: meet_criteria( "123789" ) ) ;
29
+ }
30
+ }
Original file line number Diff line number Diff line change
1
+ use std:: io:: Result ;
2
+
3
+ pub fn meet_criteria ( input : & str ) -> bool {
4
+ let bytes: Vec < _ > = input
5
+ . chars ( )
6
+ . map ( |c| c. to_string ( ) . parse :: < u8 > ( ) . unwrap ( ) )
7
+ . collect ( ) ;
8
+
9
+ let mut pairs = false ;
10
+ let mut never_decrese = true ;
11
+ for i in 1 ..bytes. len ( ) {
12
+ let current = bytes[ i] ;
13
+ let prev = bytes[ i - 1 ] ;
14
+ if never_decrese == false {
15
+ break ;
16
+ }
17
+
18
+ pairs = pairs || current == prev;
19
+
20
+ never_decrese = current >= prev;
21
+ }
22
+
23
+ pairs && never_decrese
24
+ }
25
+
26
+ pub fn main ( input : & str ) -> Result < u32 > {
27
+ let range = & input
28
+ . split ( '-' )
29
+ . map ( |part| part. parse :: < u32 > ( ) . unwrap ( ) )
30
+ . collect :: < Vec < u32 > > ( ) ;
31
+
32
+ let mut count = 0 ;
33
+ for i in range[ 0 ] ..range[ 1 ] {
34
+ let string = i. to_string ( ) ;
35
+ if meet_criteria ( & string) {
36
+ count += 1 ;
37
+ }
38
+ }
39
+
40
+ Ok ( count)
41
+ }
You can’t perform that action at this time.
0 commit comments