Resolvendo problemas no HackerRank: A caixa mágica
Altencir Junior
Posted on March 3, 2023
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;
}
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 min
que vale 0
Também criamos uma repetição for
agora pegando a posição das linhas dentro dos arrays onde se s
que é o parâmetro que guarda o array 3x3 que queremos for maior que line
adiciona 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 s
com 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 de
maxValue 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
Com isso finalizamos mais uma sessão da série: Resolvendo problemas no HackerRank:. Até a próxima
Posted on March 3, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.