Wenn Sie gefälschte Nachrichten erfinden möchten, sollten Sie einige Daten fabrizieren, um sie zu sichern. Sie müssen bereits einige vorgefasste Schlussfolgerungen haben, und Sie möchten, dass einige Statistiken das Argument Ihrer fehlerhaften Logik verstärken. Diese Herausforderung soll Ihnen helfen!
Bei drei eingegebenen Zahlen:
- N - Anzahl der Datenpunkte
- μ - Mittelwert der Datenpunkte
σ - Standardabweichung der Datenpunkte, wobei μ und σ gegeben sind durch:
Geben Sie eine ungeordnete Liste von Zahlen 𝑥 i aus , die die gegebenen Werte N , μ und σ erzeugen würden .
Ich werde nicht zu wählerisch bei den E / A-Formaten sein, aber ich erwarte eine Art Dezimalstellen für μ , σ und die Ausgabedatenpunkte. Mindestens 3 signifikante Zahlen und eine Größenordnung von mindestens 1.000.000 sollten unterstützt werden. IEEE-Schwimmer sind in Ordnung.
- N wird immer eine ganze Zahl sein, wobei 1 ≤ N ≤ 1.000 ist
- μ kann eine beliebige reelle Zahl sein
- σ wird immer ≥ 0 sein
- Datenpunkte können eine beliebige reelle Zahl sein
- wenn N 1 ist, wird σ immer 0 sein.
Beachten Sie, dass die meisten Eingänge viele mögliche Ausgänge haben. Sie müssen nur eine gültige Ausgabe angeben. Die Ausgabe kann deterministisch oder nicht deterministisch sein.
Beispiele
Input (N, μ, σ) -> Possible Output [list]
2, 0.5, 1.5 -> [1, 2]
5, 3, 1.414 -> [1, 2, 3, 4, 5]
3, 5, 2.160 -> [2, 6, 7]
3, 5, 2.160 -> [8, 4, 3]
1, 0, 0 -> [0]
quelle
+ve
und-ve
bedeuten?Antworten:
Pyth ,
443534 BytesProbieren Sie es online! (Der obige Code definiert eine Funktion. Er
:.*
wird an den Link angehängt, um die Funktion aufzurufen.)Die Mathematik
Dadurch werden die Daten symmetrisch aufgebaut. Wenn gerade
N
ist, sind die Daten nur der Mittelwert plus oder minus der Standardabweichung. WennN
jedoch ungerade ist, haben wir gerade eine Dose Würmer geöffnet, da der Mittelwert vorhanden sein muss, damit die Daten symmetrisch sind, und daher müssen die Schwankungen mit einem bestimmten Faktor multipliziert werden.Wenn
n
es gerade istμ+σ
.μ-σ
.Wenn
n
ist ungeradeμ
.μ+σ*sqrt(n/(n-1))
.μ-σ*sqrt(n/(n-1))
.quelle
MATL , 22 Bytes
Vielen Dank an @DigitalTrauma für eine Korrektur.
Eingabereihenfolge ist:
N
,σ
,μ
.Probieren Sie es online!
Oder sehen Sie sich zur Kontrolle eine modifizierte Version an , die auch den Mittelwert und die Standardabweichung der erzeugten Daten berechnet.
Erläuterung
Der Code ist in vier Teile gegliedert:
:
generiert das Array,[1 2 ... N]
inN
das implizit eingegangen wird.t&1Zs/
dividiert diese Zahlen durch ihre empirische Standardabweichung (berechnet durch NormalisierungN
) undtYm-
subtrahiert das empirische Mittel der resultierenden Werte. Dies stellt sicher, dass die Ergebnisse einen empirischen Mittelwert0
und eine empirische Standardabweichung aufweisen1
.*
multipliziert mitσ
und+
addiertμ
, beide als implizite Eingaben.tZN?x3G
behandelt den Sonderfall , dassN = 1
,σ = 0
, für die die Ausgabe sollteμ
. Wenn dies tatsächlich der Fall ist, dann ist die empirische Standardabweichung in dem zweiten Schritt berechnet wurde0
, gab die Divisioninf
und Multiplikation mitσ
im dritten Schritt gabNaN
. Der Code bewirkt also Folgendes: Wenn das erhaltene Array aus allenNaN
Werten (CodetZN?
) besteht, löschen Sie es (x
) und drücken Sie die dritte Eingabe (3G
)μ
.quelle
Python , 50 Bytes
Probieren Sie es online!
Verwendet die folgende
n
-Element-Verteilung mit mean0
und sdev1
:1/n
(dh1
Element) Ausgabe(n-1)**0.5
1-1/n
(dhn-1
Elemente), Ausgabe-(n-1)**(-0.5)
Dies wird durch Transformation zu mean
m
und sdev neu skaliert . Dummerweise gibt eine Division durch Null Fehler für einen nutzlosen Wert, so dass wir es weg , indem Sie hacken , mit was für und aus anderen Gründen .s
x->m+s*x
n=1
/(n-1%n)**.5
1%n
0
n==1
1
Man könnte meinen, man
(n-1)**.5
kann es verkürzen~-n**.5
, aber die Potenzierung geschieht zuerst.A
def
ist ein Byte länger.quelle
R
836253 BytesWenn
n=1
, dann gibt es zurückm
(dascale
würde zurückNA
), andernfalls skaliert es die Daten[1,...,n]
auf Mittelwert 0 und (Stichproben-) Standardabweichung 1, multipliziert also mits*sqrt(1-1/n)
, um die korrekte Populationsstandardabweichung zu erhalten, und addiertm
sie zum entsprechenden Mittelwert. Vielen Dank an Dason für die Einführung in die Skalierungsfunktion und das Löschen dieser Bytes!Probieren Sie es online!
quelle
1:n
anstelle vonrt(n,n)
4 Bytes zu speichern. Und diescale
Funktion könnte wahrscheinlich nützlich sein.scale
was großartig ist.Gelee , 20 Bytes
Probieren Sie es online!
Vollständiges Programm mit drei Befehlszeilenargumenten: n , μ , σ .
Wie?
Erzeugt Floor- Werte (n / 2) , die gleich weit vom Mittelwert entfernt sind, und einen Wert am Mittelwert, wenn n ungerade ist, sodass die Standardabweichung korrekt ist ...
quelle