Considere três seqüências numéricas A
, B
e C
:
A
: Uma sequência baseada em relações de recorrênciaf(n) = f(n-1)+f(n-2)
, começando comf(1) = 3, f(2) = 4
. Então, a sequência começa assim:3 4 7 11 18 29 47 76 ...
B
: Os números compostos , ou seja, todos os números inteiros que não são números primos (ou 1):4 6 8 9 10 12 14 15 16 ...
C
: Os dígitos do Pi:3 1 4 1 5 9 2 6 5 ...
Dado um número inteiro positivo N < 50
, como argumento da função ou STDIN, retorne o valor decimal da fração A(N)/B(N)
com C(N)
dígitos após o ponto decimal. Aplicam-se regras normais para arredondamento (arredondar para cima se o dígito N + 1'th for 5 ou superior). Se o enésimo dígito de pi
for zero, um número inteiro deve ser impresso. notação científica / formulário padrão é aceito para números maiores que 1000.
Isso é código de golfe, então a resposta mais curta em bytes vence.
Alguns exemplos:
N = 1: 0.750
N = 2: 0.7
N = 3: 0.8750
N = 4: 1.2
N = 6: 2.416666667
N = 10: 11.056
N = 20: 764.8750
Obviamente, aplicam-se as regras padrão do código de golfe.
A função deve terminar em menos de dois minutos em qualquer laptop moderno.
C(n)
dígitos, precisamos incluir zeros à direita?N
? Se sim, até N = 49. Ou algo mais?Respostas:
Pitão,
605758 bytesEquipamento de teste
É bem simples - calcule pi, a série fibonacci e os compósitos, arredondados para dígitos C (n), preenchidos para dígitos C (n) mais a localização dos dígitos decimais, concluídos.
A):
hu,eGsGQjT7
B (n):
e.ftPZQ)
C (n):
e/u+/*GHhyHy^TQr99ZZT
60 -> 57: Limpou o caso especial n = 1 no cálculo pi.
57 -> 58: não estava usando precsão alta o suficiente para pi para toda a faixa de entrada - aumentou 99 iterações para 1000 iterações.
Nota sobre o arredondamento: usa o sistema de arredondamento "mais próximo" do Python, em vez do sistema operacional "especificado para o infinito". No entanto, a diferença só importa se os dígitos imediatamente após o ponto de arredondamento forem
5000...
, por exemplo, 1,25 arredondados para 1 dígito. Eu verifiquei o intervalo de entrada, e isso nunca acontece, então o resultado correto é sempre retornado.fonte
PowerShell,
420 bytes (ayyyyyyyy)378 bytesObrigado a isaacg por salvar 41 bytes, por calcular como a pergunta é arredondada. Significa que eu não precisava incluir o horrendo
[MidpointRounding]::AwayFromZero
e não precisava explicitamente escalar como a[double]
.Este foi muito divertido!
Expandido:
A recursão no PowerShell é ... lenta, digamos, então precisamos construir
A(N)
a outra direção e armazená-la em uma matriz e depois indexá-la.VELHO
Além disso, vaca sagrada, os requisitos de saída acabaram com isso. O PowerShell usa como padrão o arredondamento para o arredondamento a / k / a do banqueiro mais próximo, o que exige a utilização de detalhes extraordinários
[MidpointRounding]::AwayFromZero
para alternar os estilos de arredondamento . Além disso, precisamos preencher os zeros à direita, se houver. Esses dois requisitos combinados para transformar o último par de linhas de 20 bytes[math]::Round($r,$q)
para 102 bytes (do$s=""
para+$s)
) ... uau.fonte
[MidpointRounding]::AwayFromZero
sozinho é quase demasiado bom / mau para ser verdade ... =)Javascript (ES6), 302 bytes
Uma palavra: inacabada.
Os primeiros 49 dígitos de pi são armazenados em uma sequência e as outras duas seqüências são geradas automaticamente. Isso foi jogado no meio do caminho; Tenho (quase) certeza de que poderia extrair outros 50 bytes dele.
Funciona para todos os casos de teste e deve funcionar para o resto. Falha em algo maior que 49 ou menor que 0 (nunca deve encontrar essas situações de qualquer maneira). Eu gosto especialmente do resultado para 0:
fonte
Oitava,
276236 bytesAntes de tudo, achei que seria legal usar alguma precisão ilimitada nessas ferramentas matemáticas (e atualizar algum conhecimento sobre isso), então comecei a escrever alguns algoritmos e depois finalmente descobri que o
pi
valor não é tão preciso que eu terá que usar a matriz novamente. Então, novamente, sem grande sucesso:Ainda bem legível, não é?
Uso
função copiar-colar na oitava, chamar função
c
com argumento do valor necessário:Otimizações:
endif
,endfor
e semelhante comend
o que funciona da mesma maneirai
em um, salvar um bytenum2str(str2num(p(A)))
absurdo :)fonte
end
, nãoendif
, tantos bytes salvos. Se você também acontecer de ter a caixa de ferramentas simbólico para MATLAB, você pode usarvpa
para obter pontos decimais suficientes para pi:vpa(sym(pi),49)
. Eu não o tenho neste laptop, então não tenho certeza sesym
é necessário, mas deve salvar alguns bytes de qualquer maneira =) E legível não é necessariamente uma coisa boa no código golf =)while
deendwhile
e obras semelhantes bem, então eu estou atualizando a resposta com alguns personagens menos :)