fundo
Os meios metálicos , começando com a famosa média dourada , são definidos para todo número natural (número inteiro positivo), e cada um é uma constante irracional (possui uma expansão decimal infinita não recorrente).
Para um número natural , a média metálica é a raiz de uma equação quadrática
As raízes são sempre
mas a média metálica é geralmente dada como a raiz positiva. Portanto, para esta questão, será definido por:
Para o resultado é a famosa proporção áurea:
Desafio
Seu código deve receber 2 entradas: nep (a ordem não é importante desde que seja consistente)
- n é um número natural que indica qual média metálica
- p é um número natural que indica quantas casas decimais de precisão
Seu código deve gerar a enésima média metálica até p casas decimais de precisão.
Validade
Seu código é válido se funcionar com valores de n ep de 1 a 65.535.
Você deve gerar um decimal no formato
dígito (s) .dígito (s) (sem espaços)
Por exemplo, a média de ouro com 9 casas decimais é
1.618033988
Exiba o último dígito sem arredondamento, como apareceria em uma expansão decimal mais longa. O próximo dígito na média de ouro é 7, mas os 8 finais no exemplo não devem ser arredondados para 9.
O número de dígitos decimais deve ser p, o que significa que quaisquer zeros à direita também devem ser incluídos.
Respostas do formulário
não são válidos - você deve usar uma expansão decimal.
Você pode gerar até 1 nova linha inicial e até 1 nova linha final. Você não pode imprimir nenhum espaço ou qualquer outro caractere além dos dígitos e do ponto único / ponto final / período.
Ponto
Este é o código padrão de golfe: sua pontuação é o número de bytes no seu código.
Entre os melhores
(Usando o snippet do cabeçalho de Martin )
R, 116 bytes
Isso lê dois números inteiros de STDIN e imprime o resultado em STDOUT. Você pode experimentá-lo online .
Ungolfed + explicação:
Se você não tiver a
Rmpfr
biblioteca instalada, poderáinstall.packages("Rmpfr")
e todos os seus sonhos se tornarão realidade.fonte
Mathematica, 50 bytes
Define uma função anônima que leva
n
ep
em ordem. Eu usoFloor
para evitar o arredondamentoSetAccuracy
, o que eu preciso para obter uma saída decimal.fonte
p>15
.CJam, 35 bytes
Lê p primeiro e depois n .
Experimente online no intérprete CJam .
Como funciona
Simplesmente calculamos a fórmula da pergunta para n × 10 p , obtemos a parte inteira e fracionária do resultado dividida por 10 p , preenchemos a parte fracionária com zeros à esquerda para obter dígitos p e imprima as partes separadas por um ponto.
fonte
Python 2, 92 bytes
Como agora estou olhando para as respostas, parece que a resposta CJam usa o mesmo método básico como este. Calcula a resposta
n*10**p
e depois adiciona o ponto decimal. É incrivelmente ineficiente devido ao modo como calcula a parte inteira da raiz quadrada (basta adicionar 1 até chegar lá).fonte
PHP,
8578 bytesEle usa a extensão matemática BC Math que, em alguns sistemas, não pôde estar disponível. Ele precisa ser incluído no tempo de compilação , especificando a
--enable-bcmath
opção de linha de comando. Está sempre disponível no Windows e parece que também está incluído na versão PHP que acompanha o OSX.Atualização :
Eu apliquei todos os hacks sugeridos pelo @blackhole em seus comentários (obrigado!), Depois apertei a inicialização
$n
no seu primeiro uso (mais 3 bytes salvos) e agora o código se encaixa em uma única linha na caixa de código acima.fonte
echo
, apenas deixe um espaço depois dele.bcscale
retornartrue
, você pode usar$n=$argv[bcscale($argv[2])];
e salvar mais 2 bytes.bcpow($n,2)
vez debcmul($n,$n)
economizar 1 byte.J, 27 bytes
Explicação:
Chame assim:
Outra solução um pouco mais fria:
Que calcula as raízes do polinômio x ^ 2 - nx - 1. Infelizmente, a maneira como J formata o resultado torna a recuperação da raiz desejada um pouco mais longa.
fonte