Wir definieren den Hyper-Durchschnitt eines Arrays / einer Liste (von Zahlen) als arithmetisches Mittel der Summen seiner Präfixe.
Beispielsweise wird der Hyper-Durchschnitt der Liste [1, 4, -3, 10]
auf folgende Weise berechnet:
Wir bekommen die Präfixe:
[1], [1, 4], [1, 4, -3], [1, 4, -3, 10]
.Summieren jeder:
[1, 5, 2, 12]
.Und nun das arithmetische Mittel der Elemente in dieser Liste erhalten:
(1 + 5 + 2 + 12) / 4 = 5
.
Ein Pseudoelement eines Arrays ist ein Element, dessen Wert streng niedriger als sein Hypermittelwert ist. Daher sind die Pseudo-Elemente unserer Beispielliste 1
, 4
und -3
.
Bei einer gegebenen Liste von Gleitkommazahlen besteht Ihre Aufgabe darin, die Liste der Pseudoelemente zurückzugeben.
Sie müssen sich keine Gedanken über Gleitkommaungenauigkeiten machen.
Die Eingabeliste ist niemals leer und kann sowohl Ganzzahlen als auch Gleitkommazahlen enthalten. Falls angegeben, können ganze Zahlen als floats (mit
<integer>.0
) genommen werdenSie können davon ausgehen, dass die Zahlen zu Ihrer Sprache passen, aber bitte missbrauchen Sie diese in keiner Weise.
Optional können Sie auch die Länge des Arrays als Eingabe verwenden.
Dies ist Codegolf , daher gelten die Standardregeln für das Tag. Der kürzeste Code in Bytes ( in jeder Sprache ) gewinnt!
Testfälle
Eingabe -> Ausgabe [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]
quelle
Antworten:
MATL , 8 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
quelle
05AB1E ,
98 Bytes-1 Bytes dank Magic Octopus Urn
Probieren Sie es online!
05AB1E , 6 Bytes
Den neuen
ÅA
Befehl verwenden.Probieren Sie es online!
quelle
ηOO¹g/›Ï
für 8; auch es fängt an mitnOO!
.Japt v2.0a0,
121110 BytesProbier es aus
Erläuterung
Implizite Eingabe eines Arrays
U
.Filtern (
f
) Sie das Array, indem Sie prüfen, ob jedes Element kleiner ist als ...U
kumulativ reduziert (å
) durch Summieren ...Mit dem resultierenden Array wiederum reduziert durch Summieren ...
Und geteilt durch die Länge (
l
) vonU
.Das resultierende Array implizit ausgeben.
quelle
Python 3 mit Numpy , 48 Bytes
Eingabe und Ausgabe sind Numpy-Arrays. Probieren Sie es online!
quelle
cumsum
!Gelee , 9 Bytes
Probieren Sie es online!
quelle
<Ðf@
sollte es stattdessen sein<Ðḟ@
?+\S÷L
Berechnet zuerst den Hyper-Durchschnitt,<Ðf@
setzt ihn dann als das richtige Argument und<
gibt zurück,1
wenn ein Element ein Pseudo-Element ist, und filtert im Wesentlichen nach den Pseudo-Elementen, anstatt zu filtern die raus.Python 2 ,
78767166 Bytes-7 Bytes dank Mr. Xcoder.
Probieren Sie es online!
quelle
range(len(l))
undl[:i+1]
für -2 Bytes (nicht getestet)x>sum(...)
zux<sum(...)
für sie gültig ist, noch 76 Bytes<s>68</s>
66-Byte-Lösung gewählt hat: PHaskell, 39 Bytes
Probieren Sie es online!
Leider ist
length
vom TypInt
, so dass ich es nicht mit Gleitkomma - Division verwenden kann ,/
und ich habe eine Abhilfe verwenden:sum(1<$l)
.quelle
Schale ,
109 BytesVielen Dank an @Zgarb für das Golfen ab 1 Byte!
Probieren Sie es online!
Ungolfed / Erklärung
quelle
f</L⁰Σ∫⁰⁰
ist 9 Bytes, aber drei Lambda-Argumente fühlen sich klobig an.JavaScript (ES6),
565552 ByteProbier es aus
quelle
Java 8, 81 Bytes
Dieser Lambda-Ausdruck akzeptiert a
List<Float>
und mutiert es. Der Iterator der Eingabeliste muss das Entfernen unterstützen (ArrayList
z. B. 's). Zuweisen zuConsumer<List<Float>>
.Ungolfed Lambda
Probieren Sie es online
Danksagung
quelle
t/=l;
und ändernif(n<t)
zuif(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 Byte) zu drucken .C # (Mono) , 95 Bytes
Probieren Sie es online!
quelle
Python 3 , 72 Bytes
Probieren Sie es online!
quelle
filter
dass ich das übliche Listenverständnis für mich gewinnen würde.Python 3 , 76 Bytes
Eingabe und Ausgabe sind Listen von Zahlen. Probieren Sie es online!
Dies funktioniert auch in Python 2 (mit dem offensichtlichen Ersatz für die
print
Syntax in der Fußzeile).quelle
Perl 6 , 31 Bytes
Probieren Sie es online!
quelle
Pyth - 10 Bytes
Probieren Sie es hier online aus .
quelle
Pyth,
1211 Bytes-1 Byte danke an Herrn Xcoder
Probieren Sie es online!
quelle
f<T.OsM._QQ
Perl 5 , 51 + 1 (-a) = 52 Bytes
Probieren Sie es online!
quelle
PHP, 84 Bytes
Nimmt Eingaben von Befehlszeilenargumenten entgegen. Laufen Sie mit
-nr
oder versuchen Sie es online .Das Aufsummieren der Teillisten ist dasselbe wie das Aufsummieren jedes Elements multipliziert mit der Anzahl der folgenden Elemente +1 → Keine Notwendigkeit, mit sperrigen Array-Funktionen zu jonglieren. Es ist aber immer noch lang.
quelle
Röda ,
464139 BytesProbieren Sie es online!
quelle
J, 15 Bytes
Probieren Sie es online! Erwartet ein Array im J-Stil (Negative werden mit dargestellt
_
-
werden durch Leerzeichen anstelle von Elementen dargestellt - Beispiele finden Sie unter dem TIO-Link).Ich weiß nicht, ob es eine Möglichkeit gibt, die Klammern um den Mittelwert zu entfernen (
+/%#
) zu entfernen, aber dies und die Kappe zu entfernen, wäre das erste, was ich versuchen würde, um so weiter Golf zu spielen.Erläuterung
Manchmal liest J wie (verschleiertes) Englisch.
quelle
#~]<1#.+/\%#
R , 31 Bytes
Probieren Sie es online!
quelle
Mathematica, 35 Bytes
Function
Dies erwartet eine Liste von Zahlen als erstes Argument#
und die Länge der Liste als zweites Argument#2
.#.Range[#2,1,-1]/#2
Nimmt das Skalarprodukt der Eingabeliste#
und der ListeRange[#2,1,-1] == {#2,#2-1,...,1}
und dividiert dann durch die Länge#2
. Dann geben wir dasCases
x_
in der Eingabeliste zurück#
die kleiner als der Hyper-Durchschnitt sind.Ohne die Länge als zweites Argument benötigen wir
6
mehr Bytes:quelle
K (oK) , 26 Bytes
Lösung:
Probieren Sie es online!
Beispiele:
Erläuterung:
Von rechts nach links interpretiert. Kämpfte mit einem kurzen Weg, um Präfixe zu extrahieren:
Anmerkungen:
Alternative Version, die die Länge der Eingabe als Parameter verwendet ( 25- Byte-Lösung):
quelle
TI-Basic, 9 Bytes
quelle