DEV Community

Ivan Trindade
Ivan Trindade

Posted on

Zerando HackerRank: Diferença Diagonal

No tutorial anterior, resolvemos alguns desafios do HackerRank usando TypeScript. No tutorial de hoje, vou ajudá-lo a entender como resolver mais alguns desafios que você encontrará no HackerRank, usando a linguagem TypeScript.

Desafio que abordaremos:

  • Diferença Diagonal

Diferença Diagonal

O desafio Diagonal Difference, pede que calculemos a diferença absoluta entre as somas das diagonais de um array. Precisamos levar em consideração a diagonal primária e a diagonal secundária. Por exemplo:

3
11 2 4
4 5 6
10 8 -12
Enter fullscreen mode Exit fullscreen mode

De acordo com o array acima, a diagonal primária seria:

11
   5
     -12
Enter fullscreen mode Exit fullscreen mode

A diagonal secundária seria:

     4
   5
10
Enter fullscreen mode Exit fullscreen mode

A saída do cálculo das diagonais:

15
Enter fullscreen mode Exit fullscreen mode

Calculamos a diagonal primária, 11 + 5 - 12 = 4 e a secundária 4 + 5 + 10 = 19. O resultado da saída desse array, será calculando a diferença da diagonal primária com a secundária, |4 - 19| = 15.

Agora que entendemos a lógica por trás do desafio, vamos solucioná-lo no código. A função diagonalDifference irá calcular a diferença da diagonal de um array bidimensional.

Começaremos definindo duas variáveis let para armazenar a soma dos elementos da diagonal primária e da diagonal secundária:

function diagonalDifference(arr: number[][]): number {
  let primaryDiagonalSum = 0;
  let secondaryDiagonalSum = 0;
...
}
Enter fullscreen mode Exit fullscreen mode

Em seguida, usaremos o método .forEach() para percorrer cada linha do array e calcular as somas:

function diagonalDifference(arr: number[][]): number {
  let primaryDiagonalSum = 0;
  let secondaryDiagonalSum = 0;

  arr.forEach((row, index) => {
    primaryDiagonalSum += row[index];
    secondaryDiagonalSum += row[arr.length - 1 - index];
  });
...

}
Enter fullscreen mode Exit fullscreen mode

Usamos o método .forEach() para percorrer cada linha do array, no qual o método .forEach() recebe como argumento uma função callback, que é executada para cada item do array. A função callback recebe dois argumentos: row que representa a linha atual e index que representa o índice da linha atual. Usamos o operador += para incrementar um valor.

Dentro da função callback, o elemento da diagonal primária é acessado através da expressão row[index] e o elemento da diagonal secundária, é acessado através da expressão row[arr.length - 1 - index]. Ambas as expressões são adicionadas ás variáveis primaryDiagonalSum e secondaryDiagonalSum, respectivamente.

Por fim, usaremos o método Math.abs() para retornar o valor absoluto da diferença entre primaryDiagonalSum e secondaryDiagonalSum. Usando este método, garantiremos que o retorno sempre seja um valor positivo.

function diagonalDifference(arr: number[][]): number {
  let primaryDiagonalSum = 0;
  let secondaryDiagonalSum = 0;

  arr.forEach((row, index) => {
    primaryDiagonalSum += row[index];
    secondaryDiagonalSum += row[arr.length - 1 - index];
  });

  return Math.abs(primaryDiagonalSum - secondaryDiagonalSum);
}

Enter fullscreen mode Exit fullscreen mode

Obrigado por ler!

Espero que tenha gostado do tutorial, em breve irei postar mais soluções do HackerRank.

Top comments (0)