Definiciones
El anillo k th de una matriz cuadrada de tamaño N , donde 1 ≤ k ≤ techo (N / 2) es la lista formada por los elementos de las filas y columnas k th y (N-k + 1) th , pero sin el primer y último elemento k-1 .
Ejemplo:
Matriz: 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 Delimitado en anillos: + ------------------- + El | 1 2 3 4 5 | El | + ----------- + | El | 6 | 7 8 9 | 1 | El | El | + --- + | El | El | 8 | 7 | 6 | 5 | 4 | El | El | + --- + | El | El | 3 | 2 1 9 | 8 | El | + ----------- + | El | 7 6 5 4 3 | + ------------------- +
El primer anillo de lo anterior es 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, el segundo es 7,8,9,5,9,1,2,7
y el tercero es 6
.
Una matriz N por N de enteros positivos es (a los efectos de este desafío):
cóncavo si todos los enteros en la k ésimo anillo son estrictamente mayor que aquellos en el (k + 1) ésimo anillo, donde k es cualquier número entero entre 1 y N (aquellos en el primer anillo son mayores que los de la segunda, que son a su vez mayor que los del tercero, etc.). Ejemplo:
4 5 6 4 7 -> porque 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 son todos más altos que 4 3 2 2 4 cualquiera de 3,2,2,3,2,3,3,2, que son todos superiores a 1 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
plano si todos los enteros en la matriz son iguales. Otro ejemplo (quizás redundante):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
convexa si todos los números enteros en el k ésimo anillo están estrictamente inferior a las de la (k + 1) ésimo anillo, donde k es cualquier número entero entre 1 y N (aquellos en el primer anillo son más bajos que los de la segunda, que son a su vez más bajos que los del tercero, etc.). Ejemplo:
1 2 1 -> porque 1 y 2 son inferiores a 6 2 6 2 1 2 1
mezclado si la matriz no satisface ninguno de los criterios anteriores. Ejemplo:
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
Desafío
Dada una matriz cuadrada de enteros positivos de tamaño al menos 3 , clasifíquela de acuerdo con las definiciones anteriores. Es decir, genera uno de cuatro valores consistentes diferentes en función de si la matriz es cóncava, plana, convexa o mixta.
Puede competir en cualquier lenguaje de programación y puede recibir información y proporcionar resultados a través de cualquier método estándar y en cualquier formato razonable, mientras toma nota de que estas lagunas están prohibidas de forma predeterminada. Este es el código de golf , por lo que gana el envío más corto (en bytes) para cada idioma .
Casos de prueba
Aquí hay un montón de ejemplos para que pueda elegir: seleccioné 6 de cada categoría.
Cóncavo
[[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]]
Plano
[[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]]
Convexo
[[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]]
Mezclado
[[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]]
fuente
Respuestas:
Java (JDK 10) ,
247232220 bytesPruébalo en línea!
Salidas:
1
para "cóncavo"2
para "plano"3
para "convexo"4
para "mixto"Sin golf:
fuente
Jalea ,
18 1716 bytesCreo que hay mucho potencial para que este esfuerzo sea superado
Un enlace monádico que acepta una lista de listas de números que devuelve una lista de enteros:
Pruébalo en línea! O vea el conjunto de pruebas .
L‘H
podría ser reemplazado por el menos eficiente pero atómicamente más cortoJÆm
.¿Cómo?
fuente
Python 2 ,
219216189176 bytesPruébalo en línea!
Salidas
set([1]), set([0]), set([-1]),
oFalse
para cóncavo, plano, convexo o mixto, respectivamente.Gracias por: La friolera de 27 bytes de algunas optimizaciones por ovs . Y luego otros 13 bytes después.
La comprensión de la lista
A
(debido a los ovs) crea una lista de los elementos de cada anillo, ordenados.A continuación, comparamos los valores
max
ymin
entre los anillos adyacentes al observar los elementos0
th y-1
th de cada lista ordenada en A. Tenga en cuenta que si, por ejemplo,M
es cóncavo,min
cada anillo externo debe ser mayor quemax
el siguiente anillo más interno ; y luego se deduce que elmax
de cada anillo externo también será mayor que elmin
del anillo más interno.Si
M
es cóncavo, plano o convexo, el conjunto de estasmin/max
comparaciones tendrá solo 1 elemento de{-1, 0, 1}
; Si se mezcla, habrá dos o más elementos.fuente
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 bytes),A=()
tu conteo de bytes ...A=()
while M: A+= (some expression)
.Jalea , 17 bytes
Devuelve 1 para cóncavo , 0 para plano , -1 para convexo y nada para mixto .
Pruébalo en línea!
fuente
JavaScript (ES6), 168 bytes
Devoluciones:
-1
para piso0
para mixto1
para convexo2
para cóncavoPruébalo en línea!
¿Cómo?
Mínimo y máximo en cada anillo.
Calculamos el mínimo m y el máximo M en cada anillo.
Probamos si una celda está ubicada en un anillo dado calculando la distancia al cuadrado desde el centro de la matriz en cada eje. Tomar el valor absoluto funcionaría igual de bien, pero la cuadratura es más corta.
Una célula en (x, y) se encuentra en la n anillo-ésimo (0 indexados, a partir de la más exterior) si la siguiente fórmula es falso :
dónde:
Ejemplo: ¿ está la celda (1, 2) en el segundo anillo de una matriz de 6x6?
Banderas
Al final de cada iteración, comparamos m y M contra el mínimo p y el máximo P del anillo anterior y actualizar la variable de indicador i en consecuencia:
i |= 1
si m> Pi |= 2
si M <pAl final del proceso, convertimos el valor final de i de la siguiente manera:
fuente
K (ngn / k) ,
1007169 bytesPruébalo en línea!
devuelve
1
= cóncavo,::
= plano,-1
= convexo,0
= mixto(
::
se utiliza como marcador de posición para valores faltantes en k)fuente
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
ok , 56 bytes
Basado en la respuesta de ngn .
Pruébalo en línea!
fuente
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 bytes
Un nuevo puntaje alto! (al momento de publicar, al menos) Oh, bueno, es un poco ingenioso, pero sigue siendo C ++.
Pruébalo en línea!
Lambda
C
toma astd::vector<std::vector<int>>
y devuelve 1 para cóncavo, 2 para convexo, 3 para plano o 0 para mixto.Una versión más legible del código, con identificadores descriptivos, comentarios,
R
->return
yI
->int
escritos, etc .:fuente