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
De acordo com o array acima, a diagonal primária seria:
11
5
-12
A diagonal secundária seria:
4
5
10
A saída do cálculo das diagonais:
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:
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:
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.
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.
Top comments (0)