Este es un problema matemático que cuestiona muchas cosas, lo que lo hace bastante desafiante y, como habrás adivinado, es un código de golf, por lo que también debe ser lo más corto posible.
La entrada , n
es cualquier número entero (al menos debe ser compatible con enteros, pero no debe limitarse a). La salida es el promedio de:
n
- El cuadrado de
n
- El número primo más cercano a
n
- El número más cercano a
n
en la secuencia de Fibonacci
En breve, el programa debe imprimir en el canal de salida estándar el resultado de (n+(n*n)+closestPrime(n)+closestFib(n))/4
.
Usted no tiene que preocuparse por posibles desbordamientos etc. normal coma flotante de precisión es también aceptable.
La forma en que se proporciona la entrada depende completamente de usted. El programa más corto (en caracteres) gana, como siempre con los códigos de golf.
En caso de que se produzca un empate cuando esté buscando el más cercano, elija una de las siguientes opciones:
- Subir
- Bajar
- Elige uno al azar
Respuestas:
Python 160 Chars
Una pequeña explicación sobre la parte de fibra más cercana:
fuente
[b,a][2*N-a-b<0]
:)GolfScript, 59 caracteres
Este script no cumple algunos de los requisitos:
n >= 2
, de lo contrario se bloquea.n
Un breve tutorial del código:
~:N..*
La entrada se almacena en N, y empujamos ambosn
y el cuadrado den*n
inmediato..,2>
Generaremos una lista de números primos filtrando la matriz[2..n*n]
. Utilizamos nuestro cálculo anterior den*n
como un límite superior (¡muy malo!) Para encontrar un primo mayor que n.{:P{(.P\%}do(!},
Nuestra matriz anterior se filtra por división de prueba. Cada entero P se prueba contra cada entero [P-1..1].{{N-.*}$0=}:C~
Ordena la matriz anterior en función de la distancian
y toma el primer elemento. Ahora tenemos el primo más cercano.[1.{.@+.N<}do]C
Generamos Fibonnacis hasta obtener uno mayor quen
. Afortunadamente, este algoritmo hace un seguimiento natural de Fibonnaci anterior, por lo que los colocamos en una matriz y usamos nuestra clasificación de distancia anterior. Ahora tenemos el Fibonnaci más cercano.+++4/
Promedio. Tenga en cuenta que GolfScript no tiene soporte para flotantes, por lo que el resultado se trunca.GolfScript, 81 caracteres
Aquí hay una variante que cumple con todos los requisitos.
Para garantizar un comportamiento adecuado
n<2
, evito2<
(se bloquea cuando la matriz es pequeña) y en su lugar la uso3,|2,^
. Esto asegura que la matriz de candidatos principales sea justo[2]
cuandon < 2
. Cambié el límite superior para la próxima prima den*n
a2*n
( postulado de Bertrand ). Además, 0 se considera un número de Fibonnaci. El resultado se calcula en matemáticas de punto fijo al final. Curiosamente, parece que el resultado siempre está en cuartos (0, .25, .5, .75), por lo que espero que sean suficientes 2 decimales de precisión.Mi primer intento de usar GolfScript, ¡estoy seguro de que hay margen de mejora!
fuente
JavaScript, 190
[257]
Sin comprimir:
fuente
a=0
e incrementa positivamente. En lugar de comprobarisPrime
paraa
yb
, sólo comprobarisPrime(n+a)
yisPrime(n-a)
. Probablemente podría mezclarlo todo en una declaración ternaria loca, pero soy terrible con javascript.function closestPrime(n,o){return isPrime(n+o)?n+o:isPrime(n-o)?n-o:closestPrime(n,o+1);}
. Llámalo comoclosestPrime(n,0)
y se resolverá solo. Acortar según sea necesario.Mathematica,
7069 bytesUn byte guardado gracias a Sp3000 (a veces, las funciones integradas no son la mejor opción).
Esto define una función sin nombre que toma un número entero y produce la media exacta como un número racional. En el caso de los empates, se elige el número primo / Fibonacci más pequeño.
Esto es muy ineficiente para entradas grandes, porque en realidad genera los primeros
2n
números primos y los números de Fibonacci antes de elegir el más cercano.fuente
#&@@#
.. eh?#
es el argumento de una función pura (def
). En este caso, en realidad es una función en sí misma, ya quef
se aplica aPrime
yFibonacci
. Entonces eso#@Range@...
aplica la función dada a cada número entero en el rango. Entonces#&@@
es solo una forma de golf para extraer el primer elemento de una lista. Funciona aplicando#&
a la lista, que es una función que simplemente devuelve su primer argumento.Q, 119
No es el más eficiente.
fuente
MATLAB 88 Chars
n es tu número entero
Funciona con números no enteros, por lo que he probado, también funciona con números muy grandes, también se ejecuta bastante rápido.
fuente
Scala 299
Prueba e invocación:
La pregunta habla
any Integer
pero el problema no es tan interesante para valores inferiores a 0. Sin embargo, ¿cómo comenzamos? A 0? ¿A la 1? ¿Y cuál es el próximo prime para 11? 11 en sí?La idea de permitir el próximo más grande o más bajo en caso de empate es mala, porque dificulta la comparación innecesaria. Si sus resultados difieren, pueden haber elegido el otro fib, el otro primo, el otro fib y el otro primo, o los suyos son incorrectos, o el resultado de la otra persona es incorrecto, o es una combinación: opción diferente, pero mal aunque, quizás ambos mal.
fuente