Un carré magique est un tableau carré de nombres dont le côté n est composé des entiers positifs distincts 1, 2, ..., n ² disposés de telle sorte que la somme des n nombres dans toute ligne diagonale horizontale, verticale ou principale soit toujours la même nombre, qui est connu comme la constante magique.
Votre programme doit saisir, via std-in, un nombre spécifiant la longueur du côté de votre carré, puis les nombres du carré. Aucun nombre ne peut être utilisé plus d'une fois, aucun nombre supérieur à n ² ne peut être utilisé et tous les nombres doivent être supérieurs à 0. Le programme doit déterminer si cette combinaison de nombres est un carré magique.
(i,j)
plus efficacement en un seul numérox
, en prenanti=x%C
etj=x/C
pour certains assez grosC
. Pourrait donner un coup de feu plus tard.APL, 35
Une explication vous
x←⎕⍴⍨,⍨⎕
invite à entrer, à la façonner en une matrice et à affecter àx
⌽
Inverse la matrice de gauche à droitex(...)
Créez un tableau de matrices:x
etx
inversez1 1∘⍉¨
Pour chacune de ces matrices, prenez la+/↑
forme diagonale d' une matrice 2 × n des nombres sur ces diagonales et additionner les lignes⍉x
Transposerx
x,
puis concaténer avecx
pour former une matrice × 2n+⌿
et additionner les colonnes(+⌿x,⍉x),+/↑1 1∘⍉¨x(⌽x←⎕⍴⍨,⍨⎕)
concaténer pour former un tableau des sommes2=/
vérifier si les paires consécutives sont égales∧/
ET ET ensemble tous ces résultatsla source
Mathematica
128125Prend des informations telles que
la source
Input[r=Reverse]
pour enregistrer un octet.#&@@
est un octet plus court que[[1]]
. Vous pouvez probablement également utiliser la notation infixePartition
pour un autre octet. EtThread
devrait fonctionner au lieu deTranspose
. Vous pouvez également utiliser ce caractère Unicode comme opérateur post-correction (Mathematica l'utilise en exposant T pour la transposition).APL
4732Utilisation de l'excellente solution de TwiNight et application de quelques ajustements supplémentaires:
Explication:
Cela utilise des trains de fonctions, qui ont été introduits dans la version 14 de l'interpréteur Dyalog. APL est exécuté de droite à gauche, les ⎕ sont des entrées, donc d'abord les dimensions, puis le vecteur des nombres.
⎕⍴⍨, ⍨⎕ crée la matrice NxN
Après cela vient le train de fonctions qui sont fondamentalement juste une séquence de fonctions (entre crochets) appliquées au bon argument. Les fonctions sont les suivantes:
⊢ Renvoie l'argument juste à droite (c'est la matrice)
⍉ Transpose la bonne matrice d'arguments
1 1∘⍉ Renvoie la diagonale
1 1∘⍉∘⌽ Renvoie la diagonale de la matrice inversée (horizontalement)
Tous les résultats sont concaténés avec la fonction ","
À ce stade, le résultat est une matrice dont les colonnes sont ensuite additionnées (+ ⌿). Les valeurs ainsi obtenues sont ensuite vérifiées pour être les mêmes avec ∧ / 2 = /
Je vais laisser mon ancienne solution ici aussi:
prend dimension comme argument de gauche, vecteur d'éléments comme argument de droite, par exemple:
Peut être essayé en ligne ici: www.tryapl.org
la source
GolfScript 67 ( démo )
la source
JavaScript (E6) 194
Utilisation de l'invite pour lire l'entrée et afficher la sortie.
Test en console avec FireFox> 31 (Array.fill est très nouveau)
Moins golfé
la source
Pyth,
2430 octetsEssayez-le en ligne ici .
Edit: correction d'un bug, merci à @KevinCruijssen de m'avoir prévenu: o)
la source
True
des carrés magiques avec des nombres trop grands ou pas tous uniques. Ie4
et[12,26,23,13,21,15,18,20,17,19,22,16,24,14,11,25]
ou ou4
et[1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1]
les deuxTrue
. (Presque toutes les réponses existantes ont le même problème, mais puisqu'elles sont publiées il y a plus de 4 ans, je n'ai pas pris la peine de corriger leurs erreurs dans un commentaire.)LUA 186 caractères
la source
05AB1E , 24 octets
Format d' entrée:
4\n[2,16,13,3,11,5,8,10,7,9,12,6,14,4,1,15]
. Sorties1
/0
pour vérité / falsey respectivement.Essayez-le en ligne ou vérifiez d'autres cas de test .
Explication:
la source