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)

11 Tips That Make You a Better Typescript Programmer

typescript

1 Think in {Set}

Type is an everyday concept to programmers, but it’s surprisingly difficult to define it succinctly. I find it helpful to use Set as a conceptual model instead.

#2 Understand declared type and narrowed type

One extremely powerful typescript feature is automatic type narrowing based on control flow. This means a variable has two types associated with it at any specific point of code location: a declaration type and a narrowed type.

#3 Use discriminated union instead of optional fields

...

Read the whole post now!