function cuadrado_magico($ancho) {
if ($ancho % 2 == 0)
$ancho--;
$posy = 0;
$posx = floor($ancho / 2);
$cont = 1;
while ($cont <= $ancho ** 2) {
if (empty($c[$posy][$posx])) {
$c[$posy][$posx] = $cont++;
$posx = ($posx + 1) % $ancho;
$posy = ($posy - 1 + $ancho) % $ancho;
} else {
$posx = ($posx - 1 + $ancho) % $ancho;
$posy = ($posy + 2) % $ancho;
}
}
return $c;
}
function esMagico($t) {
//Sumo la primera fila para tener un valor de referencia
$sum = array_sum($t[0]);
$sd1 = 0;
$sd2 = 0;
for ($i = 0; $i < count($t); $i++) {
$sf = 0;
$sc = 0;
$sd1 += $t[$i][$i];
$sd2 += $t[$i][count($t) - 1 - $i];
for ($j = 0; $j < count($t[$i]); $j++) {
$sf += $t[$i][$j]; //Sumo la fila
$sc += $t[$j][$i]; //Sumo la columna
}
//Si fila o columna son diferentes al valor de referencia no es mágico
if ($sf != $sum || $sc != $sum) {
return false;
}
}
return !($sd1 != $sum || $sd2 != $sum);
}