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); }