Un cuadrado mágico es una matriz cuadrada de números con el lado n que consiste en los enteros positivos distintos 1, 2, ..., n² dispuestos de manera tal que la suma de los n números en cualquier línea diagonal horizontal, vertical o principal es siempre el mismo número, que se conoce como la constante mágica.
Su programa debe ingresar, a través de std-in, un número que especifique la longitud del lado de su cuadrado, luego los números en el cuadrado. No se pueden usar números más de una vez, no se puede usar un número mayor que n ², y todos los números deben ser mayores que 0. El programa debe determinar si esa combinación de números es un cuadrado mágico.
(i,j)
más eficiente como un solo númerox
, tomandoi=x%C
yj=x/C
para algunos lo suficientemente grandeC
. Podría darle una oportunidad más tarde.APL, 35
La explicación
x←⎕⍴⍨,⍨⎕
solicita entrada, dale forma de matriz y asigna ax
⌽
Invierte la matriz de izquierda a derechax(...)
Crea una matriz de matrices:x
ex
invierte1 1∘⍉¨
Para cada una de esas matrices, toma la diagonal en+/↑
forma de matriz 2 × n de los números en esas diagonales y suman las filas⍉x
Transponerx
x,
luego concatenar conx
para formar una matriz × 2n+⌿
y sumar las columnas(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)
concatenar para formar una matriz de las sumas2=/
verificar si pares consecutivos son iguales∧/
y Y todos esos resultados juntosfuente
Mathematica
128125Toma datos como
fuente
Input[r=Reverse]
para guardar un byte.#&@@
es un byte más corto que[[1]]
. Probablemente, además, puede usar la notación infijaPartition
para otro byte. YThread
debería funcionar en lugar deTranspose
. Alternativamente, use este carácter Unicode como un operador post arreglo (Mathematica lo usa para el superíndice T para la transposición).APL
4732Usando la excelente solución de TwiNight y aplicando algunos ajustes adicionales:
Explicación:
Utiliza los trenes de funciones, que se introdujeron en la v14 del intérprete Dyalog. APL se ejecuta de derecha a izquierda, los ⎕ son entradas, así que primero las dimensiones, luego el vector de números.
⎕⍴⍨, ⍨⎕ crea la matriz NxN
Después de eso viene el tren de funciones, que básicamente es solo una secuencia de funciones (entre paréntesis) aplicadas al argumento correcto. Las funciones son:
⊢ Devuelve el argumento correcto (esa es la matriz)
⍉ Transpone la matriz de argumento correcta
1 1∘⍉ Devuelve la diagonal
1 1∘⍉∘⌽ Devuelve la diagonal de la matriz invertida (horizontalmente)
Todos los resultados se concatenan con la función ","
En este punto, el resultado es una matriz cuyas columnas se suman (+ ⌿). Los valores obtenidos de esta manera se verifican para que sean los mismos con ∧ / 2 = /
Aquí también dejaré mi antigua solución:
toma la dimensión como argumento izquierdo, el vector de elementos como argumento derecho, por ejemplo:
Puede probarse en línea aquí: www.tryapl.org
fuente
GolfScript 67 ( demo )
fuente
JavaScript (E6) 194
Usando el aviso para leer la entrada y mostrar la salida.
Prueba en consola con FireFox> 31 (Array.fill es muy nuevo)
Menos golf
fuente
Pyth,
2430 bytesPruébelo en línea aquí .
Editar: reparó un error, gracias a @KevinCruijssen por avisarme: o)
fuente
True
cuadrados mágicos con números que son demasiado grandes o no todos únicos. Es decir,4
y[12,26,23,13,21,15,18,20,17,19,22,16,24,14,11,25]
o4
y[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
salida de ambosTrue
. (Sin embargo, casi todas las respuestas existentes tienen el mismo problema, pero como se publicaron hace más de 4 años, no me molesté en corregir sus errores en un comentario)LUA 186 Chars
fuente
05AB1E , 24 bytes
Formato de entrada:
4\n[2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]
. Salidas1
/0
para veracidad / falsey respectivamente.Pruébelo en línea o verifique algunos casos de prueba más .
Explicación:
fuente