diff --git a/src/main.rs b/src/main.rs index 6f9dd42..9af7bc9 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,36 +1,43 @@ -use std::cmp::min; - struct Solution; mod arr; impl Solution { - pub fn min_abs_diff(grid: Vec>, k: i32) -> Vec> { - let k = k as usize; - let mut ans = vec![vec![0; grid[0].len()-k+1]; grid.len()-k+1]; - for i in 0..grid.len() - k+1 { - for j in 0..grid[i].len() - k+1 { - let mut arr = Vec::::with_capacity(k*k); - for l in 0..k { - for m in 0..k { - let val = grid[i+l][j+m]; - arr.push(val); - } + fn is_same(mat: &Vec>, target: &Vec>) -> bool { + for i in 0..mat.len() { + for j in 0..mat[i].len() { + if mat[i][j] != target[i][j] { + return false; } - arr.sort_unstable(); - let mut val = 1e9 as i32; - for i in 1..arr.len() { - if arr[i-1] == arr[i] { - continue; - } - val = min(val,(arr[i]-arr[i-1]).abs()); - } - ans[i][j] = if val == 1e9 as i32 { 0 } else { val }; } } - ans + true + } + pub fn find_rotation(mat: Vec>, target: Vec>) -> bool { + let mut v = vec![vec![0; mat[0].len()]; mat.len()]; + if Solution::is_same(&mat, &target) { + return true; + } + for x in 1..4 { + for i in 0..mat.len() { + for j in 0..mat[i].len() { + let (mut py, mut px) = (i, j); + for _ in 0..x { + (px, py) = (mat.len() - 1 - py, px) + } + v[py][px] = mat[i][j]; + } + } + if Self::is_same(&v, &target) { + return true; + } + } + false } } fn main() { - let result = Solution::min_abs_diff(arr::make_matrix(r#"[[1,8],[3,-2]]"#), 2); + let result = Solution::find_rotation( + arr::make_matrix(r#"[[1,0,0],[1,0,1],[0,0,1]]"#), + arr::make_matrix(r#"[[0,1,1],[0,0,0],[1,1,0]]"#), + ); println!("{:?}", result); }