DEV Community

Ivan Trindade
Ivan Trindade

Posted on

1

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.

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (0)

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay