Mathematica, 42 40 39 Bytes (oder 31/29?)
Ich habe drei Lösungen alle bei 42 Bytes:
4Count[1~RandomReal~{#,2},p_/;Norm@p<1]/#&
4Tr@Ceiling[1-Norm/@1~RandomReal~{#,2}]/#&
4Tr@Round[1.5-Norm/@1~RandomReal~{#,2}]/#&
Dies sind alle unbenannten Funktionen, die die Anzahl der Abtastwerte n
messen und eine rationale Approximation von π zurückgeben. Zunächst erzeugen sie alle n
Punkte im Einheitsquadrat im positiven Quadranten. Dann bestimmen sie die Anzahl der Abtastwerte, die innerhalb des Einheitskreises liegen, und dividieren dann durch die Anzahl der Abtastwerte und multiplizieren mit 4
. Der einzige Unterschied besteht darin, wie sie die Anzahl der Proben innerhalb des Einheitskreises bestimmen:
- Der erste verwendet
Count
mit der Bedingung, dass Norm[p] < 1
.
- Der zweite subtrahiert die Norm jedes Punktes
1
und rundet dann auf. Dies dreht Zahlen innerhalb des Einheitenkreises nach 1
und solche außerhalb nach 0
. Danach fasse ich sie alle zusammen Tr
.
- Die dritte Methode macht im Wesentlichen dasselbe, subtrahiert jedoch die von
1.5
, sodass ich sie Round
anstelle von verwenden kann Ceiling
.
Aaaaaund als ich das aufschrieb , kam mir der Gedanke , dass es tatsächlich eine kürzere Lösung gibt, wenn ich einfach subtrahiere 2
und dann benutze Floor
:
4Tr@Floor[2-Norm/@1~RandomReal~{#,2}]/#&
Oder speichern Sie ein anderes Byte mit den Unicode-Operatoren für Fußböden oder Decken:
4Tr@⌊2-Norm/@1~RandomReal~{#,2}⌋/#&
4Tr@⌈1-Norm/@1~RandomReal~{#,2}⌉/#&
Beachten Sie, dass die drei Runden-basierten Lösungen können auch mit geschrieben werden Mean
statt Tr
und ohne der /#
wieder für das gleiche Bytes.
Wenn andere Monte-Carlo-basierte Ansätze in Ordnung sind (insbesondere der von Peter gewählte), kann ich 31 Bytes ausführen, indem ich das Integral von oder 29 unter Verwendung des Integrals von schätze . Diese Zeit wird als Gleitkommazahl angegeben:√(1-x2)
1/(1+x2)
4Mean@Sqrt[1-1~RandomReal~#^2]&
Mean[4/(1+1~RandomReal~#^2)]&