File tree 1 file changed +62
-11
lines changed
1 file changed +62
-11
lines changed Original file line number Diff line number Diff line change 1
- fn main ( ) {
1
+ fn find_patterns ( lines : & Vec < String > , patterns : & Vec < ( & str , i32 ) > ) -> i32 {
2
2
let mut sum = 0 ;
3
- for line in std:: io:: stdin ( ) . lines ( ) {
4
- let mut first = None ;
3
+ for line in lines {
4
+ let mut firstoffset = None ;
5
+ let mut lastoffset = None ;
6
+ let mut first = 0 ;
5
7
let mut last = 0 ;
6
- for c in line. unwrap ( ) . bytes ( ) {
7
- if !c. is_ascii_digit ( ) {
8
- continue ;
8
+ for ( pat, val) in patterns. iter ( ) {
9
+ if let Some ( offset) = line. find ( pat) {
10
+ if firstoffset. is_none ( ) || offset < firstoffset. unwrap ( ) {
11
+ firstoffset = Some ( offset) ;
12
+ first = * val;
13
+ }
9
14
}
10
- if first. is_none ( ) {
11
- first = Some ( ( c - b'0' ) as u32 ) ;
15
+ if let Some ( offset) = line. rfind ( pat) {
16
+ if lastoffset. is_none ( ) || offset > lastoffset. unwrap ( ) {
17
+ lastoffset = Some ( offset) ;
18
+ last = * val;
19
+ }
12
20
}
13
- last = ( c - b'0' ) as u32 ;
14
21
}
15
- sum += 10 * first. unwrap ( ) + last;
22
+ sum += 10 * first + last;
16
23
}
17
- println ! ( "{}" , sum) ;
24
+ sum
25
+ }
26
+
27
+ fn main ( ) {
28
+ let lines = std:: io:: stdin ( )
29
+ . lines ( )
30
+ . map ( |r| r. unwrap ( ) )
31
+ . collect :: < Vec < _ > > ( ) ;
32
+
33
+ let patterns = vec ! [
34
+ ( "0" , 0 ) ,
35
+ ( "1" , 1 ) ,
36
+ ( "2" , 2 ) ,
37
+ ( "3" , 3 ) ,
38
+ ( "4" , 4 ) ,
39
+ ( "5" , 5 ) ,
40
+ ( "6" , 6 ) ,
41
+ ( "7" , 7 ) ,
42
+ ( "8" , 8 ) ,
43
+ ( "9" , 9 ) ,
44
+ ] ;
45
+ println ! ( "Part 1: {}" , find_patterns( & lines, & patterns) ) ;
46
+ let patterns = vec ! [
47
+ ( "0" , 0 ) ,
48
+ ( "1" , 1 ) ,
49
+ ( "2" , 2 ) ,
50
+ ( "3" , 3 ) ,
51
+ ( "4" , 4 ) ,
52
+ ( "5" , 5 ) ,
53
+ ( "6" , 6 ) ,
54
+ ( "7" , 7 ) ,
55
+ ( "8" , 8 ) ,
56
+ ( "9" , 9 ) ,
57
+ ( "zero" , 0 ) ,
58
+ ( "one" , 1 ) ,
59
+ ( "two" , 2 ) ,
60
+ ( "three" , 3 ) ,
61
+ ( "four" , 4 ) ,
62
+ ( "five" , 5 ) ,
63
+ ( "six" , 6 ) ,
64
+ ( "seven" , 7 ) ,
65
+ ( "eight" , 8 ) ,
66
+ ( "nine" , 9 ) ,
67
+ ] ;
68
+ println ! ( "Part 2: {}" , find_patterns( & lines, & patterns) ) ;
18
69
}
You can’t perform that action at this time.
0 commit comments