Una secuela de esta pregunta .
Tarea
Dada una matriz de enteros positivos, encuentre el elemento k más grande para el cual:
Existe cierta distancia entera positiva n , de modo que el elemento en la matriz ubicado n lugares a la izquierda o derecha de k es igual a n .
Se garantiza que la matriz contiene al menos un elemento que cumple esta condición.
El código más corto (en bytes) gana. Puede elegir el formato de E / S que desee.
Ejemplo
Dada la entrada
[4, 6, 7, 9, 3, 6, 5, 7, 2]
Los valores elegibles son:
- El
4
, ya que hay7
7 posiciones ubicadas a su derecha - El primero
6
, ya que hay3
3 posiciones ubicadas a su derecha - El
3
, ya que hay4
4 posiciones ubicadas a su izquierda - El
5
, ya que hay2
2 posiciones ubicadas a su derecha - El segundo
7
, ya que hay3
3 posiciones ubicadas a su izquierda.
De estos valores, el mayor es 7
.
Casos de prueba
[1, 13] → 13
[2, 9, 8, 3, 72, 2] → 8
[5, 28, 14, 5, 6, 3, 4, 7] → 14
[1, 3, 5, 15, 4, 1, 2, 6, 7, 7] → 7
[5, 1, 3, 5, 2, 5, 5, 8, 5, 1, 5, 1, 2, 3] → 5
[5, 12, 2, 5, 4, 7, 3, 3, 6, 2, 10, 5, 5, 5, 4, 1, 8, 5] → 10
Respuestas:
Jalea , 9 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
05AB1E , 21 bytes
Explicación
Pruébalo en línea!
fuente
Haskell,
615755 bytesEjemplo de uso:
(f.zip[0..]) [5,28,14,5,6,3,4,7]
->14
.(Más o menos) una implementación directa de la definición: para cada índice
n
de la lista de entrada,x
mantengaa := x!!n
si hay un índicei
donde seab := x!!i
igualabs(n-i)
. Encuentra el máximo.Editar: @xnor guardó dos bytes. ¡Gracias!
fuente
x
, debería ser más corto definir una funciónz
y componerlazip[0..]
.Jalea , 10 bytes
Pruébalo en línea! o verificar todos los casos de prueba .
Cómo funciona
fuente
Python 3,
858072 bytesEditar: -8 Bytes gracias a @Dennis
fuente
EXCEL:
3230 bytes=MAX(IF(A:A-ROW(A:A)<0,A:A,0))
Todavía no puedo creer que sea tan corto ...
Cómo usar:
pegue esto en CUALQUIER celda, EXCEPTO las celdas de la columna A. Después de pegar, mientras sigue editando, presione
control
+shift
+enter
para ingresarlo correctamente.ponga sus valores en la columna A, 1 valor por celda (según la entrada CSV).
Si desea saber cómo funciona esto, he publicado un consejo adicional en mi pregunta Consejos para jugar al golf en Excel .
fuente
JavaScript (ES6), 61 bytes
fuente
Perl, 45 bytes
Incluye +2 para
-ap
Dé números en una línea en STDIN:
largest.pl
:Se puede obtener un byte más reemplazándolo
^P
por el carácter de control literal, pero eso lleva a una advertencia en STDERR en perls recientes.Asume
largest number + array length < 2^32
fuente
Pyth,
1917 bytesGracias a @ Pietu1998 por -2 bytes
Un programa que toma la entrada de una lista en STDIN e imprime el resultado.
Pruébalo en línea
Cómo funciona
fuente
}#
es el mismo que@
. Además, si reorganiza el último bit,-kb+bk
, puede eliminar el últimok
ya que Pyth lo inserta automáticamente.MATL, 13 Bytes
La entrada debe ser un vector de columna. Es decir, la entrada está separada por punto y coma como [1; 2; 3], o separada por comas con una marca de transposición al final como [1,2,3] '.
Pruébalo en línea!
Todos los casos de prueba: (A) , (B) , (C) , (D) , (E) , (F)
Gracias a Suever por las sugerencias en la sala de chat de MATL para guardar 2 personajes.
Explicación:
La estrategia general es la misma que mi respuesta Octave / MATLAB, donde se explica el concepto básico: https://codegolf.stackexchange.com/a/94161/42247
El código específico en esta respuesta MATL se construye de la siguiente manera:
El núcleo del método es la construcción de la matriz de Toeplitz cuya entrada ij es abs (ij). Primero construimos la matriz Toeplitz con entradas abs (i-1) +1 con el comando toeplitz de MATL YT de la siguiente manera:
Para ver cómo funciona esto, llamemos al vector de entrada a este fragmento de código 'v'. La 'n' encuentra la longitud de v, luego ':' construye el vector 1: longitud (v). Luego, la 't' hace otra copia de 1: longitud (v) en la pila; esta copia adicional es necesaria debido a un error conocido en la función YT en MATL (el equivalente MATL de toeplitz ()), en el que espera dos copias de la entrada en lugar de 1. Luego, YT toma las dos copias de este vector 1 : longitud (v) fuera de la pila, y hace que la matriz Toeplitz abs (ij) +1 a partir de ellos.
Ahora necesitamos restar 1 de esta matriz para obtener la matriz de Toeplitz con las entradas abs (ij), y encontrar las ubicaciones de ij donde esta matriz de Toeplitz de abs (ij) es igual a la matriz de todos los vectores de columna que contienen copias de columna de la entrada vector v. Esto se hace de la siguiente manera:
La primera 't' hace una copia extra de la entrada y la almacena en la pila. El 'n: tYT' crea la matriz toeplitz como se describió anteriormente y la envía a la pila. Entonces 'q' resta 1 de la matriz de Toeplitz, y '=' hace la comparación de igualdad de elementos entre la matriz abs (ij) y el vector cuyas columnas son copias de la entrada. Tenga en cuenta que al comparar un vector de columna con una matriz, estamos aprovechando implícitamente las reglas de transmisión del operador de MATLAB / MATL (el vector de columna en la comparación se copia para hacer una matriz sin emitir ningún comando).
Finalmente, necesitamos encontrar los índices de fila i donde hay una columna j tal que la entrada ij en la diferencia de matriz construida arriba sea igual a 1, luego obtenga el valor del vector de entrada correspondiente a estos índices, luego tome el máximo. Esto en los siguientes tres pasos:
1) Encuentre los índices para cualquier fila que contenga un valor distinto de cero:
2) Extraiga los elementos del vector de entrada correspondientes a esos índices:
3) Encuentra y devuelve el elemento máximo:
fuente
YT
ha cambiado en la versión 20.2.2 . Ahora usa 1 entrada por defecto (que es más útil en general). Si bien eso le ahorraría 1 byte aquí (eliminart
antesYT
), no se puede explotar porque el cambio en el idioma es posterior al desafío. Pero tiene el efecto de que su respuesta ya no es válida en la nueva versión, que ahora está en vivo en TIOn:
porf
Ruby, 66 bytes
fuente
Octava / MATLAB, 40 Bytes
La entrada debe ser un vector de columna.
Gracias a Luis Mendo por las sugerencias para guardar 3 bytes (ver comentario)
Gracias a Suever por las sugerencias para guardar 4 bytes más (reemplazando ~~ (sum ()) con any ())
Explicación:
Dado un vector de entrada v, este problema es equivalente a encontrar todas las soluciones i, j de la siguiente ecuación discreta,
donde abs () es la función de valor absoluto. Cada v (i) para el que se resuelve esta ecuación es una de las soluciones candidatas que podemos maximizar.
Como una función discreta de i y j, todas las posibilidades para el lado izquierdo se pueden organizar en la matriz toeplitz que se parece a esto:
Y dado que el lado derecho no depende de i, todas las posibilidades se pueden organizar en una matriz donde las columnas son todas copias de la entrada,
Para encontrar todas las soluciones a la ecuación, restamos estas dos matrices y encontramos las ubicaciones donde hay un cero. Las filas donde hay un cero corresponden a los índices deseados i donde hay aj tal que abs (ij) = v (i).
Otros trucos:
fuente
v
como un vector de columna, solo dígalo en la respuesta. Además, reemplazafind
por~~
para guardar dos bytes mástoeplitz
(YT
), utiliza dos entradas (no una) de forma predeterminadaMathematica, 69 bytes
Función anónima. Toma una lista de enteros como entrada y devuelve un entero como salida. Ignora cualquier mensaje generado.
fuente
Scala, 94 bytes
fuente
PHP, 128 bytes
fuente
Java 7,
125123 bytes2 bytes guardados gracias a @mrco .
Ungolfed (tipo de) y código de prueba:
Pruébalo aquí.
Salida:
fuente
,y
. Y de hecho llegué a la misma conclusión con respecto al ternario único if. Por supuesto que es posible, pero hará la verificación dos veces, lo que lo hará mucho más largo.Java, 118 bytes
fuente
Python, 58 bytes
Sobre la base de la respuesta de Tony S. Rubí . Esta respuesta funciona en Python 2 y 3. Las sugerencias de golf son bienvenidas.
No golfista
fuente
Ruby 56 bytes
Mi solución de rubí más pequeña.
Bastante fácil de probar en la consola de rieles
Esto comenzó en 63 bytes, ¡gracias por las sugerencias para ayudar a recortarlo!
fuente
.map
lugar de.each
(x) if (y)
se puede reemplazar con(y)&&(x)
a<<b
lugar dea+=[b]
En realidad , 17 bytes
Esta respuesta es en realidad un puerto de mi respuesta de Python . Sugerencias de golf bienvenidas. Pruébalo en línea!
No golfista
fuente
T-SQL (sqlserver 2016), 132 bytes
Golfizado:
Sin golf:
Violín
fuente
JavaScript (ES6),
5654 bytesfuente
Clojure, 68 bytes
Por ejemplo,
(map-indexed (juxt - +) [3 4 1 2])
es([-3 3] [-3 5] [1 3] [1 5])
(indexe+/-
su valor), estos se utilizan para buscar valores del vector original (por defecto fuera del rango0
) y se encuentra el valor máximo. Todavía se siente un poco detallado, pero al menos tengo que usarjuxt
:)fuente