Forming a Magic Square

We define a magic square to be an  matrix of distinct positive integers from  to  where the sum of any row, column, or diagonal of length  is always equal to the same number: the magic constant.
You will be given a  matrix  of integers in the inclusive range . We can convert any digit  to any other digit  in the range  at cost of . Given , convert it into a magic square at minimal cost. Print this cost on a new line.
Note: The resulting magic square must contain distinct integers in the inclusive range .
For example, we start with the following matrix :
5 3 4
1 5 8
6 4 2
We can convert it to the following magic square:
8 3 4
1 5 9
6 7 2
This took three replacements at a cost of .
Function Description
Complete the formingMagicSquare function in the editor below. It should return an integer that represents the minimal total cost of converting the input square to a magic square.
formingMagicSquare has the following parameter(s):
  • s: a  array of integers
Input Format
Each of the lines contains three space-separated integers of row .
Constraints
Output Format
Print an integer denoting the minimum cost of turning matrix  into a magic square.
Sample Input 0
4 9 2
3 5 7
8 1 5
Sample Output 0
1
Explanation 0
If we change the bottom right value, , from  to  at a cost of  becomes a magic square at the minimum possible cost.
Sample Input 1
4 8 2
4 5 7
6 1 6
Sample Output 1
4
Explanation 1
Using 0-based indexing, if we make
  • -> at a cost of 
  • -> at a cost of 
  • -> at a cost of ,
then the total cost will be .

 php

<?php

// Complete the formingMagicSquare function below.
function getCost($matrix, $squaremag) {
$cost = 0;
for($i =0; $i < 3; $i++) {
for($j = 0; $j < 3; $j++) {
$cost += abs($matrix[$i][$j] - $squaremag[$i][$j]);
}
}
return $cost;
}
function formingMagicSquare($s) {
$mgicsquare1 = [
[8,3,4],
[1,5,9],
[6,7,2]
];
$mgicsquare2 = [
[6,1,8],
[7,5,3],
[2,9,4]
];
$mgicsquare3 = [
[2,7,6],
[9,5,1],
[4,3,8]
];
$mgicsquare4 = [
[4,9,2],
[3,5,7],
[8,1,6]
];

$mgicsquare5 = [
[4,3,8],
[9,5,1],
[2,7,6]
];

$mgicsquare6 = [
[2,9,4],
[7,5,3],
[6,1,8]
];

$mgicsquare7 = [
[6,7,2],
[1,5,9],
[8,3,4]
];

$mgicsquare8 = [
[8,1,6],
[3,5,7],
[4,9,2]
];

$mincost = getCost($s, $mgicsquare1);
$mincost =
$mincost > getCost($s, $mgicsquare2) ?
getCost($s, $mgicsquare2) : $mincost;
$mincost =
$mincost > getCost($s, $mgicsquare3) ?
getCost($s, $mgicsquare3) : $mincost;
$mincost =
$mincost > getCost($s, $mgicsquare4) ?
getCost($s, $mgicsquare4) : $mincost;
$mincost =
$mincost > getCost($s, $mgicsquare5) ?
getCost($s, $mgicsquare5) : $mincost;
$mincost =
$mincost > getCost($s, $mgicsquare6) ?
getCost($s, $mgicsquare6) : $mincost;
$mincost =
$mincost > getCost($s, $mgicsquare7) ?
getCost($s, $mgicsquare7) : $mincost;
$mincost =
$mincost > getCost($s, $mgicsquare8) ?
getCost($s, $mgicsquare8) : $mincost;
return $mincost;
}

$fptr = fopen(getenv("OUTPUT_PATH"), "w");

$stdin = fopen("php://stdin", "r");

$s == array();

for ($i = 0; $i < 3; $i++) {
fscanf($stdin, "%[^\n]", $s_temp);
$s[] = array_map('intval', preg_split('/ /', $s_temp, -1,
PREG_SPLIT_NO_EMPTY));
}

$result = formingMagicSquare($s);

fwrite($fptr, $result . "\n");

fclose($stdin);
fclose($fptr);

Comments

Popular posts from this blog

Compare the Triplets

Plus Minus