GolfScript, 59 caracteres
~:N..*.,2>{:P{(.P\%}do(!},{{N-.*}$0=}:C~[1.{.@+.N<}do]C+++4/
Este script não atende a alguns dos requisitos:
- Funciona apenas corretamente para entradas
n >= 2
, caso contrário, trava.
- A saída é truncada para um número inteiro.
- Desempenho terrível para qualquer moderadamente grande
n
Uma breve explicação passo a passo do código:
~:N..*
A entrada é armazenada em N e pressionamos ambos n
e o quadrado n*n
imediatamente.
.,2>
Geraremos uma lista de números primos filtrando a matriz [2..n*n]
. Usamos nosso cálculo anterior n*n
como um limite superior (muito ruim!) Para encontrar um primo maior que n.
{:P{(.P\%}do(!},
Nossa matriz anterior é filtrada por divisão de teste. Cada número inteiro P é testado em relação a todo número inteiro [P-1..1].
{{N-.*}$0=}:C~
Classifica a matriz anterior com base na distância n
e agarra o primeiro elemento. Agora temos o primo mais próximo.
[1.{.@+.N<}do]C
Geramos Fibonnacis até obter um maior que n
. Felizmente, esse algoritmo controla naturalmente a Fibonnaci anterior, portanto, nós os lançamos em uma matriz e usamos nosso tipo de distância anterior. Agora temos a Fibonnaci mais próxima.
+++4/
Média. Observe que o GolfScript não tem suporte para carros alegóricos, portanto, o resultado é truncado.
GolfScript, 81 caracteres
Aqui está uma variante que atende a todos os requisitos.
~:N..*2N*,3,|2,^{:P{(.P\%}do(!},{{N-.*}$0=}:C~[0.1{.@+.N<}do]C+++100:E*4/.E/'.'@E%
Para garantir um comportamento adequado n<2
, evito 2<
(trava quando a matriz é pequena) e uso 3,|2,^
. Isso garante que a matriz de candidatos principais seja exatamente [2]
quando n < 2
. Mudei o limite superior para o próximo primo de n*n
para 2*n
( postulado de Bertrand ). Além disso, 0 é considerado um número de Fibonnaci. O resultado é calculado em matemática de ponto fixo no final. Curiosamente, parece que o resultado está sempre em quartos (0, 0,25, 0,5, 0,75), então espero que 2 casas decimais de precisão sejam suficientes.
Minha primeira tentativa de usar o GolfScript, tenho certeza de que há espaço para melhorias!