Este problema está "inspirado" en una pregunta que se hizo originalmente en Quora (no para golf de código). Solo quiero que sea un desafío para ustedes (y mi primer problema presentado aquí).
Dada una matriz de elementos enteros vy un entero d(suponemos que d es menor o igual a la longitud de la matriz), considere todas las secuencias de delementos consecutivos en la matriz. Para cada secuencia, calcule la diferencia entre el valor máximo y mínimo de los elementos en esa secuencia y asígnele el nombre de desviación.
Su tarea es escribir un programa o función que calcule el valor máximo entre todas las desviaciones de todas las secuencias consideradas anteriormente, y devolver o generar ese valor.
Ejemplo resuelto:
v: (6,9,4,7,4,1)
d: 3
The sequences of length 3 are:
6,9,4 with deviation 5
9,4,7 with deviation 5
4,7,4 with deviation 3
7,4,1 with deviation 6
Thus the maximal deviation is 6, so the output is 6.
Este es el código de golf, por lo que gana la respuesta más corta en bytes.

withen una función lambda completaUncaught SyntaxError: Unexpected token with. ¿Puedes publicar un fragmento de trabajo?with(Math)o usarf=eval("with(Math)(v,d)=>max(...a)))").Python, 60 bytes
Ahorrando 5 bytes gracias a Neil
Mi primera lambda recursiva!
Uso:
fuente
v and; el rango no aumentará si elimina elementos.Perl, 48 bytes
Incluye +5 para
-0piDé el ancho después de la
-iopción, dé los elementos como líneas separadas en STDIN:Solo el código:
(use un literal
\npara la puntuación reclamada)fuente
$&contendrá toda la coincidencia que se evaluará como el primer número en contexto aritmético.$1contendrá el último número. Entonces forzosamente fallo la expresión regular con\A. Por lo tanto, intentará todas las posiciones iniciales y longitudes hasta el ancho. Uso el valor absoluto de la diferencia como un índice de matriz y veo cuán grande crece la matriz. Perl no tiene incorporado,maxasí que tengo que improvisar-0pi3 -een-0pi3e? Solo una suposición sobre una posible reducción, no uso perl (de ahí mi pregunta).-icome todo después de él como su valor, incluido cualquierae-etiene que ir justo antes del código? Gorrón.R,
636256 bytesBillywob ya ha proporcionado una gran respuesta R utilizando solo las funciones básicas . Sin embargo, quería ver si era posible un enfoque alternativo, tal vez usando algunos de los amplios paquetes de R. Hay una buena función
rollapplyen elzoopaquete diseñado para aplicar una función a una ventana móvil de una matriz, de modo que se adapte bien a nuestros propósitos. Usamosrollapplypara encontrar elmaxde cada ventana, y lo usamos nuevamente para encontrar elminde cada ventana. Luego tomamos la diferencia entre los máximos y los minutos, lo que nos da la desviación para cada ventana, y luego devolvemos lamaxde esos.fuente
gtools::rolling, pero ese es un byte más y no estoy familiarizado con eso. Siempre tengo dudas sobre el uso de paquetes no básicos: por un lado, se siente como hacer trampa cuando hay una solución simple; Por otro lado, creo que los paquetes (y la comunidad) son uno de los puntos fuertes de R como lenguaje.R,
80bytes de 77 bytesEditar: Guardado 3 bytes gracias a @rturnbull
fuente
1:(length(s)-d+1)cond:sum(1|s)-d+1.PowerShell v2 +, 68 bytes
Solución iterativa. Se repite
$v, pero en realidad solo lo estamos utilizando como contador en lugar de analizar los valores. En cada iteración, estamos cortando$vpor$i..($i+++$d-1), donde está$ipredeterminado0. Tenemos|sortesos elementos, y almacenamos el resultado en$x. Luego tomamos el más grande[-1]y restamos el más pequeño[0]. Luego tomamos|sortesos resultados y tomamos lo más importante[-1]de eso. Ese número se deja en la tubería y la salida es implícita.Ejemplos
fuente
05AB1E ,
1210 bytesUtiliza la codificación CP-1252 .
Pruébalo en línea!
Explicación
fuente
Java 8,
140128Me afeité un montón, en parte gracias a VTCAKAVSMoACE.
Sin golf
fuente
int l(int[]a,int d){int x=0,i=0,f,j,k;for(;i<=a.length-d;i++)for(j=i;j<i+d;j++)for(k=j;k<i+d;)x=(f=a[j]-a[k++])<0?-f:f>x?f:x;return x;}Mathematica,
4137 bytesfuente
{-1,1}para evitarloAbs?Max[BlockMap[MinMax,#,#2,1].{-1,1}]&.Ruby, 45 bytes
Siento que esto podría ser mucho mejor.
fuente
MATLAB con estadísticas y cajas de herramientas de procesamiento de imágenes, 33 bytes
Esto define una función anónima. Ejemplo de uso:
También puede probarlo en Octave en Ideone (pero Octave, a diferencia de Matlab, requiere cargar explícitamente el paquete de imágenes).
Explicación
fuente
Scala, 48 bytes
Sin golf:
Explicación:
fuente
MATL , 10 bytes
Pruébalo en línea!
Explicación
Considere las entradas [6,9,4,7,4,1], 3 como ejemplo.
fuente
En realidad , 13 bytes
Pruébalo en línea!
-6 bytes de la observación en la respuesta Haskell de nimi , que los cortes más cortos que
dno afectan la desviación máxima.Explicación:
fuente
PHP,
8987 bytesNo es particularmente inteligente o bonita, pero funciona. Usar como:
para
v=6,9,4,7,4,1,d=3Editar: 2 bytes guardados gracias a Jörg Hülsermann
fuente
echo+$o;en lugar deecho$o?:0;CJam , 17 bytes
(También
q~ew:$z)\(\;.-:e>)Pruébalo en línea!
Explicación
fuente
Java 7.159 bytes
Java = caro (sé que se puede jugar mucho más)
Sin golf
fuente
Haskell, 56 bytes
Ejemplo de uso:
3 # [6,9,4,7,4,1]->6.Teniendo en cuenta los rangos menos
dno cambia el máximo total, por lo que podemos corrertake dhasta el final de la lista (es decir, también incluyen los rangos con el últimod-1,d-2, ...0elementos). La recursión se detiene con la lista vacía donde establecemos la desviación0.fuente
Java, 126 bytes
Me inspiré en la respuesta de dpa97 y encontré esto:
Código expandido, golfizado y de ejemplo
fuente
Raqueta 121 bytes
Sin golf:
Pruebas:
Salida:
fuente
q, 25 bytes
mmaxymminson ventanas deslizantes máximas y mínimas respectivamenteEjemplo
fuente
C #, 131 bytes
aquí hay una solución detallada de linq
fuente
C #, 163 bytes
Golfizado:
Sin golf:
Prueba:
Salida:
fuente
Pyth, 11 bytes
Explicación
fuente
Jalea , 8 bytes
Pruébalo en línea!
Utiliza el mismo algoritmo que Dyalog APL, pero lo imaginé antes de mirarlo.
Explicación:
Nota:
x,yse dejan, argumentos derecho, respectivamente.fuente
Perl 6 , 44 bytes
$^ay$^bson los dos argumentos de la función, llamadosvydrespectivamente en la declaración del problema. Elrotormétodo devuelve la secuencia de subsecuenciasvde tamañod.fuente
Clojure,
7367 bytesEditar: Usar en
#(...)lugar de(fn[...])y enforlugar demap.fuente
Python 3, 80 bytes
fuente
(max(v[i:i+d])-min(v[i:i+d])for i in range(-~len(v)-d)lugar demap(lambda g:max(g)-min(g),[v[i:i+d]for i in range(-~len(v)-d)])