Digamos que essa matriz seja a quantidade de flexões que realizei todos os dias nos últimos 28 dias:
[
20,20,20,30,30,30,30,
35,35,40,40,40,45,45,
50,50,50,50,50,50,50,
60,70,80,90,100,110,120
]
Como você pode ver, houve uma forte tendência de alta na última semana, e essa é a parte desses dados que mais me interessa. Quanto mais no passado, menos eu quero que esses dados apareçam na minha média 'número de flexões.
Para esse fim, quero elaborar uma "média" em que cada semana valha mais que a semana anterior.
Informações de plano de fundo, não fazem parte deste problema.
Média normal:
A soma de todos os valores / o número de valores
Para acima:
1440/28 = 51.42857142857143
Média ponderada:
Divida a matriz em 4 grupos de 7 e inicie uma nova matriz.
- Adicione o primeiro grupo à matriz.
- Adicione o segundo grupo à matriz duas vezes.
- Adicione o terceiro grupo à matriz três vezes.
- Adicione o quarto grupo à matriz quatro vezes.
Soma toda a nova matriz e divida pela duração da nova matriz.
Para acima:
Converta a matriz para isso:
[
20,20,20,30,30,30,30, # first week once
35,35,40,40,40,45,45,
35,35,40,40,40,45,45, # second week twice
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50, # third week thrice
60,70,80,90,100,110,120,
60,70,80,90,100,110,120,
60,70,80,90,100,110,120,
60,70,80,90,100,110,120 # Fourth week four times
]
Em seguida, execute uma média normal nessa matriz.
4310/70 = 61.57142857142857
Observe que é maior que o valor médio normal devido à tendência de alta na última semana.
As regras:
- A entrada é uma matriz plana de 28 números inteiros não negativos.
- Qualquer idioma em que você gostaria de escrever.
- Saída de um número.
- Eu sempre gosto de ver o TIO links .
- Tente resolver o problema no menor número de bytes.
- O resultado deve ser um decimal preciso com pelo menos 4 casas decimais (truncado ou arredondado dos valores dos casos de teste é bom) ou uma fração exata.
Casos de teste:
Caso 1: tendência ascendente
[
20,20,20,30,30,30,30,
35,35,40,40,40,45,45,
50,50,50,50,50,50,50,
60,70,80,90,100,110,120
]
Média normal: 51.42857142857143 Média ponderada: 61.57142857142857
Caso 2: deixando a pausa para trás
(Eu tive uma semana ruim, mas foi há um tempo)
[
50,50,50,50,50,50,50,
10,10,10,10,10,10,10,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50
]
Média normal: 40 Média ponderada: 42
Caso 3: Desistir
Eu tive uma semana ruim, está diminuindo minha média rapidamente.
[
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
50,50,50,50,50,50,50,
10,10,10,10,10,10,10
]
Média normal: 40 Média ponderada: 34
Caso 4: Média da média
Ok, então estou apenas brincando por aqui, pensei que poderia ser o mesmo valor para as médias normais e ponderadas, mas, é claro, não era.
[
60,60,60,60,60,60,60,
30,30,30,30,30,30,30,
20,20,20,20,20,20,20,
15,15,15,15,15,15,15
]
Média normal: 31,25 Média ponderada: 24,0
Problema de bônus:
Que combinação de 28 valores teria a mesma média normal e média ponderada?
Feliz golfe!
fonte
new_avg = α*weekly_sum + (1-α)*old_avg
para algunsα∈(0,1)
0
flexões todos os dias, então minha média ponderada é igual à minha média normal.Respostas:
Casca , 6 bytes
Experimente online!
Usa o truque que Dennis usou para superar minha finalização em Jelly. Em vez de repetir cada pedaço N vezes, ele recupera os sufixos da lista de pedaços, que após o achatamento produzirão o mesmo resultado, exceto a ordem.
fonte
Python 3 , 38 bytes
Experimente online!
fonte
05AB1E ,
87 bytesEconomizou 1 byte graças ao Sr. Xcoder
Experimente online!
Explicação
fonte
Geléia , 7 bytes
Experimente online!
Como funciona
fonte
x"J$
é equivalente aṫJ
neste contexto. Interessante!R + pryr,
3228 bytese a mesma pontuação média semana após semana resultaria em igualdade dos meios.
Experimente online!
Economizou 4 bytes usando o produto escalar graças a Giuseppe .
R puro teria mais dois bytes usando
function
fonte
sum
function(s)weighted.mean(s,rep(1:4,e=7))
weighted.mean
. Adoro quandoR
outgolfsPython
.MATL , 10 bytes
Experimente online!
Eu não postei uma resposta MATL em idades! Achei que eu poderia participar como parte de LOTM em maio de 2018 !
Explicação:
fonte
K:7Y"*s70/
10 bytes também.Geléia , 9 bytes
Experimente online!
Como funciona
fonte
Haskell , 35 bytes
Bônus: se
a,b,c,d
são as somas semanais, a média normal é a mesma que a média ponderada se:Uma solução é quando a primeira e a última semana têm as mesmas somas e a segunda e a terceira semana têm a mesma soma, mas existem infinitas soluções se o bíceps estiver à altura. Exemplo: [15,10,10,10,10,10,5,20,20,20,25,25,20,30,20,20,20,20,20,20,10,10,20,20 , 0,10,10,10]
Experimente online!
fonte
JavaScript (Node.js) , 49 bytes
Experimente online!
Solução não genérica
JavaScript (Node.js) ,
3936 bytesExperimente online!
fonte
a=>a.reduce((s,x,i)=>(I+=d=-~(i/7),s+x*d),I=0)/I
. E uma dica rápida: use<hr>
para criar uma linha horizontal em descontos---
(precisa de seu próprio parágrafo)?Stax , 6 bytes
Execute e depure-o em staxlang.xyz!
Descompactado (7 bytes) e explicação:
fonte
Stax ,
108 bytesExecute e depure
Explicação (sem embalagem):
fonte
$
para achatar se os elementos são todos números inteiros - verificando com OP agora.Oitava , 33 bytes
Experimente online!
fonte
Carvão , 14 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
K4 / K (oK) ,
191614 bytesSolução:
Experimente online!
Exemplo:
Explicação:
A avaliação é realizada da direita para a esquerda. Divida 7 1s, 7 2s, 7 3s e 7 4s por 70 dividido pela entrada; então resumir.
fonte
Excel: 33 bytes
(3 bytes salvos da resposta de @ wernisch executando dados em 2 linhas de A1: N1 e A2: N2)
Desculpas por não incluir isso como um comentário. Eu não tenho reputação suficiente para fazê-lo.
fonte
Japonês ,
1110 bytesTente
Explicação
fonte
Triangularidade , 49 bytes
Experimente online!
Explicação
fonte
Perl 5
-pa
, 28 bytesExperimente online!
A entrada é separada por espaço em vez de separada por vírgula.
fonte
$.
disponível como o multiplicador perfeito. Não há necessidade de$i
APL + WIN, 13 bytes
Solicita a matriz como um vetor de números inteiros:
Explicação:
fonte
Java 8, 57 bytes
Experimente online.
Explicação:
fonte
J , 16 bytes
Explicação:
Experimente online!
fonte
Clojure,
4846 bytesIsso acabou sendo mais curto que a combinação mapcat + subvec.
fonte
TI-Basic, 25 bytes
Solução alternativa, 39 bytes
fonte
Ruby , 65 bytes
Experimente online!
fonte
size
propriedade Experimente online!Excel,
3633 bytes-3 bytes graças a @tsh.
Entrada na primeira linha (
A1
paraAB1
).fonte
A1:AB1
->1:1
?Julia 0.6 , 27 bytes
Experimente online!
A
repeat
chamada forma uma matriz de coluna de 28 valores, contendo sete 1's, depois sete 2's, etc. Nós'
a transpomos e depois fazemos uma multiplicação de matrizes com a entrada (a mutiplicação está implícita aqui). Como é uma multiplicação de matrizes de uma matriz 1x28 com uma matriz 28x1, acabamos com um único valor, que é a soma ponderada de que precisamos. Divida isso70
para obter nossa média ponderada.fonte