Dada a entrada de um número inteiro n e uma lista de números inteiros positivos m 1 , m 2 , ..., imprima uma lista de números inteiros m 1 ' , m 2 ' , ... onde m x ' é definido como a média de m xn a m x + n .
Ao calcular essas médias, ignore os índices que estão fora dos limites (e ajuste o que você está dividindo a soma de acordo). n sempre será ≥ 1, mas nunca a metade do comprimento de m (arredondado para baixo) ou mais. Isso significa que o comprimento mínimo de m é 4. Os elementos em m serão números inteiros positivos, mas a saída deve ser precisa com pelo menos três casas decimais.
Os elementos de entrada / saída que são listas podem ser cadeias separadas por espaço em branco / vírgula ou matrizes / listas / etc. Para entrada, se sua solução for uma função, você poderá adicionalmente usar um primeiro argumento de n e argumentos adicionais como m x (isso também se aplica a argumentos de linha de comando).
Aqui está uma representação 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 esse é o código-golfe , o código mais curto em bytes vence.
Casos de teste ( estes foram feitos manualmente; notifique-me de quaisquer erros ):
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
fonte
avg(0,1,2)
não é o mesmo queavg(1,2)
. Para os "casos extremos" (ha), você não deve calcular a média de tantos elementos da lista de entrada.m_i
são positivos.Respostas:
Pitão, 20 bytes
Suíte de teste
Bem simples, basta cortar a seção apropriada da lista e depois a média.
fonte
E
fora do mapa, porque ele continuará tentando ler um novo valor se estiver dentro. Isso leva o mesmo número de bytes.MATL ,
30282624 bytesTestado no Matlab e no Octave. Usa a versão atual (9.1.0) do idioma / compilador.
A entrada é: primeiro o número que controla o comprimento da janela, depois a matriz com o formato
[1 4 5 7 10]
.EDIT (20 de maio de 2016): Experimente online! O código no link foi
X+
substituído porY+
para estar em conformidade com a versão 18.0.0 do idioma.Exemplo
Explicação
O código Matlab equivalente seria
O código MATL utiliza os recursos recentemente adicionados da entrada implícita e da área de transferência automática de entrada de função:
fonte
CJam,
3130 bytesO formato de entrada é
n [m1 m2 ... mx]
.Execute todos os casos de teste. (Converte automaticamente o conjunto de testes no formato de entrada necessário.)
Isso funciona pré e anexando
n
espaços, pegando todas as substrings de comprimento2n+1
e removendo os espaços novamente antes de calcular seus meios.fonte
Julia, 57 bytes
Esta é uma função que aceita dois números inteiros e retorna uma matriz de flutuadores.
A abordagem aqui é muito direta. Construímos uma nova matriz tomando a média das seções da matriz de entrada, truncando na frente e atrás.
fonte
Haskell,
9795 bytesExemplo 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]
.Como funciona:
fonte
Pitão, 22 bytes
Explicação:
Experimente aqui .
fonte
JavaScript (ES6), 104
Tamanho total / em execução da amostra em execução. Em Javascript, a leitura de um valor fora dos limites de uma matriz fornece indefinidos, que podem ser convertidos para 0 usando ~~
Ungolfed
Teste
fonte
JavaScript (ES6), 82 bytes
código:
teste:
fonte