30 défis sont déjà dédiés à la pi mais pas un seul ne vous demande de trouver la nième décimale, alors ...
Défi
Pour tout entier dans la gamme de 0 <= n <= 10000
affichage, la nième décimale de pi.
Règles
- Les décimales sont chaque nombre après
3.
- Votre programme peut être une fonction ou un programme complet
- Vous devez sortir le résultat en base 10
- Vous pouvez obtenir
n
n'importe quelle méthode d'entrée appropriée (stdin, input (), paramètres de fonction, ...), mais pas codé en dur - Vous pouvez utiliser l' indexation 1 si elle est native de la langue de votre choix
- Vous n'avez pas à traiter avec une entrée invalide (
n == -1
,n == 'a'
oun == 1.5
) - Les options intégrées sont autorisées si elles prennent en charge au moins 10 000 décimales.
- Le temps d'exécution n'a pas d'importance, car il s'agit du code le plus court et non du code le plus rapide
- Ceci est code-golf , le code le plus court en octets gagne
Cas de test
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
Pour référence, voici les 100 premiers chiffres de pi.
str(pi())[n+2]
Réponses:
05AB1E, 3 octets
A expliqué
Essayez-le en ligne
Utilise l'indexation basée sur 1.
Prend en charge jusqu'à 100 000 chiffres.
la source
Python 2, 66 octets
L'entrée est prise de stdin.
Exemple d'utilisation
la source
n
comme entrée plus 9, vous pouvez éviter les parens.L
à la chaîne.Bash + coreutils,
6049 bytesecho "scale=10100;4*a(1)"|bc -l|tr -d '\\\n'|cut -c$(($1+2))
Amélioré par Dennis . Merci!
L'index est à base unique.
la source
Python 2,
737173 octetsmerci à @aditsu d'avoir augmenté mon score de 2 octets
Enfin un algorithme qui peut se terminer en moins de 2 secondes.
Ideone ça!
Utilise la formule
pi = 4*arctan(1)
lors du calcul à l'arctan(1)
aide de sa série taylor.la source
f=lambda n:...
.(lambda n:`p`[n+1])(1)
,(lambda n:`p`[n+1])(2)
...).import
instructions à l’avance, mais cela crée au préalable des variables globales.i=3 while a:a=i/2*a/i;p+=a;i+=2
pour 4.MATL,
11 à10 octets1 octet enregistré grâce à @Luis
Cette solution utilise l'indexation 1
Essayez-le en ligne
Tous les cas de test
Explication
la source
YP
dans mes tests de la boîte à outils symboliqueMathematica 30 octets
1
4
1
5
8
8
2
4
3
5
la source
Sage,
32 à25 octetsMa première réponse dans une langue de ce genre.
n
arronditpi
à 17775 chiffres.la source
print
appel ou bien c’est un extrait qui ne fonctionne que dans le REPL.lambda d:`n(pi,digits=d+5)`[-4]
[-8]
proposition.CJam, 32
Essayez-le en ligne (c'est un peu lent)
la source
Mathematica,
2321 octetsSageMath, 24 octets
la source
Pi
et⌋
(ou entre#
et⌋
si la multiplication est inversée), de sorte que la sauvegarde disparaît.J ,
1915 octetsPrend un entier n et délivre en sortie la n ième chiffre de pi. Utilise l'indexation à base zéro. Pour obtenir le n ième chiffre Compute fois pi 10 n + 1 , prenez la parole de cette valeur, puis modulo 10.
Usage
L'entrée est un entier étendu.
Sur ma machine, il faut environ 18 minutes pour calculer le 10000 ème chiffre.
Explication
la source
Clojure, 312 octets
Donc, comme vous pouvez probablement le constater, je n'ai aucune idée de ce que je fais. Cela a fini par être plus comique que tout. Je Google'd « pi à n chiffres », et a fini sur la page de Wikipédia pour la Formule BBP . Sachant à peine assez de calcul (?) Pour lire la formule, j'ai réussi à la traduire en Clojure.
La traduction elle-même n'était pas si difficile. La difficulté provenait de la précision de traitement jusqu’à n chiffres, puisque la formule l’exige
(Math/pow 16 precision)
; qui devient énorme très vite. Je devais utiliserBigDecimal
partout pour que cela fonctionne, ce qui est vraiment gonflé les choses.Ungolfed:
Inutile de dire que je suis sûr qu'il existe un moyen plus facile de s'y prendre si vous connaissez les mathématiques.
la source
Clojure, 253 octets
Calculez le nombre pi en utilisant cette formule . Je dois redéfinir la macro
with-precision
car elle est utilisée trop souvent.Vous pouvez voir la sortie ici: https://ideone.com/AzumC3 Les prises 1000 et 10000 dépassent la limite de temps utilisée par idéone, les haussements d'épaules
la source
Python 3 , 338 octets
Cette implémentation est basée sur l’ algorithme de Chudnovsky , l’un des algorithmes les plus rapides pour estimer pi. Pour chaque itération, environ 14 chiffres sont estimés (regardez ici pour plus de détails).
Essayez-le en ligne!
la source
Java 7,
262260 octetsUtilisé @ LeakyNun de l'algorithme Python 2 .
Non testé et code de test:
Essayez ici.
Sortie:
la source
Smalltalk - 270 octets
S'appuie sur l'identité
tan⁻¹(x) = x − x³/3 + x⁵/5 − x⁷/7 ...
, et çaπ = 16⋅tan⁻¹(1/5) − 4⋅tan⁻¹(1/239)
. SmallTalk utilise une arithmétique en nombres entiers de précision illimitée, ce qui fonctionnera pour les grandes entrées, si vous êtes prêt à attendre!Enregistrez sous
pi.st
et exécutez-le dans les cas de test suivants. L'indexation est basée.la source
JavaScript (Node.js) (Chrome 67+),
75736763 octetsEssayez-le en ligne!
En utilisantπ/ 2= ∑∞k = 0k ! / ( 2 k + 1 ) ! ! (Même logique utilisée par la réponse Python de Leaky Nun, mais c'est grâce à la syntaxe de JS que cela raccourcit). L'entrée est transmise à la fonction en tant que BigInt. 2 octets peuvent être supprimés si l'indexation 1 est utilisée:
JavaScript (Node.js) (Chrome 67+),
9089 octetsEssayez-le en ligne!
En utilisantπ/ 4= arctan( Une / deux ) + arctan( Une / 3 ) . L'entrée est transmise à la fonction en tant que BigInt. 2 octets peuvent être supprimés si l'indexation 1 est utilisée:
la source
Maple, 24 octets
Cas de test:
la source
C #,
252250 octetsEssayez-le en ligne!
la source