@@ -22,9 +22,18 @@ pub struct Solution {}
22
22
23
23
// submission codes start here
24
24
25
+ // mention the integer divition
25
26
impl Solution {
26
27
pub fn compute_area ( a : i32 , b : i32 , c : i32 , d : i32 , e : i32 , f : i32 , g : i32 , h : i32 ) -> i32 {
27
- 0
28
+ let center1 = ( ( a+c) , ( b+d) ) ;
29
+ let center2 = ( ( e+g) , ( f+h) ) ;
30
+ let rect1 = ( c-a, d-b) ;
31
+ let rect2 = ( g-e, h-f) ;
32
+ let x_intersect = i32:: min ( ( rect1. 0 + rect2. 0 - ( center1. 0 -center2. 0 ) . abs ( ) ) , i32:: min ( 2 * rect1. 0 , 2 * rect2. 0 ) ) / 2 ;
33
+ let x_intersect = if x_intersect < 0 { 0 } else { x_intersect } ;
34
+ let y_intersect = i32:: min ( ( rect1. 1 + rect2. 1 - ( center1. 1 -center2. 1 ) . abs ( ) ) , i32:: min ( 2 * rect1. 1 , 2 * rect2. 1 ) ) / 2 ;
35
+ let y_intersect = if y_intersect < 0 { 0 } else { y_intersect } ;
36
+ rect1. 0 * rect1. 1 - x_intersect * y_intersect + rect2. 0 * rect2. 1
28
37
}
29
38
}
30
39
@@ -35,5 +44,10 @@ mod tests {
35
44
use super :: * ;
36
45
37
46
#[ test]
38
- fn test_223 ( ) { }
47
+ fn test_223 ( ) {
48
+ assert_eq ! ( Solution :: compute_area( 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ) , 0 ) ;
49
+ assert_eq ! ( Solution :: compute_area( -3 , 0 , 3 , 4 , 0 , -1 , 9 , 2 ) , 45 ) ;
50
+ assert_eq ! ( Solution :: compute_area( -2 , -2 , 2 , 2 , -2 , -2 , 2 , 2 ) , 16 ) ;
51
+ assert_eq ! ( Solution :: compute_area( -2 , -2 , 2 , 2 , -1 , 4 , 1 , 6 ) , 20 ) ;
52
+ }
39
53
}
0 commit comments