Zerando HackerRank: Diferença Diagonal
Tags: tutorial, programming, javascript, braziliandevs
Published: 2023-01-30 13:39:03

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](https://www.hackerrank.com/challenges/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:

```jsx
3
11 2 4
4 5 6
10 8 -12
```

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

```jsx
11
   5
     -12
```

A diagonal secundária seria:

```jsx
     4
   5
10
```

A saída do cálculo das diagonais:

```jsx
15
```

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:

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

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

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

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

}
```

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.

```jsx
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);
}

```

## Obrigado por ler!

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