Untitled

 avatar
unknown
csharp
3 months ago
1.2 kB
7
Indexable
public class NeighborSum {
   private record Pair(int adjSum, dgSum);
   int n;
   Dictionary<int, Pair> map;
   int[][] adjDir = new [
	[0,1],[0,-1],[1,0],[-1,0]
	];
   int[][] dgDir = new [
	[1,1],[1,-1],[-1,1],[-1,-1]
	];
   public NeighborSum(int[][] grid) {
	map = new();
      	n = grid[0].Length;
	if(n == 0)
		return;
	for(int x = 0;x<n;x++){
		for(int y=0;y<n;y++){
			int adj = 0;
			int dg = 0;
			for(int i=0;i<4;i++){ // 0,0
				int nR = x + adjDir[i][0];  
				int nC = y + adjDir[i][1];
				if(nR > 0 && nR < n && nC > 0 && nC < n){
					adj += grid[nR][nC];
				}
			}
			for(int i=0;i<4;i++){
				int nR = x + dgDir[i][0];
				int nC = y + dgDir[i][1];
				if(nR > 0 && nR < n && nC > 0 && nC < n){
					dg += grid[nR][nC];
				}
			}
			map[grid[x][y]] = new Pair(adj, dg);
		}
	}
   }
   public int AdjacentSum(int value) {
       // handle not available cases
	if(map.Count == 0)
		return -1;
	if(map.ContainsKey(value))
		return map[value].adjSum;
	else
		return -1;
   }
   public int DiagonalSum(int value) {
       if(map.Count == 0)
		return -1;
	if(map.ContainsKey(value))
		return map[value].dgSum;
	else
		return -1;
   }
}
Editor is loading...
Leave a Comment