Esse é um problema de matemática que coloca muitas coisas em questão, tornando-o bastante desafiador e, como você deve ter adivinhado, é um código de golfe, portanto deve ser o mais curto possível.
A entrada , n
, é qualquer número inteiro número (deve pelo menos inteiros de suporte, mas não necessita de ser limitado a). A saída é a média de:
n
- A praça de
n
- O número primo mais próximo de
n
- O número mais próximo
n
na sequência de Fibonacci
Logo, o programa deve imprimir para a saída padrão canalizar o resultado de (n+(n*n)+closestPrime(n)+closestFib(n))/4
.
Você não precisa se preocupar com possíveis estouros, etc. A precisão normal do ponto flutuante também é boa.
A maneira como a entrada é fornecida é totalmente sua. O programa mais curto (em caracteres) vence, como sempre no código de golfe.
Caso ocorra um empate ao procurar o mais próximo, escolha uma das seguintes opções:
- Ir para cima
- Descer
- Escolha um aleatoriamente
Respostas:
Python 160 Chars
Uma pequena explicação sobre a parte mais próxima da Fib:
fonte
[b,a][2*N-a-b<0]
:)GolfScript, 59 caracteres
Este script não atende a alguns dos requisitos:
n >= 2
, caso contrário, trava.n
Uma breve explicação passo a passo do código:
~:N..*
A entrada é armazenada em N e pressionamos ambosn
e o quadradon*n
imediatamente..,2>
Geraremos uma lista de números primos filtrando a matriz[2..n*n]
. Usamos nosso cálculo anteriorn*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âncian
e agarra o primeiro elemento. Agora temos o primo mais próximo.[1.{.@+.N<}do]C
Geramos Fibonnacis até obter um maior quen
. 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.
Para garantir um comportamento adequado
n<2
, evito2<
(trava quando a matriz é pequena) e uso3,|2,^
. Isso garante que a matriz de candidatos principais seja exatamente[2]
quandon < 2
. Mudei o limite superior para o próximo primo den*n
para2*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!
fonte
JavaScript, 190
[257]
Descomprimido:
fonte
a=0
e aumentar positivamente. Em vez de verificarisPrime
paraa
eb
, basta verificarisPrime(n+a)
eisPrime(n-a)
. Você provavelmente poderia misturar tudo em uma declaração ternária louca, mas eu sou péssimo com javascript.function closestPrime(n,o){return isPrime(n+o)?n+o:isPrime(n-o)?n-o:closestPrime(n,o+1);}
. Chame-o comoclosestPrime(n,0)
e vai funcionar por si só. Encurte conforme necessário.Mathematica,
7069 bytesUm byte economizado graças ao Sp3000 (às vezes, os embutidos não são o melhor caminho a percorrer).
Isso define uma função sem nome que pega um número inteiro e produz a média exata como um número racional. No caso de empates, é escolhido o menor número primo / Fibonacci.
Isso é muito ineficiente para entradas grandes, porque na verdade gera os primeiros
2n
números primos e números de Fibonacci antes de escolher o mais próximo.fonte
#&@@#
.. Hã?#
é o argumento de uma função pura (def
). Nesse caso, é realmente uma função em si, já quef
é aplicada aPrime
eFibonacci
. Portanto, isso#@Range@...
aplica a função fornecida a cada número inteiro no intervalo. Então#&@@
é apenas uma maneira de extrair o primeiro elemento de uma lista. Ele funciona aplicando#&
à lista, que é uma função que apenas retorna seu primeiro argumento.Q, 119
Não é o mais eficiente.
fonte
MATLAB 88 Chars
n é o seu número inteiro
Funciona com números não inteiros, tanto quanto eu testei, também funciona com números muito grandes, também é muito rápido.
fonte
Scala 299
Teste e invocação:
A pergunta fala sobre,
any Integer
mas o problema não é tão interessante para valores abaixo de 0. No entanto - como começamos? A 0? Em 1? E qual é o próximo primo para 11? 11 em si?A idéia de permitir o próximo maior ou menor em caso de empate é ruim, porque dificulta a comparação desnecessária. Se seus resultados diferirem, eles podem ter escolhido a outra mentira, a outra prima, a outra mentira e a outra mentira, ou a sua está errada, ou o resultado da outra pessoa está errado, ou é uma combinação: escolha diferente, mas errado, embora, talvez ambos errado.
fonte