Dada una entrada de un entero n y una lista de enteros positivos m 1 , m 2 , ..., genera una lista de enteros m 1 ' , m 2 ' , ... donde m x ' se define como el promedio de m xn a través de m x + n .
Al calcular estos promedios, ignore los índices que están fuera de los límites (y ajuste lo que está dividiendo la suma por consiguiente). n siempre será ≥ 1 pero nunca la mitad de la longitud de m (redondeado hacia abajo) o más. Esto significa que la longitud mínima de m es 4. Los elementos en m serán enteros positivos, pero la salida debe tener una precisión de al menos 3 decimales.
Los elementos de entrada / salida que son listas pueden ser cadenas separadas por espacios en blanco / comas o matrices / listas / etc. Para la entrada, si su solución es una función, también puede tomar un primer argumento de n y argumentos adicionales como m x (esto también se aplica a los argumentos de la línea de comandos).
Aquí hay una representación visual de n=1
:
1 4 5 7 10
__/ | | |
L avg(1,4) = 2.5
| | |
\___/ | |
L avg(1,4,5) = 3.333
| |
\___/ |
L avg(4,5,7) = 5.333
|
\___/
L avg(5,7,10) = 7.333
\___
L avg(7,10) = 8.5
Final output: 2.5 3.333 5.333 7.333 8.5
Como se trata de código golf , gana el código más corto en bytes.
Casos de prueba ( estos se realizaron manualmente; notifíqueme cualquier error ):
In Out
----------------------------------------------------------------------
n=1, m=12 6 3 9 9 7 6 6
n=1, m=1 4 5 7 10 2.5 3.333 5.333 7.333 8.5
n=1, m=1 3 3 7 4 2 4 2 2 2.333 4.333 4.666 4.333 3.333 2.666 3
n=2, m=1 3 5 9 10 14 15 16 23 3 4.5 5.6 8.2 10.6 12.8 15.6 17 18
n=3, m=1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
n=3, m=1 2 3 4 5 6 7 8 2.5 3 3.5 4 5 5.5 6 6.5
fuente
avg(0,1,2)
no es lo mismo queavg(1,2)
. Para los "casos límite" (ha), no debe promediar tantos elementos de la lista de entrada.m_i
son positivos.Respuestas:
Pyth, 20 bytes
Banco de pruebas
Bastante sencillo, solo corta la sección apropiada de la lista, luego promedia.
fuente
E
fuera del mapa porque seguirá intentando leer un nuevo valor si está dentro. Esto hace que tome la misma cantidad de bytes.MATL ,
30282624 bytesProbado en Matlab y en Octave. Utiliza la versión actual (9.1.0) del idioma / compilador.
La entrada es: primero el número que controla la longitud de la ventana, luego la matriz con formato
[1 4 5 7 10]
.EDITAR (20 de mayo de 2016): ¡ Pruébelo en línea! El código en el enlace ha sido
X+
reemplazado porY+
para cumplir con la versión 18.0.0 del lenguaje.Ejemplo
Explicación
El código equivalente de Matlab sería
El código MATL hace uso de las características recientemente agregadas de entrada implícita y portapapeles de entrada de función automática:
fuente
CJam,
3130 bytesEl formato de entrada es
n [m1 m2 ... mx]
.Ejecute todos los casos de prueba. (Convierte automáticamente el conjunto de pruebas al formato de entrada requerido).
Esto funciona mediante
n
espacios previos y anexos , luego toma todas las subcadenas de longitud2n+1
y elimina los espacios nuevamente antes de calcular sus medios.fuente
Julia, 57 bytes
Esta es una función que acepta dos enteros y devuelve una matriz de flotantes.
El enfoque aquí es muy sencillo. Construimos una nueva matriz tomando la media de las secciones de la matriz de entrada, truncando en la parte delantera y trasera.
fuente
Haskell,
9795 bytesEjemplo de uso:
2 # [1,3,5,9,10,14,15,16,23]
->[3.0,4.5,5.6,8.2,10.6,12.8,15.6,17.0,18.0]
.Cómo funciona:
fuente
Pyth, 22 bytes
Explicación:
Pruébalo aquí .
fuente
JavaScript (ES6), 104
Ejecución total / tamaño de muestra en ejecución. En Javascript, leer un valor fuera de los límites de una matriz da indefinido, que se puede convertir a 0 usando ~~
Sin golf
Prueba
fuente
JavaScript (ES6), 82 bytes
código:
prueba:
fuente