DEV Community

Altencir Junior
Altencir Junior

Posted on

Resolvendo problemas no HackerRank: A caixa mágica

Olá, seja bem vindo a mais uma etapa do Resolvendo problemas no Hacker-Rank,nessa sessão iremos resolver uma série de arrays chamados Magic Squares, com proporção 3x3. Nosso objetivo é retornar o valor mínimo das várias possibilidades. Vejamos agora o problema.

Forming a Magic Square -

Nos é passado um array que está salvos em _s_ e devemos converter ele para o array seguinte mostrando sua diferença absoluta. Esse problema lembra um pouco a lógica de SUDOKU, pois ele tem valores em diagonais e em linhas iguais. Mas o importante para nós é criar uma forma pegar o primeiro array 3x3 e os seguintes passados, e fazer a diferença entre eles. Vejamos um exemplo ele é:

5 3 4
1 5 8
6 4 2

O valor de _s_ vai mudar de acordo com o problema, mas sua regra sempre indica que ele deve ser comparado e subtraído pelo outro array passado.

  • int: o custo total mínimo de converter o quadrado de entrada em um quadrado mágico

  • Cada uma das linhas contém três inteiros de linha separados por espaços s [i].

Vejamos a resolução:

function formingMagicSquare(s) {
    // Write your code here
  let magicSquare = [
    [[8, 1, 6], [3, 5, 7], [4, 9, 2]],
    [[6, 1, 8], [7, 5, 3], [2, 9, 4]],
    [[4, 9, 2], [3, 5, 7], [8, 1, 6]],
    [[2, 9, 4], [7, 5, 3], [6, 1, 8]], 
    [[8, 3, 4], [1, 5, 9], [6, 7, 2]], 
    [[4, 3, 8], [9, 5, 1], [2, 7, 6]], 
    [[6, 7, 2], [1, 5, 9], [8, 3, 4]], 
    [[2, 7, 6], [9, 5, 1], [4, 3, 8]]
    ];

  let maxValue = Number.MAX_VALUE;
    for(let index = 0; index < magicSquare.length; index ++){
  let min = 0;
    for(let line = 0; line < s.length; line++){
    for(let column = 0; column < s.length; column++){
      min += Math.abs(s[line][column] - magicSquare[index][line][column]);
      }
    }
  maxValue = Math.min(maxValue, min);
  }
  return maxValue;
}
Enter fullscreen mode Exit fullscreen mode

Uma explicação rápida a respeito desse código é que pegamos todas as possibilidades possíveis da caixa mágica e a disponibilizamos na variável magicSquare.

Logo após, criamos uma variável maxValue que irá guardar um número máximo. E começamos um laço for para um index que se for menor que o comprimento de magicSquare, adicionar 1. E também criamos uma variável minque vale 0

Também criamos uma repetição foragora pegando a posição das linhas dentro dos arrays onde se sque é o parâmetro que guarda o array 3x3 que queremos for maior que lineadiciona mais um. O mesmo é feito na repetição criando a column.

Feita a criação do column, chamamos min e adicionamos a lógica onde pegaremos o valor absoluto da subtração de scom array[line] e array [column] - magicSquare que pegará o array[index],[line] e [column]. A variável maxValue é chamado e pegamos o valor mínimo demaxValue e da variável min.

Finalizando nós retornamos MaxValue. Trazendo o resultado:

4 9 2
3 5 7
8 1 5

//input de resultado abaixo:
 1
Enter fullscreen mode Exit fullscreen mode

Com isso finalizamos mais uma sessão da série: Resolvendo problemas no HackerRank:. Até a próxima

Top comments (0)