Objectif: étant donné une matrice d'entiers positifs , sortir la plus petite matrice centrosymétrique qui contient (cette matrice peut également contenir des entiers non positifs).M
Une matrice centrosymétrique est une matrice carrée avec une symétrie de rotation d'ordre 2, c'est-à-dire qu'elle reste la même matrice après deux rotations. Par exemple, une matrice centrosymétrique a l'élément en haut à gauche identique à celui en bas à droite et l'élément au-dessus du centre identique à celui en dessous du centre. Une visualisation utile peut être trouvée ici .
Plus formellement, étant donné une matrice , produire une matrice carrée telle que est centrosymétrique et , et il n'y a pas d' autre matrice carrée telle que .N N M ⊆ N K dim K < dim N
B A ⊆ B A i , j B i + i ′ , j + j ′ ( i ′ , j ′ ) est un sous-ensemble de (notation: ) si et seulement si chaque valeur apparaît à l'index pour une paire d'entiers .
Remarque : certaines matrices ont plusieurs solutions (par exemple, [[3,3],[1,2]]
être résolues en tant que [[2,1,0],[3,3,3],[0,1,2]]
ou [[3,3,3],[1,2,1],[3,3,3]]
); vous devez générer au moins une des solutions valides.
Cas de test
input
example output
[[1, 2, 3],
[4, 5, 6]]
[[1, 2, 3, 0],
[4, 5, 6, 0],
[0, 6, 5, 4],
[0, 3, 2, 1]]
[[9]]
[[9]]
[[9, 10]]
[[9, 10],
[10, 9]]
[[100, 200, 300]]
[[100, 200, 300],
[ 0, 0, 0],
[300, 200, 100]]
[[1, 2, 3],
[4, 5, 4]]
[[1, 2, 3],
[4, 5, 4]
[3, 2, 1]]
[[1, 2, 3],
[5, 6, 5],
[3, 2, 1]]
[[1, 2, 3],
[5, 6, 5],
[3, 2, 1]]
[[4, 5, 4],
[1, 2, 3]]
[[3, 2, 1],
[4, 5, 4],
[1, 2, 3]]
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 1, 1, 9, 9, 9, 9, 9, 9, 9],
[1, 1, 1, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 1]]
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 9],
[1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[1, 1, 1, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1],
[9, 9, 9, 9, 9, 9, 9, 9, 9, 1, 1, 1],
[9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
la source
Réponses:
Brachylog , 12 octets
Essayez-le en ligne!
Contrairement à la plupart des réponses Brachylog, cela prend l'entrée via la variable Output
.
et produit le résultat via la variable Input?
(déroutant, je sais).Explication
8 octets, donne toutes les matrices valides
Techniquement, ce programme fonctionne également:
ṁ↔ᵐ↔?aaᵐ
Mais cela laissera comme variables les cellules qui peuvent prendre n'importe quelle valeur (elles apparaissent comme
_XXXXX
, qui est un nom de variable Prolog interne). Donc, techniquement, c'est encore mieux que ce qui est demandé, mais je suppose que ce n'est pas ce que le défi demande.la source
≜
que l'étiquetage soit retardé ...JavaScript (ES6),
192180177 octetsEssayez-le en ligne!
Algorithme
En commençant par :w=0
Nous considérons chaque paire telle sorte que la matrice d'entrée puisse tenir dans la matrice du conteneur lorsqu'elle est insérée à ces coordonnées.(X,Y) m
Exemple:
Nous testons si nous pouvons compléter la matrice de telle sorte qu'elle soit centrosymétrique.
Exemple:
la source
Gelée , 27 octets
Essayez-le en ligne!
Ajout de nouvelles lignes à la sortie réelle sur TIO pour plus de clarté.
la source
Python 2 ,
242227226 octetsEssayez-le en ligne!
Enregistré:
la source
n=[W*[0]for _ in r(W)]
peut êtren=eval(`[W*[0]]*W`)
.Clojure 254 octets
Jinkies, Scoob
Essayez-le en ligne!
la source