Pi é um número irracional , o que significa que sua representação decimal nunca termina ou se repete.
Pi truncado com 41 dígitos decimais (40 casas) é 3.1415926535897932384626433832795028841971
.
Se ignorarmos o ponto decimal e listar os dígitos como uma sequência de números inteiros positivos, evitando duplicatas , obteremos 3 1 4 15 9 2 6 5 35 8 97 93 23 84 62 64 33 83 27 950 28 841 971
( OEIS A064809 ).
(Observe que 15
aparece na sequência em vez de 1 5
porque 1
já havia ocorrido.
Observe também que 0
não ocorre porque não é positivo; 950
contém o primeiro zero.)
Para construir o primeiro número pirracional , usamos essa sequência para indexar os dígitos do Pi (o primeiro dígito é 3, o segundo 1 etc.).
Portanto, o primeiro dígito do primeiro número pirracional é o terceiro dígito do Pi,
o segundo dígito é o 1º dígito do Pi,
o terceiro dígito é o 4º dígito do Pi,
o quarto é o 15º dígito do Pi,
e assim por diante.
Um ponto decimal é adicionado após o primeiro dígito para imitar Pi.
Assim, o primeiro número pirracional com 41 dígitos é 4.3195195867462520687356193644029372991880
.
(Observe que, para o 30º dígito, tive que percorrer todo o caminho até o 974º dígito do Pi.)
Para construir o segundo número pirracional, o processo é repetido usando o primeiro número pirracional em vez de Pi. (O próprio Pi pode ser chamado de número pirracional zero.) Portanto, a nova sequência é 4 3 1 9 5 19 58 ...
e o primeiro número piiracional é indexado para produzir o segundo, que inicia 9.14858...
.
Outros números pirracionais são criados da mesma maneira, cada um sendo gerado a partir do número anterior.
Desafio
Sua tarefa é escrever o programa mais curto possível, que recebe dois números inteiros, N
e D
, e gera o N
número pirracional truncado para D
dígitos decimais.
D
é sempre positivo, mas N
não negativo, e os D
dígitos de Pi devem ser impressos quando N
é 0.
Quando D
é 1, não importa se o ponto decimal está presente ou não.
A entrada deve vir de stdin ou a linha de comando e a saída deve ir para stdout (ou as alternativas mais próximas do seu idioma).
Seu programa deve funcionar para todos os valores de entrada iguais N
ou D
inferiores a 2 16 , mas não precisa ser oportuno ou eficiente.
O código mais curto em bytes vence.
(Observe que os números pirracionais existem em outras bases, mas tudo neste desafio é feito na base 10.)
N=1
, D=13393
por exemplo, você precisaria o dígito 31 milionésimo de PI