Advertisement
T-D-K

Untitled

Nov 7th, 2018
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 3.52 KB | None | 0 0
  1.         static int queensAttack(int n, int k, int rQ, int cQ, int[][] obstacles) {
  2.             int toTheRight = n + 1 - cQ;
  3.             int toTheTop = n + 1 - rQ;
  4.             int[] leftDiagonal = {rQ + Math.Min(cQ, toTheTop), cQ - Math.Min(cQ, toTheTop)};
  5.             int[] topVertical = {n + 1, cQ};
  6.             int[] rightAntidiagonal = {rQ + Math.Min(toTheRight, toTheTop), cQ + Math.Min(toTheRight, toTheTop)};
  7.             int[] rightHorizontal = {rQ, n + 1};
  8.             int[] rightDiagonal = {rQ - Math.Min(toTheRight, rQ), cQ + Math.Min(toTheRight, rQ)};
  9.             int[] bottomVertical = {0, cQ};
  10.             int[] leftAntidiagonal = {rQ - Math.Min(cQ, rQ), cQ - Math.Min(cQ, rQ)};
  11.             int[] leftHorizontal = {rQ, 0};
  12.             foreach (int[] obstacle in obstacles) {
  13.                 int rO = obstacle[0];
  14.                 int cO = obstacle[1];
  15.                 int[] newValue = new[] {rO, cO};
  16.                 if (cO < cQ) {
  17.                     if (rO > rQ && rO - rQ == cQ - cO) {
  18.                         if (cO > leftDiagonal[1]) {
  19.                             leftDiagonal = newValue;
  20.                         }
  21.                     }
  22.                     else if (rO == rQ) {
  23.                         if (cO > leftHorizontal[1]) {
  24.                             leftHorizontal = newValue;
  25.                         }
  26.                     }
  27.                     else if (rO < rQ && rQ - rO == cQ - cO) {
  28.                         if (cO > leftAntidiagonal[1]) {
  29.                             leftAntidiagonal = newValue;
  30.                         }
  31.                     }
  32.                 }
  33.                 else if (cO == cQ) {
  34.                     if (rO > rQ && rO < topVertical[0]) {
  35.                         topVertical = newValue;
  36.                     }
  37.                     else if (rO < rQ && rO > bottomVertical[0]) {
  38.                         bottomVertical = newValue;
  39.                     }
  40.                 }
  41.                 else if (cO > cQ) {
  42.                     if (rO > rQ && rO - rQ == cO - cQ) {
  43.                         if (cO < rightAntidiagonal[1]) {
  44.                             rightAntidiagonal = newValue;
  45.                         }
  46.                     }
  47.                     else if (rO == rQ) {
  48.                         if (cO < rightHorizontal[1]) {
  49.                             rightHorizontal = newValue;
  50.                         }
  51.                     }
  52.                     else if (rO < rQ && rQ - rO == cO - cQ) {
  53.                         if (cO < rightDiagonal[1]) {
  54.                             rightDiagonal = newValue;
  55.                         }
  56.                     }
  57.                 }
  58.             }
  59.             int leftDiagonalDistance = leftDiagonal[0] - rQ - 1;
  60.             int topVerticalDistance = topVertical[0] - rQ - 1;
  61.             int rightAntidiagonalDistance = rightAntidiagonal[0] - rQ - 1;
  62.             int rightHorizontalDistance = rightHorizontal[1] - cQ - 1;
  63.             int rightDiagonalDistance = rQ - rightDiagonal[0] - 1;
  64.             int bottomVerticalDistance = rQ - bottomVertical[0] - 1;
  65.             int leftAntidiagonalDistance = rQ - leftAntidiagonal[0] - 1;
  66.             int leftHorizontalDistance = cQ - leftHorizontal[1] - 1;
  67.             return leftDiagonalDistance +
  68.                    topVerticalDistance +
  69.                    rightAntidiagonalDistance +
  70.                    rightHorizontalDistance +
  71.                    rightDiagonalDistance +
  72.                    bottomVerticalDistance +
  73.                    leftAntidiagonalDistance +
  74.                    leftHorizontalDistance;
  75.         }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement