Zerando HackerRank ( 7 )
Published: 2023-03-04 05:32:43

Neste desafio o problema é bem mais complexo que os anteriores.
Recebemos uma matriz quadrada, sendo pedida a diferença absoluta entre as somas das diagonais.

Bugou a mente? A minha também!

Podemos ver este exemplo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1cj5knm1ywl0va0qw092.png)

Bem provavelmente a primeira pergunta que vamos nos fazer é:
Quais seriam as diagonais?
Segundo o problema teremos a diagonal da esquerda para a direita composta de 1, 5, 9 e a segunda é da direita para a esquerda composta pelo 3, 5, 9. 

No problema é pedido que haja a soma dessas diagonais, exemplo:
Somando 1 + 5 + 9 = 15 e somando 3 + 5 + 9 = 17, essa é a soma dos elementos das duas diagonais.
Depois disso é calculado que a diferença absoluta é 2.

De acordo com problema devemos fazer uma função que:
1- Deve receber uma matriz quadrada.
2- Deve somar ambas as diagonais.
3- Deve retornar a diferença absoluta.

Sabendo disso, vamos ajustar a função "diagonalDifference".
Um conceito que vai nos ajudar a resolver este problema é entender o que é uma matriz.
Uma matriz, nada mais é que uma array de array´s, assim como o exemplo abaixo:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pbf42eluh3hcbpucq6az.png)

Em exercícios que envolvam matrizes é interessante capturar em uma variável o tamanho de uma matriz.
Podemos fazer isto desta forma:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qg6hgazvvvg92hm3ncjt.png)

Depois disso vamos inicializar duas variáveis iniciadas em zero:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8ihpy8idl682hiwn8vt3.png)

Vamos chamar de "mainDiagonalSum" a diagonal da esquerda para a direita e de "secundariDiagonalSum" a diagonal da direita para a esquerda.

Depois disso vamos fazer um _FOR_, ele vai começar com index = 0 e enquanto ele for menor que o tamanho da nossa array ele vai ser incrementado, desta forma:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/yphmlts02z15eqpxyvq6.png)

Pensando na lógica devemos visualizar que devemos fazer dentro da função, para entender exatamente isso precisamos observar as posições de cada número:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/14pqv0p53nu0n6ft05xx.png)

No exemplo acima, é correto afirmar que o primeiro item da "mainDiagonalSum" seria (0, 0) ou seja, ele é o primeiro item da primeira array.
Já o segundo item da Diagonal seria (1, 1) ou seja, ele é o segundo item da segunda array.
E o terceiro item (2, 2) ou seja, ele é o terceiro item da terceira array.
Pensando nessa logica podemos acessar as coordenadas para assim acessar os valores.
Pensando nisso podemos usar esta logica para encontrar os valores das somas da primeira diagonal:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8k86fujbh0zr5tawv2iu.png)

Ja pensando na segunda diagonal precisaremos usar uma lógica um pouco mais complexa, vamos continuar usando o índex com o valor referente as colunas, porem vamos usar uma subtração para representar os valores decaindo.
Nesse caso vamos usar o tamanho da array - o valor do índex -1, desta forma:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8dbn5vmrzs3435hl1doy.png)
Desta forma vamos ter os valores referentes as duas diagonais.
Assim para chegar ao valor final apenas precisaremos subtrair o valor de uma diagonal a outra, desta forma:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pqxh02i96i4h2wdldfo8.png)

E assim solucionamos mais um problema.

E assim que nossa função vai ficar:


![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0iglsr8lc2gmusa3c0z5.png)









Depois disso, vamos finalizar