Nota: Este é o número 3 em uma série de desafios de manipulação de array . Para o desafio anterior, clique aqui .
Média Móvel de uma Lista
A média móvel de uma lista é um cálculo que resulta em uma nova lista suavizada, criada pela média de pequenas sublistas sobrepostas do original.
Ao criar uma média móvel, primeiro geramos a lista de sublistas sobrepostas usando um certo 'tamanho da janela', deslocando essa janela para a direita uma vez a cada vez.
Por exemplo, dada a lista [8, 4, 6, 2, 2, 4]
e o tamanho da janela 3
, as sublistas seriam:
[8, 4, 6, 2, 2, 4] Sublists:
( ) <- [8, 4, 6]
( ) <- [4, 6, 2]
( ) <- [6, 2, 2]
( ) <- [2, 2, 4]
Em seguida, calculamos a média média de cada sub-lista para obter o resultado: [6.0, 4.0, 3.3, 2.7]
(cada valor arredondado para uma casa decimal).
O desafio
Sua tarefa é escrever um programa ou função que, dada uma lista L e um número inteiro 1 ≤ n ≤ length (L) , calcule a média móvel de L usando o tamanho da janela n .
Regras:
- Seu programa pode usar divisão inteira ou divisão flutuante. No caso da divisão de flutuação, pequenas imprecisões devido às limitações do tipo de dados são permitidas, desde que o valor esteja correto.
- Você pode enviar um programa completo ou uma função (mas não um trecho).
- Você pode assumir que a lista conterá apenas números inteiros positivos .
- As brechas padrão são proibidas.
- Isso é código-golfe , então a resposta mais curta (em bytes) vence!
Casos de teste
Observe que, para facilitar a legibilidade, todos os valores são arredondados para uma casa decimal.
n=5, [1, 2, 3, 4, 5, 6, 7, 8] -> [3, 4, 5, 6]
n=3, [100, 502, 350, 223, 195] -> [317.3, 358.3, 256]
n=1, [10, 10, 10] -> [10, 10, 10]
n=3, [10, 20, 30] -> [20]
n=2, [90, 40, 45, 100, 101] -> [65, 42.5, 72.5, 100.5]
fonte
Respostas:
Gelatina , 3 bytes
Experimente online!
Muito simples, graças a
ṡ
Como funciona
fonte
Wolfram Language (Mathematica) , 13 bytes
O Mathematica possui um built-in para tudo
Experimente online!
Leva uma lista e depois um raio ...
fonte
MovingAverage
ಠ _____ ಠ Recuso-me a acreditar nistoMovingAverage
retorna um conjunto de frações. Agora que foi permitido pelo OP,MovingAverage
deve bastar.Haskell , 47 bytes
Experimente online!
Economizou dois bytes graças ao xnor!
fonte
tail a
pode ser extraído na guarda.Dyalog APL, 4 bytes
1 byte salvo graças a @Graham
2 bytes salvos graças a @ jimmy23013
Eu mencionei que o APL não é uma linguagem de golfe?
com
n
à direita, oucom
L
à direita.Experimente online!
Quão?
÷
- dividirL
porn
⊢+/
- reduzir+
nas janelas den
fonte
Python , 48 bytes
Experimente online!
Uma função recursiva. Mais curto que o programa (50 bytes)
Experimente online!
Isso economiza 2 bytes, encerrando com erro na
while
condição.fonte
Alistar , 3 bytes
Experimente online!
fonte
Perl 6 , 33 bytes
Teste-o
Expandido:
fonte
C,
868483 bytesExperimente online!
Desenrolado:
fonte
J,
75 bytesExperimente online!
Toma
n
como argumento certo e a lista como esquerda. Agradecemos a solução de Uriel pela idéia de fazer apenas a soma no infix.Explicação
Solução anterior (7 bytes)
fonte
Ohm v2 , 3 bytes
Experimente online!
Explicação:
fonte
Pitão , 5 bytes
Experimente aqui!
Como isso funciona
fonte
Oitava ,
3331 bytesExperimente online!
Explicação
Convolução (
conv
) é essencialmente uma soma ponderada móvel. Se os pesos são escolhidos como[1/n, ..., 1/n]
(obtidos como~~(1:n)/n
), o resultado é uma média móvel, da qual apenas a'valid'
parte é mantida.fonte
R , 72 bytes
Experimente online!
Calcula
mean
todas asn
janelas de tamanho ; quando a janela ultrapassa a bordal
, os resultados sãoNA
filtrados.Pacote zoológico R +, 13 bytes
O
zoo
pacote (infraestrutura S3 para séries temporais regulares e irregulares) tem muitas funções úteis. Você pode tentar aqui (violino R) .fonte
Japt v2.0a0, 7 bytes
Tente
Explicação
Entrada implícita de matriz
U
e número inteiroV
.Obter subseções de
U
com comprimentoV
Mapa sobre as subseções.
Divida cada elemento por
V
.Soma todos os elementos.
fonte
Python 3 , 61 bytes
Experimente online!
fonte
Python 3 , 55 bytes
Experimente online!
fonte
05AB1E , 5 bytes
Explicação:
Experimente online!
fonte
Mathematica, 21 bytes
Experimente online!
-3 bytes JungHwan Min
fonte
N[Mean/@##~Partition~1]&
Próton , 46 bytes
Experimente online!
Observe que isso recebe a entrada através da sintaxe das funções de curry e retorna uma lista de frações.
fonte
CJam,
1412 bytes-2 bytes graças a @aditsu
fonte
Jq 1.5 , 61 bytes
Expandido
Experimente online!
fonte
JavaScript (ES6), 53 bytes
fonte
PHP, 94 bytes
Experimente online!
fonte
Clojure , 48 bytes
Experimente online!
fonte
Empilhados , 22 bytes
Experimente online!
Explicação
infixes
gera todas as janelas do comprimento especificado. Em seguida, mapeamos nossa própria função média sobre cada infixo.fonte
Lisp comum , 77 bytes
Experimente online!
fonte
K (oK) ,
1311 bytesSolução:
Experimente online!
Exemplos:
Explicação:
oK
possui um built-in para criar uma janela deslizante e, em seguida, some as matrizes resultantes e divida pelo tamanho da janela deslizante para obter uma média:fonte
x%[commute]
para a esquerda e solte os parêntesesDataWeave , 50 bytes
fonte
Funky ,
6766 bytesSalva um byte com sintaxe de curry.
Experimente online!
fonte
Java 8, 111 bytes
Explicação:
Experimente aqui.
fonte