(Ein Paradoxon, ein Paradoxon, ein genialstes Paradoxon)
Dies ist der erste Teil einer mehrteiligen Serie, die von verschiedenen R-Funktionen inspiriert ist.
Die Aufgabe
Ausgehend von einem Datensatz mit positiven ganzen Zahlen müssen Sie die 5-stellige Zusammenfassung von berechnen . Da ich jedoch an großen Datenmengen arbeite, muss Ihr Code so klein wie möglich sein, damit ich ihn auf meinem Computer speichern kann.
Die Fünf-Nummern-Zusammenfassung besteht aus:
- Mindestwert
- Erstes Quartil (Q1)
- Median / Zweites Quartil (Q2)
- Drittes Quartil (Q3)
- Maximalwert
Es gibt verschiedene Möglichkeiten, die Quartile zu definieren, aber wir werden die von R implementierte verwenden:
Definitionen:
- Minimum und Maximum: der kleinste bzw. der größte Wert.
- Median: der mittlere Wert, wenn eine ungerade Anzahl von Einträgen hat, und das arithmetische Mittel der beiden am weitesten in der Mitte liegenden Werte, wenn eine gerade Anzahl von Einträgen hat. Beachten Sie, dass dies bedeutet, dass der Median ein nicht ganzzahliger Wert sein kann. Wir mussten vorher den Median berechnen .
- Erstes und drittes Quartil: Teilen Sie die Daten in zwei Hälften, einschließlich des zentralen Elements in jeder Hälfte, wenn eine ungerade Anzahl von Einträgen aufweist, und ermitteln Sie den Medianwert jeder Hälfte. Der Median der unteren Hälfte ist das erste Quartil und der Median der oberen Hälfte ist das dritte Quartil.
Beispiele:
. Der Median ist dann , und die untere Hälfte ist , was ein erstes Quartil von ergibt, und die obere Hälfte ist , was ein drittes Quartil von ergibt.
. Der Median ist , und die untere Hälfte ist , was ein erstes Quartil von ergibt, und die obere Hälfte ist , was ein drittes Quartil von ergibt.
Zusätzliche Regeln:
- Die Eingabe erfolgt als Array oder als das nächste Äquivalent Ihrer Sprache.
- Sie können davon ausgehen, dass das Array in aufsteigender oder absteigender Reihenfolge sortiert ist (geben Sie jedoch an, welche).
- Sie können die Ergebnisse in jeder Rückkehr / drucken konsistente Reihenfolge und in je nachdem , was flexibles Format Sie wollen, aber bitte den Auftrag und das Format in Ihrer Antwort bezeichnen.
- Eingebaute Funktionen, die äquivalent zu
fivenum
sind , sind zulässig, aber bitte implementieren Sie auch Ihre eigene Lösung. - Sie können nicht davon ausgehen, dass jede der fünf Zahlen eine Ganzzahl ist.
- Erklärungen sind erwünscht.
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in jeder Sprache!
Nach dem Zufallsprinzip generierte Testfälle
1 1 1 1 1 2 2 2 2 2 3 3 4 4 4 4 4 5 5 5 -> 1 1.5 2.5 4 5
1 2 2 2 4 4 5 5 6 7 7 8 9 9 9 9 9 10 10 10 -> 1 4 7 9 10
2 2 2 6 8 10 15 16 21 22 23 24 26 33 35 38 38 45 46 47 48 -> 2 10 23 38 48
1 2 9 -> 1 1.5 2 5.5 9
1 2 3 3 3 4 9 -> 1 2.5 3 3.5 9
1 1 2 5 7 7 8 8 15 16 18 24 24 26 26 27 27 28 28 28 29 29 39 39 40 45 46 48 48 48 48 49 50 52 60 63 72 73 79 85 86 87 88 90 91 93 94 95 95 97 100 -> 1 25 45 76 100
2 2 4 4 6 8 10 11 13 14 14 15 17 21 23 24 26 27 27 28 28 30 31 33 33 34 36 36 38 38 39 40 41 42 42 43 45 45 47 47 47 47 47 48 48 48 50 51 53 53 55 56 56 56 57 57 58 62 62 63 64 64 65 65 66 67 67 67 68 69 69 71 71 71 74 79 80 81 81 81 82 82 83 83 86 86 86 87 89 94 94 94 95 95 97 98 99 100 100 100 -> 2 33.5 54 76.5 100
1 3 3 4 -> 1 2 3 3.5 4
1 3 3 3 4 -> 1 3 3 3 4
quelle
quantile
ein benannter Vektor zurückgegeben wird, währendfivenum
unbenannt ist. Vielleicht ist das ein Problem hinter dem, wofivenum
verwendet wird?unname()
würde das lösen. Vielleicht gibt es historische Gründe?fivenum
für Eingaben der Länge 3 mod 4, einschließlich zwei der Testfälle.MATL , 18 Bytes
Die Ausgabereihenfolge steigt wie in den Testfällen.
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
MATL berechnet wie MATLAB bei Bedarf Quantile mit linearer Interpolation (genau wie in der Abfrage für den Median angegeben). Um das erforderliche Verhalten für das erste und dritte Quartil zu erzielen, genügt es, den Median zu wiederholen, wenn die Länge der Eingabe ungerade ist. Dann sind die Ergebnisse nur die Quantile 0, .25, .5, .75 und 1.
quelle
Gelee , 13 Bytes
Probieren Sie es online!
Bestellen Sie :
[Q1, Q3, Q2/med, min, max]
.quelle
Python 3.8 (Vorabversion) , 66 Byte
Probieren Sie es online!
Eingabe und Ausgabe erfolgen in aufsteigender Reihenfolge.
quelle
Python 3.8, 97 Bytes
Dies setzt voraus, dass die Eingabeliste in aufsteigender Reihenfolge sortiert ist.
f
ist die Funktion, um die 5-Zahlen-Zusammenfassung zurückzugeben.Ich habe ein paar Bytes entfernt, indem ich einige Hinweise aus FlipTacks Antwort auf Compute the Median genommen habe.
Probieren Sie es online!
Wie funktioniert es?
quelle
Holzkohle , 33 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Die Ausgabe erfolgt in aufsteigender oder absteigender Reihenfolge, je nachdem, ob die Eingabe in aufsteigender oder absteigender Reihenfolge erfolgt. Erläuterung:
Liefert den Index des letzten Elements.
Ordnen Sie die Elemente des folgenden Arrays zu und setzen Sie das Ergebnis in eine Zeichenfolge um, damit es implizit in separaten Zeilen gedruckt wird.
Berechnen Sie die Positionen der Quartilelemente, wobei ein Extra
0.5
angibt, dass der Wert der Durchschnitt zweier benachbarter Elemente ist.Berechnen Sie das Quartil an jeder Position, indem Sie den Durchschnitt der Werte am Boden und an der Decke der Position berechnen.
quelle
Ruby 2.7-Vorschau1 , 59 Bytes
Eine direkte
Abzockevon xnors Python-Antwort .Probieren Sie es online! (Ein Byte länger, da TiO Ruby 2.5 verwendet und keine nummerierten Blockparameter hat, z
@1
. B. ).quelle
C (gcc) ,
123121119 Bytes-2 dank ceilingcat.
Nimmt eine Liste an, die in aufsteigender Reihenfolge sortiert ist.
Ausgänge in Reihenfolge: min, Q1, Q2, Q3, max.
Probieren Sie es online!
quelle
05AB1E , 18 Bytes
Output Ordnung ist:
[Q1, Q3, Q2, min, max]
.Probieren Sie es online aus oder überprüfen Sie alle Testfälle . (Ich habe eine Sortierung
{
für die Testsuite hinzugefügt , damit die Testfälle in der Reihenfolge leichter überprüft werden können[min, Q1, Q2, Q3, max]
.)Erläuterung:
quelle