Já existem 30 desafios dedicados a pi, mas nenhum pede que você encontre o n-ésimo decimal, então ...
Desafio
Para qualquer número inteiro no intervalo de 0 <= n <= 10000
exibição, o enésimo decimal de pi.
Regras
- Os decimais são todos os números após
3.
- Seu programa pode ser uma função ou um programa completo
- Você deve gerar o resultado na base 10
- Você pode obter
n
de qualquer método de entrada adequado (stdin, input (), parâmetros de função, ...), mas não codificado - Você pode usar a indexação baseada em 1 se for nativa do seu idioma de escolha
- Você não precisa lidar com entradas inválidas (
n == -1
,n == 'a'
oun == 1.5
) - Builtins são permitidos, se eles suportarem até pelo menos 10 mil decimais
- O tempo de execução não importa, pois esse é o código mais curto e não o mais rápido
- Este é o código-golfe , o código mais curto em bytes ganha
Casos de teste
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
Para referência, aqui estão os primeiros 100 mil dígitos de pi.
str(pi())[n+2]
Respostas:
05AB1E, 3 bytes
Explicado
Experimente online
Usa indexação baseada em 1.
Suporta até 100k dígitos.
fonte
Python 2, 66 bytes
A entrada é retirada do stdin.
Uso da amostra
fonte
n
a entrada mais 9, pode evitar parênteses.L
à string.Bash + coreutils,
6049 bytesecho "scale=10100;4*a(1)"|bc -l|tr -d '\\\n'|cut -c$(($1+2))
Melhorado por Dennis . Obrigado!
O índice é baseado em um.
fonte
Python 2,
737173 bytesobrigado a @aditsu por aumentar minha pontuação em 2 bytes
Finalmente, um algoritmo que pode ser concluído em menos de 2 segundos.
Ideone it!
Usa a fórmula
pi = 4*arctan(1)
ao computararctan(1)
usando sua série taylor.fonte
f=lambda n:...
.(lambda n:`p`[n+1])(1)
,(lambda n:`p`[n+1])(2)
...).import
instruções de antemão, apenas que isso faz algumas variáveis globais de antemão.i=3 while a:a=i/2*a/i;p+=a;i+=2
para 4.MATL,
1110 bytes1 byte salvo graças a @Luis
Esta solução utiliza indexação baseada em 1
Experimente Online
Todos os casos de teste
Explicação
fonte
YP
no meu teste da caixa de ferramentas simbólicaMathematica 30 bytes
1
4
1
5
8
8
2
4
3
5
fonte
Sábio,
3225 bytesMinha primeira resposta em um idioma desse tipo.
n
arredondapi
para 17775 dígitos.fonte
print
chamada, ou esse é um trecho que só funciona no REPL.lambda d:`n(pi,digits=d+5)`[-4]
[-8]
proposta.CJam, 32
Experimente online (é um pouco lento)
fonte
Mathematica,
2321 bytesSageMath, 24 bytes
fonte
Pi
e⌋
(ou entre#
e⌋
se a multiplicação for invertida), para que a economia desapareça.J ,
1915 bytesToma um inteiro n e emite o n th dígitos de pi. Usa indexação baseada em zero. Para obter o n º dígito, pi computação vezes 10 n +1 , use o piso desse valor e, em seguida, o módulo 10.
Uso
A entrada é um número inteiro estendido.
Na minha máquina, leva cerca de 18 minutos para calcular os 10000 th dígitos.
Explicação
fonte
Clojure, 312 bytes
Então, como você provavelmente pode perceber, não tenho ideia do que estou fazendo. Isso acabou sendo mais cômico do que qualquer coisa. Coloquei "pi em n dígitos" no Google e acabei no página Wikipedia para a fórmula de Bailey – Borwein – Plouffe . Sabendo Cálculo (?) Apenas o suficiente para ler a fórmula, consegui traduzi-lo para o Clojure.
A tradução em si não foi tão difícil. A dificuldade veio de lidar com precisão até n dígitos, pois a fórmula exige
(Math/pow 16 precision)
; que fica enorme muito rápido. Eu precisava usar emBigDecimal
todos os lugares para que isso funcionasse, o que realmente inchava as coisas.Ungolfed:
Escusado será dizer que tenho certeza de que há uma maneira mais fácil de fazer isso, se você conhece alguma matemática.
fonte
Clojure, 253 bytes
Calcule o número pi usando esta fórmula . É necessário redefinir a macro
with-precision
, pois é usada com muita frequência.Você pode ver a saída aqui: https://ideone.com/AzumC3 1000 e 10000 leva excede o limite de tempo usado em ideone, encolhe os ombros
fonte
Python 3 , 338 bytes
Essa implementação é baseada no algoritmo de Chudnovsky , um dos algoritmos mais rápidos para estimar pi. Para cada iteração, aproximadamente 14 dígitos são estimados (consulte aqui para mais detalhes).
Experimente online!
fonte
Java 7,
262260 bytesUtilizado o algoritmo Python 2 do LeakyNun .
Ungolfed & código de teste:
Experimente aqui.
Saída:
fonte
Smalltalk - 270 bytes
Confia na identidade
tan⁻¹(x) = x − x³/3 + x⁵/5 − x⁷/7 ...
, e issoπ = 16⋅tan⁻¹(1/5) − 4⋅tan⁻¹(1/239)
. O SmallTalk usa aritmética inteira de precisão ilimitada, de modo que funcionará para entradas grandes, se você estiver disposto a esperar!Salve como
pi.st
e execute como nos seguintes casos de teste. A indexação é baseada.fonte
JavaScript (Node.js) (Chrome 67+),
75736763 bytesExperimente online!
Usandoπ/ 2= ∑∞k = 0k ! / ( 2 k + 1 ) ! ! (mesma lógica usada pela resposta Python de Leaky Nun, mas graças à sintaxe de JS que torna isso mais curto). A entrada é passada para a função como um BigInt. 2 bytes podem ser removidos se a indexação baseada em 1 for usada:
JavaScript (Node.js) (Chrome 67 ou superior),
9089 bytesExperimente online!
Usandoπ/ 4=arctan( 1 / 2 ) + arctan( 1 / 3 ) . A entrada é passada para a função como um BigInt. 2 bytes podem ser removidos se a indexação baseada em 1 for usada:
fonte
Bordo, 24 bytes
Casos de teste:
fonte
C #,
252250 bytesExperimente online!
fonte