A tarefa
Dada qualquer matriz de números inteiros, por exemplo:
[-1,476,578,27,0,1,-1,1,2]
e um índice dessa matriz (este exemplo usa indexação com base em 0 , embora você também possa usar uma indexação com base em 1 ).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
Em seguida, retorne o número mais próximo maior que o elemento nesse índice . No exemplo, o número mais próximo maior que 1 é 27 (a 2 índices de distância).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
^
Nearest greater number
Output = 27
Suposições
- O mais próximo não inclui a embalagem.
- O programa nunca receberá uma matriz de comprimento 1 (por exemplo;
[55]
). - Você deve assumir que sempre existe um número maior que o elemento fornecido.
- Se houver 2 números maiores que o elemento em distâncias iguais, você poderá retornar um deles .
Pares de E / S
Input:
Index = 45
Array = [69, 43, 89, 93, 62, 25, 4, 11, 115, 87, 174, 60, 84, 58, 28, 67, 71, 157, 47, 8, 33, 192, 187, 87, 175, 32, 135, 25, 137, 92, 183, 151, 147, 7, 133, 7, 41, 12, 96, 147, 9, 134, 197, 3, 107, 164, 90, 199, 21, 71, 77, 62, 190, 122, 33, 127, 185, 58, 92, 106, 26, 24, 56, 79, 71, 24, 24, 114, 17, 84, 121, 188, 6, 177, 114, 159, 159, 102, 50, 136, 47, 32, 1, 199, 74, 141, 125, 23, 118, 9, 12, 100, 94, 166, 12, 9, 179, 147, 149, 178, 90, 71, 141, 49, 74, 100, 199, 160, 120, 14, 195, 112, 176, 164, 68, 88, 108, 72, 124, 173, 155, 146, 193, 30, 2, 186, 102, 45, 147, 99, 178, 84, 83, 93, 153, 11, 171, 186, 157, 32, 90, 57, 181, 5, 157, 106, 20, 5, 194, 130, 100, 97, 3, 87, 116, 57, 125, 157, 190, 83, 148, 90, 44, 156, 167, 131, 100, 58, 139, 183, 53, 91, 151, 65, 121, 61, 40, 80, 40, 68, 73, 20, 135, 197, 124, 190, 108, 66, 21, 27, 147, 118, 192, 29, 193, 27, 155, 93, 33, 129]
Output = 199
Input:
Index = 2
Array = [4,-2,1,-3,5]
Output = 4 OR 5
Input:
Index = 0
Array = [2124, -173, -155, 146, 193, -30, 2, 186, 102, 4545]
Output = 4545
Input:
Index = 0
Array = [1,0,2,3]
Output = 2
Input:
Index = 2
Array = [3,-1,-3,-2,5]
Output = -1 OR -2
code-golf
array-manipulation
integer
Graviton
fonte
fonte
1; [7,1,-4,2]
2; [3,-1,-3,-2,5]
é um bom caso de teste. Existem números positivos, mas o resultado é negativo.Respostas:
MATL , 10 bytes
Isso usa indexação baseada em 1. Experimente online!
Explicação
Considere entradas
[4,-2,1,-3,5]
,3
como um exemplo.fonte
Gelatina , 10 bytes
Experimente online!
fonte
Geléia ,
1112 bytes+1 byte - Não é permitido agrupar.
1 indexado.
Experimente online!
11 byter anterior (indexação de agrupamento), indexado 0:
fonte
0
[1,0,2,3]
.3
, que é uma distância tão, hum, sim "mais próximo" não é definida ...JavaScript (ES6),
5755 bytesPega a matriz
a
e o índicei
na sintaxe de currying(a)(i)
.Casos de teste
Mostrar snippet de código
fonte
|
vez de||
?x
ser substituídos quando a primeira condição for atendida.PHP, 106 bytes
Versão Online
fonte
Haskell , 48 bytes
Experimente online! Estrutura de teste de Ørjan Johansen.
fonte
!!1
vez disso (basta alterarInteger
paraInt
no cabeçalho).x86-64 Assembly, 40 bytes
Inspirado na análise das soluções Johan du Toit e C 2501 , a seguir, é uma função que pode ser montada com o MASM para plataformas x86-64.
Ele segue a convenção de chamada do Microsoft x64 para a passagem de parâmetros, para que o comprimento total da matriz seja passado
ECX
, a posição de interesse seja passadaEDX
e o ponteiro para a matriz inteira seja passadoR8
(é uma plataforma de 64 bits, portanto, é um ponteiro de 64 bits).Retorna o resultado (o "número maior mais próximo") em
EAX
.Se você quisesse chamá-lo do código C, o protótipo seria:
fonte
Ruby , 64 bytes
Experimente online!
fonte
Ohm , 20 bytes
Basicamente, uma tradução desta resposta Ruby .
Experimente online!
A explicação virá mais tarde quando não estiver fazendo lição de casa.
fonte
Haskell , 53 bytes
(#)
pega umaInt
lista deInt
s ouInteger
s (na verdade, qualquerOrd
tipo) e retorna um elemento da lista.Como funciona
n
é o índice fornecido el
é a lista / "matriz" especificada.i
, assumindo valores de 1 para cima, é a distância do testen
atualmente.i
, verificamos os índicesn-i
en+i
.x
é o elemento del
ser testado. Se passar nos testes, será um elemento da compreensão da lista resultante.!!
pode gerar um erro fora dos limites, enquanto, emdrop
vez disso, retorna a lista inteira ou uma lista vazia. O padrão corresponde àsx:_
verificações de que o resultado não está vazio.x>l!!n
testa se nosso elemento é maior que o elemento no índicen
(que é garantido que existe).!!0
no final retorna a primeira correspondência / elemento da compreensão da lista.Experimente online!
fonte
Python , 62 bytes
Experimente online!
fonte
Braquilog , 17 bytes
Experimente online!
Explicação
fonte
Java (OpenJDK 8) , 98 bytes
Experimente online!
Verifica os índices na ordem especificada pelas somas parciais da seguinte soma:
fonte
s=1,
e,s=-s
não tem utilidade na sua resposta? Você esqueceu de removê-lo de uma abordagem antiga?C, 69 bytes
O primeiro argumento é um argumento de entrada / saída. A saída é armazenada em seu primeiro elemento.
Veja como funciona online .
fonte
R, 59 bytes
retorna uma função anônima. Caso haja dois elementos maiores a distâncias iguais, retornará o primeiro (índice menor).
Experimente online!
fonte
Pitão - 28 bytes
Tente
fonte
PHP, 73 bytes
encerramento leva o índice baseado em 0 e a matriz de argumentos. Verifique todos os casos de teste .
fonte
Pitão, 16 bytes
Conjunto de teste .
fonte
C, 110 bytes
Experimente online
fonte
Java, 96 bytes
Os identificadores são nomeados como a resposta de @Leaky Nun. Além disso, a maioria das partes foi alinhada para ser basicamente a mesma: em comparação, a
if
foi substituída pelafor
condição-(sacrificando o ponto e vírgula adicional). Os dois pontos foram removidos movendo a parte de incremento para a condição (para que os parênteses da instrução if anterior praticamente "se movessem") - alterando & para | não teve impacto na contagem de caracteres.fonte
Clojure, 95 bytes
Este é o mais curto que consegui :( Eu também tentei brincar com isso, mas não consegui trazê-lo para a linha de chegada:
fonte