Definições
O k ésimo anel de uma matriz quadrada de tamanho N , em que 1 ≤ k ≤ teto (N / 2) é a lista formada pelos elementos das k e e (N-k + 1) ésima filas e colunas, mas sem a primeiro e último elementos k-1 .
Exemplo:
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 em anéis: + ------------------- + | 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 | + ------------------- +
O primeiro anel do anterior é 1,2,3,4,5,1,4,8,3,4,5,6,7,3,8,6
, o segundo é 7,8,9,5,9,1,2,7
e o terceiro é 6
.
Um N por N da matriz de números inteiros positivos é (para os fins desta desafio):
côncava se todos os números inteiros sobre o k th anel são estritamente maior do que aqueles sobre o (k + 1) th anel, onde K é qualquer número inteiro entre 1 e N (aqueles no primeiro anel são maiores do que aqueles no segundo, que são por sua vez, maior que os do terceiro, etc.). Exemplo:
4 5 6 4 7 -> porque 4,5,6,4,7,4,8,5,5,4,6,5,9,5,5,4 são todos maiores que 4 3 2 2 4 qualquer um dos 3,2,2,3,2,3,3,2, todos superiores a 1 5 2 1 3 8 5 3 3 2 5 9 5 6 4 5
flat se todos os números inteiros na matriz forem iguais. Outro exemplo (talvez redundante):
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
convexo se todos os números inteiros no k- ésimo anel forem estritamente inferiores aos do (k + 1) -ésimo anel, onde k é qualquer número inteiro entre 1 e N (aqueles no primeiro anel são inferiores aos do segundo anel, que são por sua vez, inferiores aos do terceiro, etc.). Exemplo:
1 2 1 -> porque 1 e 2 são ambos inferiores a 6 2 6 2 1 2 1
misturado se a matriz não atender a nenhum dos critérios acima. Exemplo:
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
Desafio
Dada uma matriz quadrada de números inteiros positivos de tamanho pelo menos 3 , classifique-a de acordo com as definições acima. Ou seja, gera um dos quatro valores consistentes diferentes , com base no fato de a matriz ser côncava, plana, convexa ou mista.
Você pode competir em qualquer linguagem de programação e pode receber e fornecer saída por qualquer método padrão e em qualquer formato razoável, observando que essas brechas são proibidas por padrão. Isso é código-golfe , então a submissão mais curta (em bytes) para todos os idiomas vence.
Casos de teste
Aqui estão alguns exemplos para você escolher - selecionei 6 de cada categoria.
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]]
Misturado
[[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]]
fonte
Respostas:
Java (JDK 10) ,
247232220 bytesExperimente online!
Saídas:
1
para "côncavo"2
para "apartamento"3
para "convexo"4
para "misto"Ungolfed:
fonte
Geléia ,
18 1716 bytesEu acredito que há muito potencial para esse esforço ser jogado fora do golfe
Um link monádico que aceita uma lista de listas de números que retorna uma lista de números inteiros:
Experimente online! Ou veja a suíte de testes .
L‘H
poderia ser substituído pelo menos eficiente, mas atomicamente mais curtoJÆm
.Quão?
fonte
Python 2 ,
219216189176 bytesExperimente online!
Saídas
set([1]), set([0]), set([-1]),
ouFalse
para côncavo, plano, convexo ou misto, respectivamente.Thx for: A 27 bytes impressionantes de algumas otimizações por ovs . E depois outros 13 bytes depois.
A compreensão da lista
A
(devido aos ovs) cria uma lista dos elementos de cada anel, classificados.Em seguida, comparamos os valores
max
emin
entre os anéis adjacentes observando os0
th e-1
th th elementos de cada lista classificada em A. Observe que se, por exemplo,M
é côncavo,min
cada anel externo deve ser maior quemax
o próximo anel mais interno ; e segue-se quemax
cada anel externo também será maior quemin
o próximo anel mais interno.Se
M
for côncavo, plano ou convexo, o conjunto dessasmin/max
comparações terá apenas 1 elemento{-1, 0, 1}
; se estiver misturado, haverá dois ou mais elementos.fonte
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=()
de sua contagem de bytes ...A=()
while M: A+= (some expression)
.Geléia , 17 bytes
Retorna 1 para côncavo , 0 para plano , -1 para convexo e nada para misto .
Experimente online!
fonte
JavaScript (ES6), 168 bytes
Devoluções:
-1
para apartamento0
para misturado1
para convexo2
côncavoExperimente online!
Quão?
Mínimo e máximo em cada anel
Calculamos o mínimo de m e o valor máximo M em cada anel.
Testamos se uma célula está localizada em um determinado anel, calculando a distância ao quadrado do centro da matriz em cada eixo. Tomando o valor absoluto funcionaria tão bem, mas a quadratura é mais curta.
Uma célula em (x, y) está localizada no n- ésimo anel (indexado 0, iniciando no mais externo) se a seguinte fórmula for falsa :
Onde:
Exemplo: a célula (1, 2) está no 2º anel de uma matriz 6x6?
Bandeiras
No fim de cada iteração, que compara m e M contra o mínimo de p e o máximo P do anel anterior e actualizar a variável bandeira i em conformidade:
i |= 1
se m> Pi |= 2
se M <pNo final do processo, convertemos o valor final de i da seguinte maneira:
fonte
K (ngn / k) ,
1007169 bytesExperimente online!
retornos
1
= côncavo,::
= plano,-1
= convexo,0
= misto(
::
é usado como um espaço reservado para valores ausentes em k)fonte
&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/*:'(|+:)\)'-1_(-1_1_+-1_1_)\
OK , 56 bytes
Baseado na resposta da ngn .
Experimente online!
fonte
{&/1_`{&/+(y>|/x;y<&/x;,/x=/:y)}':(,/x)@.=i&|i:&/!2##x}
C ++ 17 (gcc) , 411 bytes
Um novo recorde! (no momento da postagem, pelo menos) Oh, bem, é um pouco bacana, mas ainda é C ++.
Experimente online!
O Lambda
C
pega aestd::vector<std::vector<int>>
retorna 1 para côncavo, 2 para convexo, 3 para plano ou 0 para misto.Uma versão mais legível do código, com identificadores descritivos, comentários,
R
->return
eI
->int
escritos, etc .:fonte