Aufgabe
Geben Sie (mit allen Mitteln) einen sortierten Gleitkomma-Datensatz an und geben Sie (mit allen Mitteln und innerhalb von 1 ‰ des korrekten Werts) den Interquartil-Mittelwert zurück .
Ein möglicher Algorithmus
- Verwerfen Sie das niedrigste und das höchste Viertel der Datenpunkte.
- Berechnen Sie den Durchschnitt (Summe geteilt durch Anzahl) der verbleibenden Datenpunkte.
Hinweis: Wenn die Datenmenge nicht gleichmäßig in vier Teile aufgeteilt werden kann, müssen Sie die Datenpunkte wiegen , die von den Teilmengen gemeinsam genutzt werden. Siehe Beispielbewertung 2 unten.
Beispielauswertung 1
Gegeben {1, 3, 4, 5, 6, 6, 7, 7, 8, 8, 9, 38}
- Die Datenanzahl beträgt 12, daher entfernen wir die niedrigsten und höchsten 3 Datenpunkte:
{1, 3, 4,5, 6, 6, 7, 7, 8,8, 9, 38} - Durchschnitt der verbleibenden 6 Datenpunkte:
(5 + 6 + 6 + 7 + 7 + 8) / 6 = 6,5
Beispielauswertung 2
Gegeben {1, 3, 5, 7, 9, 11, 13, 15, 17}
- Die Anzahl ist 9, daher hat jedes Quartal 2¼ Datenpunkte:
{1, 2, (0,25 × 5),(0,75 × 5), 7, 9, 11, (0,75 × 13),(0,25 × 13), 15, 17}. - Durchschnitt der verbleibenden 4,5 Datenpunkte:
(0,75 × 5 + 7 + 9 + 11 + 0,75 × 13) / 4,5 = 9
Pyth ,
1110 BytesTestsuite.
Wie es funktioniert
Die Eingabeliste wird vervierfacht, um sicherzustellen, dass die Anzahl der Daten durch 4 teilbar ist.
Es muss noch sortiert werden, da dies nicht
*4
für jedes einzelne Element, sondern für die gesamte Liste gilt.Dann wird die Liste in vier gleiche Teile geteilt und der erste und der letzte Teil entfernt.
Die verbleibende Liste wird abgeflacht und der Durchschnitt gebildet.
quelle
MATL ,
1211 BytesDie Eingabe ist ein horizontaler Vektor mit dem Format
oder
Probieren Sie es online!
Erläuterung
quelle
6L)
das erste und das letzte Element entfernt? Wenn ich es tue, werden eine Reihe komplexer Zahlen verschoben.[2, -1+i]
wenn als Index verwendet bedeutet2:end-1
Schneemann , 66 Bytes
Probieren Sie es online!
Verwendet den gleichen Algorithmus wie die Antworten von @LeakyNun .
quelle
Python 3, 50 Bytes
Ideone es!
Wie es funktioniert
Es ist eine Übersetzung meiner Antwort in Pyth .
quelle
Jelly ,
141312 BytesProbieren Sie es online!
Testsuite.
Wie es funktioniert
Es ist eine Übersetzung meiner Antwort in Pyth .
quelle
Pyke,
1613 BytesProbieren Sie es hier aus!
quelle
Brachylog , 21 Bytes
Probieren Sie es online! oder überprüfen Sie mehrere Testfälle
Erläuterung
Dies ist im Grunde @ LeakyNuns Pyth-Antwortalgorithmus.
Der einzige kleine Trick besteht darin, mit der Umkehrung der Länge zu multiplizieren, anstatt durch die Länge zu dividieren, da die Division zwischen zwei Ganzzahlen eine Ganzzahldivision ist.
quelle
Oktave , 44 Bytes
Dies definiert eine anonyme Funktion.
Die Eingabe ist ein horizontaler Vektor.
Probiere es auf ideone aus .
Erläuterung
Der eingegebene horizontale Vektor wird zuerst
*
mit einem Spaltenvektor von vier Einsen (gebaut mit~~(1:4)'
) matrixmultipliziert ( ). Das Ergebnis ist eine vierspaltige Matrix, bei der jede Zeile eine Kopie des Eingabevektors ist. Diese wird dann unter Beibehaltung der linearen Reihenfolge der Elemente in eine 4-Spalten-Matrix (reshape(...,[],4)
) umgeformt . Die beiden mittleren Spalten werden beibehalten ((:,2:3)
) und in eine einzige Spalte linearisiert ((:)
), aus der der Mittelwert berechnet wird (mean(...)
).quelle
[x;x;x;x]
anstelle von speichern~~(1:4)'*x
@(x)mean([x;x;x;x](:)((b=numel(x))+1:3*b))
ist auch 2 Bytes weniger. Das war der Grund, warum ich es mir ausgedacht hatte, aber es ist im Grunde das gleiche wie bei Ihnen.J ,
20 bis18 Bytes2 Bytes dank @miles
Probieren Sie es online! ( Online-Dolmetscher )
Verwendung
Wie es funktioniert
Es ist eine Übersetzung meiner Antwort in Pyth .
quelle
-@#(+/%#)@}.#}.4#]
für 18 Bytes berechnen .Eigentlich ,
201513 BytesProbieren Sie es online!
Wie es funktioniert
Es ist eine Übersetzung meiner Antwort in Pyth .
quelle
Oktave, 42 Bytes
Eine weitere anonyme Funktion für Octave.
Sie können es online ausprobieren . Geben Sie einfach diesen Befehl ein und machen Sie es dann
ans([1 2 4 5 6 9])
oder welche Zahlen auch immer erforderlich sind.Dies beginnt damit, dass aus dem Eingabearray eines mit 4 von jedem Eingabeelement erstellt wird, indem zuerst vier Kopien vertikal verkettet und dann vertikal abgeflacht werden. Dadurch bleibt die Sortierreihenfolge erhalten.
Dann wird der Bereich der Elemente aus der Länge des Eingabearrays plus 1 bis zum Dreifachen der Länge des Eingabearrays extrahiert. Da das neue Array viermal länger ist, werden das obere und das untere Quartil abgeschnitten.
Schließlich wird der Mittelwert des neuen Arrays zurückgegeben.
quelle
05AB1E, 15 Bytes
Erläuterung
Probieren Sie es online aus
quelle
APL (Dyalog) , 15 Bytes
Probieren Sie es online!
4∘/
jedes Element vervierfachen-∘≢↓
Löschen Sie so viele nachfolgende Elemente, wie Elemente in den Argumenten enthalten sind≢↓
Löschen Sie so viele führende Elemente, wie Elemente im Argument enthalten sind(
…)
Wenden folgende stillschweigende Funktion an:+/
die Summe÷
geteilt durch≢
die Bilanzquelle
JavaScript (ES6), 75 Byte
Verwendet den offensichtlichen Vierfach-Sortier-Ansatz, und ich kann ihn verwenden
reduce
, was nett ist. Der einzige Trick dabei ist, 4 Bytes einzusparen, indem der Sortierkomparator erneut verwendet wird, um alle Array-Elemente von Null zu subtrahieren. Dadurch erhalte ich-2l
mal die gewünschte Antwort.quelle
Golfscript,
2829 BytesProbieren Sie es online!
quelle
Eigentlich 12 Bytes
Probieren Sie es online!(Funktioniert derzeit nicht, da TIO einige Versionen hinter sich hat)
Erläuterung:
quelle
Mathematica, 51 Bytes
Sortiert vier Exemplare der Liste (um Probleme mit der Listenlänge zu vermeiden, nicht ein Vielfaches von vier), nimmt
"1 quarter the length of resulting list plus 1"
an den teil"1/4 length list + 1 from the end"
, nimmt ihreMean
.quelle
Java
146126 BytesSolcher Java viel wortreich!
Älterer Ungolfed teilweise lesbar mit Testfällen
quelle
Clojure,
8281 BytesEdit: 1 Byte weniger durch Umschreiben des Teils "didvide by 2 n".
Bisherige:
Verwendet
for
, um 4 wiederholte Werte zu generieren, wobei float2.0
keine gebrochenen Ergebnisse liefert, der Rest ist nur Standard.quelle
R
1711 BytesEs
n
wird angenommen, dass der Eingabevektor in der Standard-R-Form vorliegtn=c(1, 2, 3, ...)
.Dies ist keineswegs überraschend, da R als "DIE Sprache für statistische Berechnungen" angesehen werden kann und viele statistische Funktionen enthält.
AKTUALISIEREN. 6 Bytes gespart dank rturnbull weil
trim
standardmäßig das erste optionale Argument ist!Testfälle:
quelle
trim
das zweite Standardargument ist, müssen Sie es nicht benennen.0.25
kann auf.25
oder gekürzt werden1/4
. Das spart Ihnen sechs Bytes.Excel, 17 Bytes
Entspanntes Eingabeformat machen dies einfach. Geben Sie eine pro Zeile in Spalte A ein.
quelle