La tarea
Dado cualquier conjunto de enteros, por ejemplo:
[-1,476,578,27,0,1,-1,1,2]
y un índice de esa matriz (este ejemplo usa indexación basada en 0 , aunque también puede usar indexación basada en 1 ):
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
Luego devuelve el número más cercano mayor que el elemento en ese índice . En el ejemplo, el número más cercano mayor que 1 es 27 (a 2 índices de distancia).
index = 5
v
[-1,476,578,27,0,1,-1,1,2]
^
Nearest greater number
Output = 27
Supuestos
- El más cercano no incluye envoltura.
- El programa nunca recibirá una matriz de longitud 1 (p. Ej.
[55]
). - Debe suponer que siempre hay un número mayor que el elemento dado.
- Si hay 2 números mayores que el elemento a distancias iguales, puede devolver cualquiera de ellos .
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
fuente
fuente
1; [7,1,-4,2]
2; [3,-1,-3,-2,5]
es un buen caso de prueba. Hay números positivos, pero el resultado es negativo.Respuestas:
MATL , 10 bytes
Esto usa indexación basada en 1. Pruébalo en línea!
Explicación
Considere las entradas
[4,-2,1,-3,5]
,3
como un ejemplo.fuente
Jalea , 10 bytes
Pruébalo en línea!
fuente
Jalea ,
1112 bytes+1 byte: no se permite envolver.
1 indexado.
Pruébalo en línea!
11 byter anterior (indexación de ajuste), indexado 0:
fuente
0
[1,0,2,3]
.3
, que está a 1 de distancia, así que, um, sí, "más cercano" no está definido ...JavaScript (ES6),
5755 bytesToma la matriz
a
y el índicei
en sintaxis curry(a)(i)
.Casos de prueba
Mostrar fragmento de código
fuente
|
lugar de||
?x
que se sobrescriba cuando se cumpla la primera condición.PHP, 106 bytes
Versión en línea
fuente
Haskell , 48 bytes
Pruébalo en línea! Marco de prueba de Ørjan Johansen.
fuente
!!1
lugar (simplemente cambieInteger
aInt
en el encabezado).Asamblea x86-64, 40 bytes
Inspirado en el análisis de Johan du Toit y las soluciones C de 2501 , la siguiente es una función que se puede ensamblar con MASM para plataformas x86-64.
Sigue la convención de llamadas x64 de Microsoft para pasar parámetros, por lo que se pasa la longitud total de la matriz, se pasa
ECX
la posición de interés y se pasaEDX
el puntero a la matriz enteraR8
(es una plataforma de 64 bits, por lo que es un puntero de 64 bits).Devuelve el resultado (el "número mayor más cercano") en
EAX
.Si quisieras llamarlo desde el código C, el prototipo sería:
fuente
Ruby , 64 bytes
Pruébalo en línea!
fuente
Ohmios , 20 bytes
Básicamente una traducción de esta respuesta de Ruby .
Pruébalo en línea!
La explicación vendrá más tarde cuando no esté haciendo la tarea.
fuente
Haskell , 53 bytes
(#)
toma unaInt
y una lista deInt
s oInteger
s (en realidad, cualquierOrd
tipo) y devuelve un elemento de la lista.Cómo funciona
n
es el índice dado yl
es la lista / "matriz" dada.i
, tomando valores de 1 en adelante, es la distancia desde lan
prueba actual.i
, verificamos los índicesn-i
yn+i
.x
es el elemento del
ser probado. Si pasa las pruebas, será un elemento de la comprensión de la lista resultante.!!
podría dar un error fuera de límites, mientras que en sudrop
lugar devuelve la lista completa o una lista vacía. El patrón coincide con lasx:_
comprobaciones de que el resultado no está vacío.x>l!!n
prueba que nuestro elemento es mayor que el elemento en el índicen
(que se garantiza que existe).!!0
al final devuelve la primera coincidencia / elemento de la comprensión de la lista.Pruébalo en línea!
fuente
Python , 62 bytes
Pruébalo en línea!
fuente
Brachylog , 17 bytes
Pruébalo en línea!
Explicación
fuente
Java (OpenJDK 8) , 98 bytes
Pruébalo en línea!
Comprueba los índices en el orden especificado por las sumas parciales de la siguiente suma:
fuente
s=1,
y,s=-s
no sirve de nada en su respuesta? ¿Olvidó eliminarla de un enfoque antiguo?C, 69 bytes
El primer argumento es un argumento de entrada / salida. La salida se almacena en su primer elemento.
Véalo trabajar en línea .
fuente
R, 59 bytes
devuelve una función anónima En el caso de que haya dos elementos mayores a distancias iguales, devolverá el primero (menor índice).
Pruébalo en línea!
fuente
Pyth - 28 bytes
Intentalo
fuente
PHP, 73 bytes
El cierre toma un índice basado en 0 y una matriz de argumentos. Verifique todos los casos de prueba .
fuente
Pyth, 16 bytes
Banco de pruebas .
fuente
C, 110 bytes
Pruébalo en línea
fuente
Java, 96 bytes
Los identificadores se nombran como la respuesta de @Leaky Nun. Además, la mayoría de las partes se han alineado para ser básicamente las mismas: en comparación,
if
se ha reemplazado por lafor
condición-(sacrificando el punto y coma adicional). Se han eliminado los dos puntos moviendo la parte de incremento a la condición (por lo que los paréntesis de la instrucción if anterior prácticamente "se movieron") - cambiando & a | no tuvo impacto en el recuento de personajes.fuente
Clojure, 95 bytes
Esto es lo más corto que se me ocurrió :( También intenté jugar con esto, pero no pude llevarlo a la línea de meta:
fuente