File tree Expand file tree Collapse file tree 2 files changed +82
-0
lines changed Expand file tree Collapse file tree 2 files changed +82
-0
lines changed Original file line number Diff line number Diff line change 1+ MMMSXXMASM
2+ MSAMXMSMSA
3+ AMXSXMAAMM
4+ MSAMASMSMX
5+ XMASAMXAMM
6+ XXAMMXXAMA
7+ SMSMSASXSS
8+ SAXAMASAAA
9+ MAMMMXMMMM
10+ MXMXAXMASX
Original file line number Diff line number Diff line change 1+ advent_of_code:: solution!( 4 ) ;
2+
3+ pub fn part_one ( input : & str ) -> Option < u32 > {
4+ let matrix: Vec < Vec < char > > = input. lines ( ) . map ( |line| line. chars ( ) . collect ( ) ) . collect ( ) ;
5+ let m = matrix. len ( ) as i32 ;
6+ let n = matrix[ 0 ] . len ( ) as i32 ;
7+
8+ let check_pos = |row : i32 , col : i32 | -> i32 {
9+ let xmas = "XMAS" ;
10+ let dirs = [
11+ ( 0 , 1 ) ,
12+ ( 0 , -1 ) ,
13+ ( -1 , 0 ) ,
14+ ( 1 , 0 ) ,
15+ ( -1 , -1 ) ,
16+ ( -1 , 1 ) ,
17+ ( 1 , -1 ) ,
18+ ( 1 , 1 ) ,
19+ ] ;
20+
21+ let mut result = 0 ;
22+
23+ ' outer: for ( dr, dc) in dirs {
24+ for i in 0 ..4 {
25+ let ( r, c) = ( row + ( i * dr) , col + ( i * dc) ) ;
26+ if r >= 0 && c >= 0 && r < m && c < n {
27+ if xmas. chars ( ) . nth ( i as usize ) . unwrap ( )
28+ != matrix[ r as usize ] [ c as usize ]
29+ {
30+ continue ' outer;
31+ }
32+ } else {
33+ continue ' outer;
34+ }
35+ }
36+ result += 1 ;
37+ }
38+
39+ return result;
40+ } ;
41+
42+ let mut count = 0 ;
43+
44+ for i in 0 ..m {
45+ for j in 0 ..n {
46+ count += check_pos ( i, j) ;
47+ }
48+ }
49+
50+ Some ( count as u32 )
51+ }
52+
53+ pub fn part_two ( input : & str ) -> Option < u32 > {
54+ None
55+ }
56+
57+ #[ cfg( test) ]
58+ mod tests {
59+ use super :: * ;
60+
61+ #[ test]
62+ fn test_part_one ( ) {
63+ let result = part_one ( & advent_of_code:: template:: read_file ( "examples" , DAY ) ) ;
64+ assert_eq ! ( result, Some ( 18 ) ) ;
65+ }
66+
67+ #[ test]
68+ fn test_part_two ( ) {
69+ let result = part_two ( & advent_of_code:: template:: read_file ( "examples" , DAY ) ) ;
70+ assert_eq ! ( result, None ) ;
71+ }
72+ }
You can’t perform that action at this time.
0 commit comments