Es gibt bereits 30 Herausforderungen für pi, aber keine einzige fordert Sie auf, die n-te Dezimalstelle zu finden, also ...
Herausforderung
Für eine beliebige Ganzzahl im 0 <= n <= 10000
Anzeigebereich die n-te Dezimalstelle von pi.
Regeln
- Nachkommastellen stehen für jede Zahl
3.
- Ihr Programm kann eine Funktion oder ein vollständiges Programm sein
- Sie müssen das Ergebnis in Basis 10 ausgeben
- Sie können
n
jede geeignete Eingabemethode (stdin, input (), Funktionsparameter, ...) verwenden, die jedoch nicht fest codiert ist - Sie können die 1-basierte Indizierung verwenden, wenn dies in der Sprache Ihrer Wahl der Fall ist
- Sie müssen nicht mit ungültigen Eingaben umgehen (
n == -1
,n == 'a'
odern == 1.5
) - Builtins sind zulässig, wenn sie mindestens 10.000 Dezimalstellen unterstützen
- Die Laufzeit spielt keine Rolle, da es sich um den kürzesten und nicht um den schnellsten Code handelt
- Dies ist Code-Golf , der kürzeste Code in Bytes gewinnt
Testfälle
f(0) == 1
f(1) == 4 // for 1-indexed languages f(1) == 1
f(2) == 1 // for 1-indexed languages f(2) == 4
f(3) == 5
f(10) == 8
f(100) == 8
f(599) == 2
f(760) == 4
f(1000) == 3
f(10000) == 5
Als Referenz sind hier die ersten 100k Stellen von pi.
str(pi())[n+2]
Antworten:
05AB1E, 3 Bytes
Erklärt
Probieren Sie es online aus
Verwendet 1-basierte Indizierung.
Unterstützt bis zu 100.000 Stellen.
quelle
Python 2, 66 Bytes
Die Eingabe erfolgt aus stdin.
Beispielnutzung
quelle
n
als Eingabe plus 9 annehmen , können Sie Parens vermeiden.L
an den String anzuhängen.Bash + Coreutils,
6049 Bytesecho "scale=10100;4*a(1)"|bc -l|tr -d '\\\n'|cut -c$(($1+2))
Verbessert von Dennis . Vielen Dank!
Der Index ist einseitig.
quelle
Python 2,
737173 Bytesdanke an @aditsu für die Erhöhung meiner Punktzahl um 2 Bytes
Endlich ein Algorithmus, der in weniger als 2 Sekunden abgeschlossen werden kann.
Ideone es!
Verwendet die Formel
pi = 4*arctan(1)
beim Berechnenarctan(1)
mit der Taylor-Reihe.quelle
f=lambda n:...
.(lambda n:`p`[n+1])(1)
,(lambda n:`p`[n+1])(2)
, ...).import
Anweisungen vorher zu platzieren , nur dass dies vorher einige globale Variablen erzeugt.i=3 while a:a=i/2*a/i;p+=a;i+=2
für 4.MATL,
1110 Bytes1 Byte gespart dank @Luis
Diese Lösung verwendet eine 1-basierte Indizierung
Probieren Sie es online
Alle Testfälle
Erläuterung
quelle
YP
beim Testen der symbolischen ToolboxMathematica 30 Bytes
1
4
1
5
8
8
2
4
3
5
quelle
Salbei,
3225 BytesMeine erste Antwort in einer solchen Sprache.
n
rundetpi
auf 17775 Stellen.quelle
print
Aufruf, sonst ist dies ein Ausschnitt, der nur in der REPL funktioniert.lambda d:`n(pi,digits=d+5)`[-4]
[-8]
Vorschlag zu brechen .CJam, 32
Online ausprobieren (etwas langsam)
quelle
Mathematica,
2321 BytesSageMath, 24 Bytes
quelle
Pi
und⌋
(oder zwischen#
und zu erfordern,⌋
wenn die Multiplikation gespiegelt ist), sodass die Speicherung verschwindet.J ,
19-15BytesNimmt eine ganze Zahl n und gibt die n- te Stelle von pi aus. Verwendet nullbasierte Indizierung. Um die n- te Ziffer zu erhalten, berechnen Sie pi mal 10 n + 1 , nehmen Sie das Floor dieses Werts und nehmen Sie dann modulo 10.
Verwendung
Die Eingabe ist eine erweiterte Ganzzahl.
Auf meinem Rechner, dauert es etwa 18 Minuten , um die 10000 zu berechnen th Ziffer.
Erläuterung
quelle
Clojure, 312 Bytes
Wie Sie wahrscheinlich sehen können, habe ich keine Ahnung, was ich tue. Dies endete komischer als alles andere. Ich googelte "pi to n digits" und landete auf der Wikipedia-Seite für die Bailey-Borwein-Plouffe-Formel . Da ich kaum genug Kalkül (?) Kannte, um die Formel zu lesen, gelang es mir, sie in Clojure zu übersetzen.
Die Übersetzung selbst war nicht so schwierig. Die Schwierigkeit bestand in der Handhabung der Genauigkeit bis zu n Stellen, da die Formel dies erfordert
(Math/pow 16 precision)
. das wird sehr schnell riesig. Ich mussteBigDecimal
überall dafür verwenden, um zu arbeiten, was alles Dinge wirklich aufblähte.Ungolfed:
Unnötig zu sagen, ich bin mir sicher, dass es einen einfacheren Weg gibt, dies zu tun, wenn Sie Mathe kennen.
quelle
Clojure, 253 Bytes
Berechnen Sie die Zahl pi mit dieser Formel . Makro muss neu definiert werden,
with-precision
da es zu häufig verwendet wird.Sie können die Ausgabe hier sehen: https://ideone.com/AzumC3 1000 und 10000 Takes überschreiten das Zeitlimit für Ideone, Achselzucken
quelle
Python 3 , 338 Bytes
Diese Implementierung basiert auf dem Chudnovsky-Algorithmus , einem der schnellsten Algorithmen zur Schätzung von pi. Für jede Iteration werden ungefähr 14 Stellen geschätzt (siehe hier für weitere Details).
Probieren Sie es online!
quelle
Java 7,
262260 BytesVerwendet @ LeakyNuns Python 2-Algorithmus .
Ungolfed & Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
Smalltalk - 270 Bytes
Verlässt sich auf die Identität
tan⁻¹(x) = x − x³/3 + x⁵/5 − x⁷/7 ...
und dasπ = 16⋅tan⁻¹(1/5) − 4⋅tan⁻¹(1/239)
. SmallTalk verwendet Integer-Arithmetik mit unbegrenzter Genauigkeit, sodass es bei großen Eingaben funktioniert, wenn Sie warten möchten!Speichern unter
pi.st
und Ausführen wie in den folgenden Testfällen. Die Indizierung basiert auf eins.quelle
JavaScript (Node.js) (Chrome 67+),
75736763 ByteProbieren Sie es online!
JavaScript (Node.js) (Chrome 67+),
9089 ByteProbieren Sie es online!
quelle
Ahorn, 24 Bytes
Testfälle:
quelle
C #,
252250 BytesProbieren Sie es online!
quelle