Définition
Une matrice centrosymétrique est une matrice carrée symétrique par rapport à son centre. Plus rigoureusement, une matrice de taille est centrosymétrique si, pour tout la relation suivante est satisfaite: n × n i ,A i ,
Exemples de telles matrices
Voici une illustration de la symétrie d’une matrice comme celle-ci (empruntée à l’article susmentionné de Wikipedia):
Une matrice centrosymétrique de longueur égale ( ):
Et un côté impair ( ) un:
Tâche et spécifications
Avec une matrice carrée de taille au moins égale à , indiquez l'une des deux valeurs distinctes et cohérentes, en décidant si la matrice est centrosymétrique ou non. Vous pouvez supposer que la matrice sera entièrement composée d’entiers positifs.
Cependant, votre code doit également être centrosymétrique. C'est-à-dire qu'il doit s'agir d'un programme / fonction (ou équivalents) composé de lignes, chacune contenant octets dans le codage de votre langue, et doit satisfaire à la définition donnée ci-dessus, mais avec des octets au lieu d'entiers positifs. Le score de votre soumission sera la valeur de , un inférieur étant meilleur.
Vous pouvez entrer et fournir des sorties à l'aide de n'importe quelle méthode standard et dans n'importe quel format raisonnable, tout en prenant note que ces failles sont interdites par défaut. Vous pouvez (éventuellement) choisir de prendre la taille, , comme entrée également (à moins que vous preniez une entrée sous forme de liste 1D, auquel cas vous ne pouvez prendre que comme entrée supplémentaire).n 2
Cas de test
Vérité
[[1, 2], [2, 1]]
[[1, 2, 3], [5, 6, 5], [3, 2, 1]]
[[10, 5, 30], [2, 6, 2], [30, 5, 10]]
[[100, 100, 100], [100, 50, 100], [100, 100, 100]]
[[1, 2, 3, 4], [5, 6, 7, 8], [8, 7, 6, 5], [4, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [3, 2, 10, 2, 3], [9, 8, 7, 6, 5], [7, 6, 5, 4, 3]]
Fausseté:
[[1, 2], [1, 2]]
[[1, 2, 10], [5, 6, 5], [11, 2, 1]]
[[14, 5, 32], [2, 6, 2], [30, 5, 16]]
[[19, 19, 19], [40, 50, 4], [19, 19, 19]]
[[1, 2, 20, 4], [7, 6, 7, 8], [8, 7, 6, 6], [3, 3, 2, 1]]
[[3, 4, 5, 6, 7], [5, 6, 7, 8, 9], [4, 5, 10, 4, 5], [5, 6, 7, 8, 9], [3, 4, 5, 6, 7]]
#
), de sorte que la moitié inférieure du code constitue un commentaire.#
ne fonctionnera pas car les commentaires précédés de#
sont en ligne uniquement: PRéponses:
JavaScript (ES6), taille
12119Toutes les versions renvoient false pour centrosymmetric ou true pour non centrosymmetric.
Tableau à 1 dimension + longueur, taille 9 (89 octets)
Prend une entrée en syntaxe de currying
(length)(array)
, où array est unidimensionnel.Essayez-le en ligne!
Matrice + largeur, taille 11 (131 octets)
Prend la syntaxe de currying
(width)(matrix)
.Essayez-le en ligne!
Charge utile
Récipient
Matrice seulement, taille 12 (155 octets)
C’est ma solution originale, qui calcule elle-même la largeur de la matrice.
Essayez-le en ligne!
Comment?
Nous avons besoin de quelques jetons critiques qui ne peuvent pas être séparés:
some
length
)=>
Les sauts de ligne peuvent être insérés presque n'importe où ailleurs.
Le code de charge utile déroulée se lit comme suit:
et est enveloppé dans la structure suivante:
qui, une fois inversé, devient un commentaire de bloc valide:
la source
Gelée , score 2
Essayez-le en ligne!
Prise en entrée sous forme de matrice carrée aplatie (vecteur de taille ).n2
la source
Befunge-93 , taille 24
Essayez-le en ligne!
Entrée:,
n
suivi des éléments du tableau, tous séparés par des espaces. REMARQUE: vous devrez peut-être utiliser un interprète différent si vous avez une entrée assez grande.Je suis sûr qu'il y a une meilleure façon de faire ça, je voulais juste l'essayer à Befunge. La partie de code actuelle est la moitié supérieure.
Comment?
Le code est divisé en deux sections principales, l' initialisation et la vérification .
Initialisation:
Cette section du code écrit la matrice d'entrée juste en dessous du code sous forme de caractères ASCII. Cette section et la section suivante utilisent les trois cellules en haut à gauche du code en tant que données. Ils sont stockés sous
n, i, j
.Vérification:
Les autres parties du code sont des ordures non lues pour le rendre centrosymétrique.
la source
Sans commentaires!
Prend les entrées sous forme de liste 1D
Essayez-le en ligne!
Prend les entrées sous forme de matrice 2D
Essayez-le en ligne!
Merci à potato44 pour toute son aide dans le chat. Et Lynn pour avoir joué au golf.
Explication
L’idée générale ici est simple, nous avons
concat
la liste et la comparons à l’inverse. Cependant, puisque nous voulons être centrosymétriques, nous devons agir avec prudence. D'abord nous écrivons le code comme nous le ferions normalement:Pour que nos lignes inverses soient également valides, nous avons besoin que le côté gauche de nos équations ressemble à une définition de fonction
tacnoc.)esrever>*<)==((
.La première étape pour résoudre ce problème consiste à éliminer les parenthèses.
Cependant, nous avons maintenant de nouveaux problèmes. Les deux fonctions
.
et==
lorsqu'elles sont inversées sont identiques, alors nos lignes inversées tentent de redéfinir les opérateurs (<*>
inversées, de>*<
sorte que tout va bien pour nous)..
peut être remplacé par<$>
puisque les fonctions sont des foncteurs. Et nous pouvons remplacer==
par/=
, ce qui annule notre production, mais cela reste dans les spécifications. Maintenant nous avonsAfin de réduire notre longueur de ligne nous alias
concat
etreverse
.Maintenant, nous venons de terminer ceci en rendant tout ce qui est centrosymétrique et carré.
La version 1-D plus courte fonctionne à peu près de la même manière, sauf qu'il n'est pas nécessaire de
concat
sauvegarder deux lignes en la supprimant.la source
<$>
était aussi<$>
.Python 2 , taille 10 (109 octets)
Essayez-le en ligne!
Précédent Python 2 , taille 14 (209 octets)
Essayez-le en ligne!
la source
-i-1
et-j-1
pourrait tout simplement être~i
et~j
Pyth, taille 6 (41 octets)
Essayez-le ici
Explication
La première ligne inverse l'entrée et chaque ligne, et vérifie s'il nous reste une copie de l'entrée.
Le
.q
dans la deuxième ligne quitte le programme, donc tout après, ainsi que leq
précédent, est un no-op.la source
APL (Dyalog Unicode) , score
7654Programme complet. Invite l'expression de la matrice à partir de stdin. Imprime un 1 ou un 0, puis jette une erreur cohérente. Sans commentaires!
Essayez-le en ligne!
⎕
invite pour l' expression et l' évaluer,
RAVEL (aplatissent) , ilr←
stocke le résultat dansr
(pour r avelled)⌽r
miroirr
r≡
imprimer implicitement sir
est identique à celle≡
profondeur der
(donne 1) àr⌽
utiliserr
pour faire pivoter cela(cela causera toujours un
RANK ERROR
et quitter car une matrice n'est pas autorisée comme argument de gauche⌽
)la source
Perl 6 , taille
9 87Essayez-le en ligne!
D'accord, j'ai changé pourreverse
est le goulot d'étranglement ici. Je l'ai changé pour le plus technique, mais beaucoup plus séparable[*-1 X-^*]
.[R,]
après avoir vu la réponse de Brad Gilbert à une autre question.Le code aplati est
{.flat eq [R,] .flat}
.Edit: Zut, je me suis rendu compte que je n'ai même pas besoin d'aplatir la première liste, mais les tentatives pour la réduire à une taille 6 ont échoué avec juste un octet de trop pour tenir ...
:(
Cependant, si nous le prenons comme un tableau unidimensionnel, il est facile de l’adapter à une taille 6.
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) (REPL uniquement), taille 8 (71 octets)
Retourne
True
pour une entrée centrosymétrique, etFalse
sinonDans Mathematica REPL, les lignes contenant des erreurs de syntaxe sont ignorées (une barre rouge épaisse apparaît sur le côté de l'écran). Ici, seules les trois premières lignes
f=#[[c=-1;;1;;-1,c]]==#&
, sont exécutées.Ce code capture la fonction dans le nom
f
.Malheureusement, le préréglage
PalindromeQ
est trop long.la source
Pyt , taille 1
Essayez-le en ligne!
Vérifie si l'entrée (sous la forme de lignes concaténées) est un palindrome.
la source
Japt , taille
94 (11 octets)Essayez-le en ligne!
Prend une entrée unidimensionnelle, vérifie s'il s'agit d'un palindrome. Si vous le souhaitez, vous pouvez remplir les deux lignes vides d'un dessin ascii.
L'ancienne version à deux dimensions fait pivoter l'entrée deux fois et vérifie si elle correspond à l'original:
Essayez-le en ligne!
la source
Coque , taille 3
Essayez-le en ligne! Entrée en tant que 1D-List. Chaque ligne définit une fonction, mais seule celle de la première ligne est appelée.
Ṡ=↔
est un test de palindrome qui vérifie si l’entrée est égale à (=
) son inverse (↔
).Décortiquer , taille 4
Essayez-le en ligne! Pour une entrée en tant que matrice 2D, nous concaténons (
Σ
) la liste de listes avant de vérifier qu’il s’agit d’un palindrome.la source
MATL , score 4
L'entrée a le format
[1 2; 2 1]
, en utilisant;
comme séparateur de lignes.La sortie se fait via STDERR ( autorisé par défaut):
Pour une entrée centrosymétrique, une erreur d'erreur cohérente est générée. Avec les versions actuelles de Linux et d’Octave dans TIO, la sortie STDERR suivante est générée (sans tenir compte des dernières lignes commençant par
Real time: ...
):L'erreur peut être différente selon les versions de Linux et Octave, mais sera cohérente d'une entrée à l'autre.
Pour une entrée non centrosymétrique, aucune erreur n'est générée et la sortie STDERR sur TIO est
Essayez-le en ligne!Ou vérifiez tous les cas de test:
Vérifiez que le programme est centrosymétrique.
Explication
%
est le symbole de commentaire, ce qui a pour effet d'ignorer le reste de la ligne. Les nouvelles lignes sont également ignorées. Donc, le code est justequi fait ce qui suit:
la source
Haskell, taille
11,10,9, 8Prend l'entrée sous forme de liste 2D! (Crédit: Ørjan Johansen)
la source
<*>
devrait être>*<
. Dans la version 2D, il y a une partie manquante-
et la partie inversée n'a pas les espaces aux bons endroits.Python 2 , taille 8
Essayez-le en ligne!
Prend en entrée une liste 1D de lignes concaténées (de longueur)n2 ) et les sorties via le code de sortie (0 pour les entrées symétriques, 1 sinon).
La liste est simplement vérifiée pour être un palindrome. Si c'est le cas, la chaîne de comparaison
a[::-1]!=a<_
échoue à l'!=
étape et court-circuite; sinon, la variable inconnue_
est évaluée et bloque le programme.la source
R , taille 9
Essayez-le en ligne!
Les trois dernières lignes sont le programme qui prend un tableau 1D en entrée et vérifie s'il est égal à son inverse. Valeur de vérité: FAUX, Valeur de faux: VRAIE.
R + pryr, taille 9
Essayez-le en ligne!
la source
C # (.NET Core) , score de
13 1110Essayez-le en ligne!
Prend en entrée un tableau 1D et n 2 une longueur; renvoie
false
pour centrosymmetric ettrue
pour non-centrosymmetric. Cette version utiliseSystem.Linq
mais je ne sais pas comment l'adapter à la soumission de code en raison des exigences particulières du défi. Code déroulé:Voici ma soumission précédente qui n'utilise pas LINQ:
C # (.NET Core) , score de
16 1513Essayez-le en ligne!
Code déroulé:
la source
int
àvar
(donc aussitni
àrav
), la deuxième soumission fonctionne également en JavaScript.Ruby , score
98 8Essayez-le en ligne!
Un lambda prenant une matrice aplatie en entrée. Renvoie true pour centrosymmetric, false sinon.
-1 merci à Mr.XCoder,
Déballé:
la source
Propre , taille 9
Merci à Ørjan Johansen !
Essayez-le en ligne!
Propre , taille 10
Essayez-le en ligne!
la source
m
.05AB1E , taille 3 (11 octets )
Entrée sous forme de liste unique.
Essayez-le en ligne.
Je suppose que celui-ci ne compte pas ..; p
Entrée sous forme de liste unique.
Essayez-le en ligne.
Explication:
Quelques alternatives de taille 3 (11 octets ):
Matrice en entrée.
Essayez-le en ligne.
Liste unique en entrée.
Essayez-le en ligne.
la source
C (gcc) , 12 x 12
Essayez-le en ligne!
la source
> <>, Taille 6
Essayez-le en ligne!
(Il s'avère que c'est une douleur qui passe plusieurs valeurs à -v in tio)
L'entrée est considérée comme un tableau unidimensionnel comme état de pile initial avec -v. Sortie sans sortie si la matrice est centrosymétrique, sortie avec une erreur (affiche "Quelque chose sent le poisson ...") sinon.
Je n'étais pas entièrement satisfait de ce format de sortie. Voici donc un format de taille 7 qui affiche 1 pour vrai et 0 pour faux.
Essayez-le en ligne!
la source
{-?;
Stax , n = 3
Exécuter et déboguer
Explication:
3 est le meilleur possible car il me faut au moins trois commandes: Copier, inverser et comparer
Stax , n = 4
Exécuter et déboguer
Explication:
la source
Japt , taille 2 (5 octets)
L'essayer
la source
Java 10, taille 13 (181 octets)
Essayez-le en ligne.
Inspiré par la réponse C # de Charlie Charlie .
Explication golfée:
la source
C (gcc) , note 11
Prend une liste de int et n comme arguments. Retourne n comme valeur de vérité, 0 comme faux.
Essayez-le en ligne!
la source
Javascript ES6, taille 8:
Javascript ES6, taille 7 (est-ce valide?):
Tester:
ou avec lambda enregistré dans la variable nommée
a
:la source
Clojure, Taille 9
Essayez-le en ligne!
la source