Fundo:
Pi ( π
) é um número transcendental e, portanto, possui uma representação decimal não-terminante. Similar, a representação não termina se escrita em qualquer outra base inteira. Mas e se nós o escrevemos na base π
?
Dígitos em decimais representam potências de 10, portanto:
π = 3.14… = (3 * 10^0) + (1 * 10^-1) + (4 * 10^-2) + …
Portanto, na base π
, os dígitos representariam potências de π
:
π = 10 = (1 * π^1) + (0 * π^0)
Nesta nova base, os números inteiros agora têm representações sem terminação. Portanto, 10 em decimal agora se torna o seguinte:
10 => 100.01022… = (1 * π^2) + (0 * π^1) + (0 * π^0) + (0 * π^-1) + (1 * π^-2) + …
Observe que, na base, π
os dígitos usados são 0,1,2,3, porque esses são dígitos menores que π
.
Desafio:
Dado um número inteiro não negativo x
, ou:
Saída (sem parar) sua representação na base
π
. Se o número tiver uma representação finita (0, 1, 2, 3), o programa poderá parar em vez de imprimir zeros infinitos.Pegue um número inteiro arbitrariamente grande
n
e produza os primeirosn
dígitos dex
em baseπ
.
Regras:
- Como um número tem várias representações possíveis, você deve exibir a que aparece a maior (normalizada). Assim como
1.0 = 0.9999…
em decimal, esse problema também existe nesta base. Na baseπ
, um ainda está1.0
, mas também pode ser escrito como0.3011…
, por exemplo. Da mesma forma, dez é100.01022…
, mas também pode ser escrito como30.121…
ou23.202…
. - Isso é código-golfe, e o menor número de bytes vence. Programa ou função.
- Sem built-ins ( estou olhando para você , Mathematica )
Resultados:
0 = 0
1 = 1
2 = 2
3 = 3
4 = 10.220122021121110301000010110010010230011111021101…
5 = 11.220122021121110301000010110010010230011111021101…
6 = 12.220122021121110301000010110010010230011111021101…
7 = 20.202112002100000030020121222100030110023011000212…
8 = 21.202112002100000030020121222100030110023011000212…
9 = 22.202112002100000030020121222100030110023011000212…
10 = 100.01022122221121122001111210201201022120211001112…
42 = 1101.0102020121020101001210220211111200202102010100…
1337 = 1102021.0222210102022212121030030010230102200221212…
9999 = 100120030.02001010222211020202010210021200221221010…
Primeiros 10.000 dígitos de dez na base Pi
Verificação:
Você pode verificar qualquer saída que desejar usando o código do Mathematica aqui . O primeiro parâmetro é x
, o terceiro é n
. Se expirar, escolha um pequeno n
e execute-o. Em seguida, clique em "Abrir no código" para abrir uma nova planilha do Mathematica com o programa. Não há limite de tempo lá.
Converta a saída resultante em um número aqui .
Palavras-chave:
fonte
n
, acho que o Pi deve ter pelo menosn
dígitos de precisão.Respostas:
Julia 0.6 , 81 bytes
Imprime dígitos (e o. Que me custou 14 bytes) até que a Pilha ultrapasse os 22k dígitos no TIO. Se eu tiver permissão para passar a entrada como um
BigFloat
, posso cortar 5 bytes. Faz uso constante da precisão arbitrária incorporadaπ
. Mas é um pouco mais legal do que isso, na verdade é uma constante de precisão adaptativa,π*1.0
é um número de ponto flutuante de 64 bitsπ*big(1.0)
(também conhecido como multiplicado por um número de precisão mais alto)π
.Experimente online!
fonte
Python 3 ,
471317310 bytes7 bytes graças a caird coinheringaahing.
Certamente existem campos que eu perdi. Sinta-se livre para apontá-los nos comentários.
Experimente online!
Versão não destruída:
Experimente online!
fonte
`i`
.Ruby
-rbigdecimal/math
,11110397 bytesExperimente online!
Toma o número de entrada como
x
e a precisão desejada comon
. Saídas por impressão. Faz uso da biblioteca incorporada do BigDecimal para o valor de PI de pecisão arbitrária.fonte
Python 3 + sympy, 144 bytes
Experimente online!
Muito lento, na verdade.
fonte