@@ -22,9 +22,18 @@ pub struct Solution {}
2222
2323// submission codes start here
2424
25+ // mention the integer divition
2526impl Solution {
2627 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
2837 }
2938}
3039
@@ -35,5 +44,10 @@ mod tests {
3544 use super :: * ;
3645
3746 #[ 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+ }
3953}
0 commit comments