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 v
y un entero d
(suponemos que d es menor o igual a la longitud de la matriz), considere todas las secuencias de d
elementos 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.
with
en 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
-0pi
Dé el ancho después de la
-i
opción, dé los elementos como líneas separadas en STDIN:Solo el código:
(use un literal
\n
para la puntuación reclamada)fuente
$&
contendrá toda la coincidencia que se evaluará como el primer número en contexto aritmético.$1
contendrá 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,max
así que tengo que improvisar-0pi3 -e
en-0pi3e
? Solo una suposición sobre una posible reducción, no uso perl (de ahí mi pregunta).-i
come todo después de él como su valor, incluido cualquierae
-e
tiene 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
rollapply
en elzoo
paquete 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. Usamosrollapply
para encontrar elmax
de cada ventana, y lo usamos nuevamente para encontrar elmin
de 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 lamax
de 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$v
por$i..($i+++$d-1)
, donde está$i
predeterminado0
. Tenemos|sort
esos elementos, y almacenamos el resultado en$x
. Luego tomamos el más grande[-1]
y restamos el más pequeño[0]
. Luego tomamos|sort
esos 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
d
no 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
=3
Editar: 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
d
no cambia el máximo total, por lo que podemos corrertake d
hasta el final de la lista (es decir, también incluyen los rangos con el últimod-1
,d-2
, ...0
elementos). 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
mmax
ymmin
son 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
,y
se dejan, argumentos derecho, respectivamente.fuente
Perl 6 , 44 bytes
$^a
y$^b
son los dos argumentos de la función, llamadosv
yd
respectivamente en la declaración del problema. Elrotor
método devuelve la secuencia de subsecuenciasv
de tamañod
.fuente
Clojure,
7367 bytesEditar: Usar en
#(...)
lugar de(fn[...])
y enfor
lugar 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)])