Todo mundo sabe pi da constante matemática, a relação da circunferência de um círculo e seu diâmetro.
3.14159265358979323846264338327950288419716939937510...
Você provavelmente também sabe um e a constante matemática, a base de um logaritmo natural.
2.71828182845904523536028747135266249775724709369996...
Mas ... você sabe torta ? É uma das constantes mais importantes (para mim). São os dígitos de pi e e intercalados.
32.1741185298216852385485997094352233854366206248373...
Como uma expansão decimal:
3, 2, 1, 7, 4, 1, 1, 8, 5, 2, 9, 8, 2, 1, 6, 8, 5, 2...
Essa é a sequência OEIS A001355 .
PALAVRAS-CHAVE: nonn, base, burro , fácil
É uma sequência muito burra.
Desafio
Escreva um programa / função que pega um número inteiro não negativo n e gera o enésimo dígito do pie .
Especificações
- Aplicam- se as regras de E / S padrão .
- As brechas padrão são proibidas .
- Sua solução deve funcionar com pelo menos 50 dígitos de cada constante, o que significa que deve funcionar com pelo menos 100 termos da sequência ( tente não codificar: P).
- A saída para 2 ou 3 não é um ponto decimal .
- Sua solução pode ser indexada 0 ou 1, mas especifique qual.
- Esse desafio não é encontrar a abordagem mais curta em todos os idiomas, mas sim encontrar a abordagem mais curta em cada idioma .
- Seu código será pontuado em bytes , geralmente na codificação UTF-8, a menos que especificado de outra forma.
- Funções internas que computam essa sequência são permitidas, mas é recomendável incluir uma solução que não dependa de uma interna.
- Explicações, mesmo para idiomas "práticos", são incentivadas .
Casos de teste
Estes são 0 indexados.
Input Output
1 2
2 1
11 8
14 6
21 4
24 9
31 5
Em alguns formatos melhores:
1 2 11 14 21 24 31
1, 2, 11, 14, 21, 24, 31
2 3 12 15 22 25 32
2, 3, 12, 15, 22, 25, 32
dumb
simplesmente significa desinteressante, sem propriedades especiais.pei
, nãopie
Respostas:
Mathematica, 50 bytes
Indexado 1
fonte
Riffle
, mas a minha solução surge um byte curto:RealDigits[If[OddQ@#,Pi,E],10,#][[1,Ceiling[#/2]]]
&Haskell,
154147146 bytes, NENHUM CÓDIGO OU USO DE CONSTANTES DE BUILTINEssa solução calcula e e pi usando séries infinitas e as armazena em números inteiros de ponto fixo de precisão arbitrária (tipo interno de Haskell
Integer
e suaRational
extensão).Ungolfed:
Indexado a 0. Preciso para a entrada 0-99, impreciso para a entrada 100-101, fora dos limites.
Explicação:
Calcula pi usando esta série infinita . Calcula e usando a série fatorial inversa clássica . Teoricamente, essas não são as fórmulas ideais para usar, pois não são muito concisas em termos de número de bytes, mas foram as únicas que pude encontrar que convergiram com rapidez suficiente para viabilizar a verificação da precisão (outras somas exigiriam centenas de milhares se milhões de termos). Na versão golfed, e é calculado com uma precisão muito maior do que o necessário para minimizar o número de contas. Ambas as constantes são calculadas com um pouco mais de dígitos do que o necessário para evitar erros de arredondamento (que são responsáveis pela cauda estranha de valores incorretos).
As constantes são calculadas como proporções inteiras de precisão arbitrária (
Rational
) e multiplicadas por 10 ^ 50, para que todos os dígitos necessários permaneçam intactos quando a proporção for convertida em um número inteiro (precisão arbitrária) (Integer
). Isso também evita a questão de evitar o ponto decimal nas representações de string dos números, das quais a função extrai caracteres alternativamente.fonte
Táxi , 749 bytes
Experimente online!
Tentar calcular pi ou e programaticamente em Táxi seria um pesadelo, embora eu tenha certeza que isso pode ser feito. Portanto, é muito mais curto codificar os primeiros 100 dígitos da sequência. Parece muito barato, mas é definitivamente o menor código de táxi que atende ao desafio.
Ele codifica a sequência como seqüências de caracteres,
n
capta e iteran
para baixo e remove o primeiro caractere da sequência a cada vez. Quandon=0
, imprima o primeiro caractere. Este é um indexado.Sem golfe / formatado:
fonte
Python 2 , 88 bytes
-4 bytes graças à ideia básica de conversão de @EriktheOutgolfer .
Experimente online!
Python 2 + sympy , 92 bytes
Indexado a 0. Agradeço ao Rod por me lembrar de mudar para o
from sympy import*
qual eu esqueci anteriormente.Experimente online!
Python 2 , 114 bytes
Sinceramente, acho que a solução mais curta é a codificação permanente, já que o Python não possui built-ins úteis.Experimente online!
Python 2 , 114 bytes
Solução equivalente por @totallyhuman .
Experimente online!
fonte
05AB1E , 10 bytes
Explicação:
Indexado a 0.
Experimente online!
fonte
žt
não havia uma lista infinita na época, e é por isso que Okx está usando os 100 primeiros dígitos de e em seu programa. Mudá-lo para a nova versão do 05AB1E (onde pi e e são uma lista infinita) ainda não funcionaria na sua versão atual, porque o zip criaria pares e oJ
oin uniria esses pares em vez de tudo. Ainda são possíveis 9 bytes , substituindoJ
porS
na nova versão, o que aS
torna uma lista achatada de caracteres / dígitosPython 3 ,
8380 bytesIndexado a 0.
Experimente online!
Existem alguns caracteres não imprimíveis que não podem ser vistos corretamente em um navegador.
Isso funciona criando a tupla a
(32, 17, 41, 18, 52, ...)
partir dos códigos ASCII dos caracteres na cadeia de caracteres codificada. A tupla é convertida na string'3217411852...'
, na qual selecionamos o dígito direito.fonte
Poliglota, 108 bytes
Trabalha em:
Eu acho que este é o mais curto que você pode fazer em c #, uma vez que são 252 bytes para encontrar o N - ésimo decimal de pi .
fonte
Java 8,
420417413404380358 (calculado) e115110 (codificado) bytesCalculado (
420417413404380358 ):Experimente aqui.
Prove que gera o resultado correto para os 100 itens necessários.
Codificado (
115110 bytes ):Experimente online.
Indexado a 0
-9 e -5 bytes graças a @Nevay .
-24 bytes graças a @ceilingcat .
Você pediu ..;)
O Java é interno
Math.PI
eMath.E
é duplo, que tem uma precisão máxima de apenas 16. Portanto, teremos que calcular os dois valores usandojava.math.BigInteger
e / oujava.math.BigDecimal
.Como já calculei o PI antes em outro desafio , usei o mesmo código usando
BigInteger
. O algoritmo para o número de Euler usaBigDecimal
no entanto.O resultante
p
ee
são, portanto:31415...
e2.718...
.Provavelmente poderia jogar golfe usando apenas
BigDecimal
, mas estava dando algumas respostas incorretas para o PI, então agora uso ambosBigDecimal
eBigInteger
.Explicação:
fonte
(d+=2)
para++d
ereturn p%10+1
para apenasreturn p%10
.You've asked for it.. ;)
Ei, eu gosto mais do seu primeiro. Eu tenho muito mais respostas do que eu esperava codificado ...charAt(n+1>>1)
e 5 bytes na versão codificada usando uma referência de método"..."::charAt
.Semente , 6015 bytes
A Semente equivalente à minha resposta Befunge. Como mencionei lá, o programa Befunge que essa saída não funciona no TIO porque o TIO parece ter quebra de linha interna com 80 caracteres.
fonte
Excel, 113 bytes
Indexado 1
PI()
é preciso apenas até 15 dígitos. Semelhante paraEXP(1)
.Solução de60bytes de60bytes que funciona para entrada<=30
(-18 bytes graças a @Adam)fonte
if(...)
comunicado:=MID(IF(ISODD(b1),PI(),EXP(1)/10)/10,b1/2+3,1)
.Can't contornar a imprecisão dospi()
eexp()
, embora05AB1E , 13 bytes
Experimente online!
Semelhante à resposta do Magic, mas meio diferente.
Explicação:
fonte
Python 2 + SymPy ,
7063 bytesExperimente online!
fonte
Japonês , 55 bytes
Teste online! Contém alguns não imprimíveis.
Funciona substituindo cada caractere na cadeia de caracteres por seu código e retornando o dígito no índice correto. A string foi gerada por este programa:
Teste online!
fonte
Julia, 63 bytes
Indexado 1
Converte pi ou e em uma seqüência de caracteres, remove a casa decimal e chama o dígito apropriado. Retorna uma representação de caractere do dígito.
fonte
Semente,
58525794Baseado na resposta TehPers Befunge.
fonte
Malbolge Unshackled (variante de rotação de 20 trit), 3,64E6 bytes
O tamanho desta resposta excede o tamanho máximo do programa postável (eh), portanto, o código está localizado no meu repositório GitHub (nota: não copie o código usando CTRL + A e CTRL + C, basta clicar com o botão direito e clicar em "Salvar elemento de destino como. .. ").
Como executar isso?
Isso pode ser uma parte complicada, porque o intérprete ingênuo de Haskell levará anos e anos para executá-lo. O TIO possui um intérprete decente do Malbogle Unshackled, mas, infelizmente, não poderei usá-lo (limitações).
O melhor que eu pude encontrar é a variante fixa de largura de rotação de 20 trit, que executa muito bem, calculando (praticamente) instantaneamente .
Para tornar o intérprete um pouco mais rápido, removi todas as verificações do interpretador Malbolge Unshackled de Matthias Lutter.
fonte
05AB1E , 14 bytes
Experimente online!
Esta resposta é indexada em 0.
fonte
'.K
aþ
e retire a<
. (Não sei por que você ainda incluiu o<
, uma vez que você indicar a sua resposta é 0-indexados Sua resposta atual é 1-indexados com o.<
.),
desde o zip faz isso implicitamente, mas eu vejo é que quase exatamente o mesmo que a outra resposta de 10 bytes ..Python 3 + SymPy , 109 bytes
0-indexado Experimente online!
Bata a codificação por 5 bytes !! Mas provavelmente poderia ser melhor. Mas vencer a codificação me faz sentir bem :)
fonte
Pitão, 35 bytes
Suíte de teste
Como Pyth não possui constantes pi e e de precisão arbitrária integradas, eu as calculo diretamente.
Calculando pi:
Isto usa o seguinte recorrência continuou fração de pi computação:
2 + 1/3*(2 + 2/5*(2 + 3/7*(2 + 4/9*(2 + ...))))
. Eu peguei de outra resposta PPCG . É derivado nas equações 23-25 aqui .Eu o calculo de dentro para fora, omitindo todos os termos além do 1024, pois os termos posteriores têm pouco efeito sobre o número e mantenho 99 dígitos de precisão para garantir que os 50 primeiros estejam corretos.
Calculando e:
Soma os recíprocos dos primeiros 1024 números, com 99 dígitos de precisão.
Em seguida, converto ambos os números em seqüências de caracteres, os entrelaço e indexo.
fonte
MATLAB, 93 bytes
Uma explicação simples é que isso primeiro converte e e pi em strings, depois passa por um loop for concatenando os dígitos. Aqui, c é torta, p é pi e e é e.
Também dividi isso em várias linhas para facilitar a leitura, mas o código real está todo em uma linha com espaçamento mínimo.
fonte
n
, ele produza onth
dígito da sequência Pie. Você também pode reduzir seu número de bytes, reduzindo os nomes de variáveis para um único caractereinput('')
no lugar deinput('n')
C # + BigDecimal ,
377372 bytesGuardado 5 bytes graças a @Kevin Cruijssen.
Nenhum link TIO por causa da biblioteca externa, infelizmente, o C # não possui uma
BigDecimal
classe incorporada, portanto, essa externa precisará fazer. Provavelmente ainda é possível jogar golfe, mas não há tempo no momento.Versão completa / formatada:
fonte
x[j++]/e
emc=(x[j++]/e)*n
-2 bytes; Além disso, acho que você pode remover os dois+""
nas duas instruções de retorno e retornar um int em vez de string e, em seguida, adicionar-48
na segunda instrução de retorno para converter char em saída int (para -1 byte).Python 2 , 82 bytes
Experimente online!
Contém alguns caracteres ASCII não imprimíveis. flornquake salvou dois bytes.
fonte
lambda n:('%02d'%ord('...'[n/2]))[n%2]
, embora provavelmente haja algo melhor.brainfuck , 402 bytes
Experimente online!
Insira como código de caractere (por exemplo, "A" = 65)
Experimente online com entrada de dígitos!
código:
fonte
Neim , 45 bytes
neim não é feito para números decimais
Experimente online!
fonte
Befunge , 105 bytes
Não funciona no TIO porque parece envolver linhas internamente em 80 caracteres por algum motivo. Você pode fazê-lo funcionar no TIO colocando cada dígito em uma nova linha e tendo o
&0g,@
depois o3
na primeira linha.fonte
JavaScript (ES6) + mathjs , 78 bytes
Zero indexado e funciona até 128 números (entrada máxima de 127).
Snippet de teste
fonte
MATLAB (com caixa de ferramentas simbólica),
8982 bytesAo usar a Symbolic Toolbox, esta resposta fornece uma saída sem codificar os valores de pi e e.
Como um bônus divertido, esse código como entrada pode receber um único índice ou uma matriz de índices e fornecerá simultaneamente o valor de saída para todos os valores de índice fornecidos (por exemplo, fornecer 1:10 produzirá os 10 primeiros valores).
(novas linhas adicionadas para facilitar a leitura, não necessárias para execução e não incluídas na contagem de bytes)
Infelizmente, a versão Octave usada pelo TIO não suporta entradas simbólicas para o
vpa
função, portanto, não pode fornecer no link TIO.No MATLAB, a indexação no vetor de retorno de uma função não é possível da mesma maneira que no Octave, o que significa que este é um programa completo e não apenas uma função anônima. O programa solicitará uma entrada
n
durante a execução - este é um valor indexado para o qual o elemento é necessário. No final do programa, o valor é impresso implicitamente.Para o programa, usamos a
vpa
função que fornece a 51 casas decimais o valor depi
eexp(1)
(e). Isso é feito simbolicamente para permitir precisão teoricamente infinita. Para expandir para mais de 100 elementos, basta aumentar o valor51
no código para aumentar o intervalo.A quebra
vpa
de linhachar
(iechar(vpa(...))
) é necessária para converter a saída da função em uma cadeia de caracteres, em vez de um valor simbólico. A saída resultante é a sequência:Isso inclui e e pi com 51 casas decimais - o suficiente para permitir 100 dígitos de nossa saída (precisamos fazer um pouco de dp extra do que o necessário para evitar a impressão de valores arredondados)
Para indexar essa bagunça, precisamos pelo menos nos livrar dos pontos decimais, para que ambas as seqüências de dígitos sejam contíguas. Originalmente, usei uma substituição simples de regex de qualquer coisa que não seja um dígito com nada. No entanto, eu posso salvar 7 bytes, apenas me livrando do ponto decimal usando o código:
string resultante é agora:
Ele contém todos os dígitos que precisamos com os fragmentos pi e e em índices consecutivos.
Podemos então converter o índice fornecido de forma que números ímpares acessem o fragmento pi e números pares acessem o fragmento e usando o cálculo:
Acessar esse índice (índices) na sequência acima fornecerá a saída correta.
fonte
Axioma, 148 bytes
Matriz baseada em 0. Resultados
fonte
Planilhas Google, 47 bytes
Função de planilha anônima que recebe entrada da célula
A1
e gera esse dígito de pizza para a célula que está chamandoVersão codificada, 112 bytes
Esta versão atende totalmente às especificações do programa, mas geralmente não é divertida.
Função de planilha anônima que retorna o enésimo dígito na lista de torta indexada em 1
fonte
BFASM , 142 bytes
Recebe a entrada como caractere ascii, fornece a saída em forma de dígito.
fonte