Funciones esMagico y crearCuadrado

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

Publicado por

Juan Pablo Fuentes

Formador de programación y bases de datos