Définitions
Le k ème anneau d'une matrice carrée de taille N , où 1 ≤ k ≤ plafond (N / 2) est la liste formée par les éléments des k ème et (N-k + 1) ème lignes et colonnes, mais sans le premier et dernier éléments k-1 .
Exemple:
Matrice: 1 2 3 4 5 6 7 8 9 1 8 7 6 5 4 3 2 1 9 8 7 6 5 4 3 Délimité en anneaux: + ------------------- + | 1 2 3 4 5 | | + ----------- + | | 6 | 7 8 9 | 1 | | | + --- + | | | 8 | 7 | 6 | 5 | 4 | | | + --- + | | | 3 | 2 1 9 | 8 | | + ----------- + | | 7 6 5 4 3 | + ------------------- +
Le premier anneau de ce qui précède est 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, le deuxième est 7,8,9,5,9,1,2,7
et le troisième est 6
.
Une matrice N par N d'entiers positifs est (pour les besoins de ce défi):
concave si tous les entiers du k ème anneau sont strictement supérieurs à ceux du (k + 1) e anneau, où k est tout entier compris entre 1 et N (ceux du premier anneau sont supérieurs à ceux du second, qui sont tour à tour supérieur à ceux du troisième, etc.). Exemple:
4 5 6 4 7 -> parce que 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 sont tous supérieurs à 4 3 2 2 4 l'un des 3,2,2,3,2,3,3,2, qui sont tous supérieurs à 1 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
plat si tous les entiers de la matrice sont égaux. Un autre exemple (peut-être redondant):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
convexe si tous les entiers du k ème anneau sont strictement inférieurs à ceux du (k + 1) e anneau, où k est tout entier compris entre 1 et N (ceux du premier anneau sont inférieurs à ceux du second, qui sont à son tour inférieur à ceux du troisième, etc.). Exemple:
1 2 1 -> car 1 et 2 sont tous deux inférieurs à 6 2 6 2 1 2 1
mélangé si la matrice ne satisfait à aucun des critères ci-dessus. Exemple:
3 3 3 3 3 3 2 2 2 3 3 2 3 2 3 3 2 2 2 3 3 3 3 3 3
Défi
Étant donné une matrice carrée d'entiers positifs de taille au moins 3 , classez-la selon les définitions ci-dessus. C'est-à-dire, produire l'une des quatre valeurs cohérentes différentes selon que la matrice est concave, plate, convexe ou mixte.
Vous pouvez concurrencer dans n'importe quel langage de programmation et pouvez prendre des entrées et fournir des sorties par 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. Il s'agit de code-golf , donc la soumission la plus courte (en octets) pour chaque langue l' emporte.
Cas de test
Voici un tas d'exemples parmi lesquels vous pouvez choisir - j'ai sélectionné 6 de chaque catégorie.
Concave
[[3, 3, 3], [3, 1, 3], [3, 3, 3]]
[[2, 3, 4], [5, 1, 6], [7, 8, 9]]
[[19, 34, 45], [34, 12, 14], [13, 13, 13]]
[[3, 4, 3, 4], [4, 2, 1, 3], [3, 1, 2, 4], [4, 3, 4, 3]]
[[4, 5, 6, 4, 7], [4, 3, 2, 2, 4], [5, 2, 1, 3, 8], [5, 3, 3, 2, 5], [9, 5, 6, 4, 5]]
[[7, 7, 7, 7, 7], [7, 6, 6, 6, 7], [7, 6, 5, 6, 7], [7, 6, 6, 6, 7], [7, 7, 7, 7, 7]]
Plat
[[1, 1, 1], [1, 1, 1], [1, 1, 1]]
[[2, 2, 2], [2, 2, 2], [2, 2, 2]]
[[8, 8, 8], [8, 8, 8], [8, 8, 8]]
[[120, 120, 120], [120, 120, 120], [120, 120, 120]]
[[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]]
[[5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5], [5, 5, 5, 5, 5, 5]]
Convexe
[[1, 2, 1], [2, 6, 2], [1, 2, 1]]
[[1, 1, 1], [1, 2, 1], [1, 1, 1]]
[[19, 34, 45], [34, 76, 14], [13, 6, 13]]
[[3, 3, 3, 3], [3, 4, 4, 3], [3, 4, 4, 3], [3, 3, 3, 3]]
[[192, 19, 8, 6], [48, 324, 434, 29], [56, 292, 334, 8], [3, 4, 23, 23]]
[[291, 48, 7, 5], [47, 324, 454, 30], [58, 292, 374, 4], [9, 2, 53, 291]]
Mixte
[[1, 2, 3], [4, 5, 9], [6, 7, 8]]
[[10, 14, 21], [100, 8, 3], [29, 2, 19]]
[[5, 5, 5, 5], [5, 4, 4, 5], [5, 4, 6, 5], [5, 5, 5, 5]]
[[3, 3, 3, 3], [3, 1, 2, 3], [3, 3, 2, 3], [3, 3, 3, 3]]
[[12, 14, 15, 16], [12, 18, 18, 16], [12, 11, 11, 16], [12, 14, 15, 16]]
[[5, 5, 5, 5, 5], [5, 4, 4, 4, 5], [5, 4, 6, 4, 5], [5, 4, 4, 4, 5], [5, 5, 5, 5, 5]]
Réponses:
Java (JDK 10) ,
247232220 octetsEssayez-le en ligne!
Les sorties:
1
pour "concave"2
pour "plat"3
pour "convexe"4
pour "mixte"Non golfé:
la source
Gelée ,
18 1716 octetsJe crois qu'il y a beaucoup de potentiel pour que cet effort soit hors-golf
Un lien monadique acceptant une liste de listes de nombres qui renvoie une liste d'entiers:
Essayez-le en ligne! Ou consultez la suite de tests .
L‘H
pourrait être remplacé par le moins efficace mais atomiquement plus courtJÆm
.Comment?
la source
Python 2 ,
219216189176 octetsEssayez-le en ligne!
Sorties
set([1]), set([0]), set([-1]),
ouFalse
pour concave, plat, convexe ou mixte, respectivement.Thx pour: Un énorme 27 octets à partir de quelques optimisations par ovs . Et puis encore 13 octets.
La compréhension de la liste
A
(due aux ovs) crée une liste des éléments de chaque anneau, triés.Ensuite, nous comparons les valeurs
max
etmin
entre les anneaux adjacents en examinant les éléments0
th et-1
th de chaque liste triée en A. Notez que si, par exemple,M
est concave,min
de chaque anneau extérieur doit être supérieur à celuimax
de l'anneau le plus intérieur suivant ; et il s'ensuit que celuimax
de chaque anneau extérieur sera également supérieur à celuimin
de l'anneau intérieur suivant.Si
M
est concave, plat ou convexe, l'ensemble de cesmin/max
comparaisons n'aura qu'un seul élément de{-1, 0, 1}
; s'il est mélangé, il y aura deux éléments ou plus.la source
while M:k=M[0]+M[-1];M=M[1:-1];A+=sorted(k+[i.pop(j)for j in[0,-1]for i in M]),
(174 octets),A=()
de votre nombre d'octets ...A=()
while M: A+= (some expression)
.Gelée , 17 octets
Renvoie 1 pour concave , 0 pour plat , -1 pour convexe et rien pour mixte .
Essayez-le en ligne!
la source
JavaScript (ES6), 168 octets
Retour:
-1
pour plat0
pour mixte1
pour convexe2
pour concaveEssayez-le en ligne!
Comment?
Minimum et maximum sur chaque anneau
Nous calculons le minimum m et le maximum M sur chaque anneau.
Nous testons si une cellule est située sur un anneau donné en calculant la distance au carré du centre de la matrice sur chaque axe. Prendre la valeur absolue fonctionnerait tout aussi bien, mais la quadrature est plus courte.
Une cellule à (x, y) est situé sur le n anneau -ième (0-indexés, à partir du plus à l'extérieur) , si la formule suivante est fausse :
où:
Exemple: la cellule (1, 2) est-elle sur le 2ème anneau d'une matrice 6x6?
Drapeaux
À la fin de chaque itération, nous comparons m et M au minimum p et au maximum P de l'anneau précédent et mettons à jour la variable indicateur i en conséquence:
i |= 1
si m> Pi |= 2
si M <pÀ la fin du processus, nous convertissons la valeur finale de i comme suit:
la source
K (ngn / k) ,
1007169 octetsEssayez-le en ligne!
renvoie
1
= concave,::
= plat,-1
= convexe,0
= mixte(
::
est utilisé comme espace réservé pour les valeurs manquantes en k)la source
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
oK , 56 octets
Basé sur la réponse de ngn .
Essayez-le en ligne!
la source
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 octets
Un nouveau meilleur score! (au moment de la publication, au moins) Oh bien, c'est un peu astucieux, mais toujours en C ++.
Essayez-le en ligne!
Lambda
C
prend unstd::vector<std::vector<int>>
et renvoie 1 pour concave, 2 pour convexe, 3 pour plat ou 0 pour mixte.Une version plus lisible du code, avec des identifiants descriptifs, des commentaires,
R
->return
etI
->int
écrits, etc.:la source