Definimos a hiper-média de uma matriz / lista (de números) a média aritmética das somas de seus prefixos.
Por exemplo, a hiper-média da lista [1, 4, -3, 10]
é calculada da seguinte maneira:
Ficamos com os prefixos:
[1], [1, 4], [1, 4, -3], [1, 4, -3, 10]
.Resumir cada um:
[1, 5, 2, 12]
.E agora obter a média aritmética dos elementos desta lista:
(1 + 5 + 2 + 12) / 4 = 5
.
Um pseudo-elemento de uma matriz é um elemento cujo valor é estritamente menor que sua hiper-média. Portanto, os pseudoelementos da nossa lista de exemplos são 1
, 4
e -3
.
Dada uma lista de números de ponto flutuante, sua tarefa é retornar a lista de pseudoelementos.
Você não precisa se preocupar com imprecisões de ponto flutuante.
A lista de entrada nunca estará vazia e pode conter números inteiros e flutuantes. Se mencionado, números inteiros podem ser tomados como flutuadores (com
<integer>.0
)Você pode supor que os números se encaixam no seu idioma de escolha, mas não abuse disso de forma alguma.
Opcionalmente, você também pode usar o comprimento da matriz.
Isso é código-golfe , então as regras padrão para a tag se aplicam. O código mais curto em bytes ( em cada idioma ) vence!
Casos de teste
Entrada -> Saída [10,3] -> [] [5.4, 5.9] -> [5.4, 5.9] [1, 4, -3, 10] -> [1, 4, -3] [-300, -20,9, 1000] -> [-300, -20,9] [3.3, 3.3, 3.3, 3.3] -> [3.3, 3.3, 3.3, 3.3] [-289,93, 912,3, -819,39, 1000] -> [-289,93, -819,39]
fonte
Respostas:
MATL , 8 bytes
Experimente online! Ou verifique todos os casos de teste .
Explicação
fonte
05AB1E ,
98 bytes-1 bytes graças a Magic Octopus Urn
Experimente online!
05AB1E , 6 bytes
Usando o novo
ÅA
comando.Experimente online!
fonte
ηOO¹g/›Ï
para 8; também começa comnOO!
.Japt v2.0a0,
121110 bytesTeste-o
Explicação
Entrada implícita da matriz
U
.Filtre (
f
) a matriz verificando se cada elemento é menor que ...U
cumulativamente reduzido (å
) somando ...Com a matriz resultante, por sua vez, reduzida pela soma ...
E dividido pelo comprimento (
l
) deU
.Saída implícita da matriz resultante.
fonte
Python 3 com Numpy , 48 bytes
Entrada e saída são matrizes Numpy. Experimente online!
fonte
cumsum
!Geléia , 9 bytes
Experimente online!
fonte
<Ðf@
devesse ser<Ðḟ@
?+\S÷L
calcula a hiper-média, depois a<Ðf@
coloca como argumento correto e<
retornará1
se um elemento for um pseudo-elemento, essencialmente filtrando os pseudo-elementos em vez de filtrar eles fora.Python 2 ,
78767166 bytes-7 bytes graças ao Sr. Xcoder.
Experimente online!
fonte
range(len(l))
el[:i+1]
para -2 bytes (não testado)x>sum(...)
ax<sum(...)
para que ela seja válida, ainda 76 bytes<s>68</s>
solução 66 byte: PHaskell, 39 bytes
Experimente online!
Infelizmente
length
é do tipoInt
, então eu não posso usá-lo com flutuante divisão ponto/
e eu tenho que usar uma solução alternativa:sum(1<$l)
.fonte
Casca ,
109 bytesObrigado @Zgarb por jogar fora 1 byte!
Experimente online!
Ungolfed / Explicação
fonte
f</L⁰Σ∫⁰⁰
tem 9 bytes, mas três argumentos lambda parecem desajeitados.JavaScript (ES6),
565552 bytesTeste-o
fonte
Java 8, 81 bytes
Essa expressão lambda aceita
List<Float>
ae modifica-a. O iterador da lista de entrada deve suportar a remoção (ArrayList
por exemplo). Atribuir aConsumer<List<Float>>
.Lambda ungolfed
Experimente Online
Agradecimentos
fonte
t/=l;
e alterandoif(n<t)
paraif(n<t/l)
.a->{float l=0,t=0,u;for(float n:a)t+=n*(a.size()-l++);u=t/l;a.removeIf(n->n>=u);}
(81 bytes).C# (Mono), 95 bytes
Try it online!
fonte
Python 3, 72 bytes
Try it online!
fonte
filter
would win over the usual list comprehension.Python 3, 76 bytes
Input and output are lists of numbers. Try it online!
This works in Python 2 too (with the obvious replacement for
print
syntax in the footer).fonte
Perl 6, 31 bytes
Try it online!
fonte
Pyth - 10 bytes
Try it online here.
fonte
Pyth,
1211 bytes-1 byte thanks to Mr. Xcoder
Try it online!
fonte
f<T.OsM._QQ
Perl 5, 51 + 1 (-a) = 52 bytes
Try it online!
fonte
PHP, 84 bytes
takes input from command line arguments. Run with
-nr
or try it online.summing up the partial lists is the same as summing up each element multiplied with the number of following elements +1 → no need to juggle with bulky array functions. It´s still long, though.
fonte
Röda,
464139 bytesTry it online!
fonte
J, 15 bytes
Try it online! Expects a J-style array (negatives represented using
_
instead of-
and elements separated by spaces -- see the TIO link for examples).I don't know if there's a way to remove the parentheses around the mean (
+/%#
) but removing that and the cap would be the first thing I'd try to do to golf this further.Explanation
Sometimes J reads like (obfuscated) English.
fonte
#~]<1#.+/\%#
R, 31 bytes
Try it online!
fonte
Mathematica, 35 bytes
Function
which expects a list of numbers as the first argument#
and the length of the list as the second argument#2
.#.Range[#2,1,-1]/#2
takes the dot product of the input list#
and the the listRange[#2,1,-1] == {#2,#2-1,...,1}
, then divides by the length#2
. Then we return theCases
x_
in the input list#
which are less than the hyper-average.Without the length as a second argument, we need
6
more bytes:fonte
K (oK), 26 bytes
Solution:
Try it online!
Examples:
Explanation:
Interpretted right-to-left. Struggled with a short way to extract prefixes:
Notes:
Alternative version taking length of input as parameter (25 byte solution):
fonte
TI-Basic, 9 bytes
fonte