C'est un problème mathématique qui remet en question beaucoup de choses, ce qui le rend plutôt difficile, et comme vous l'avez peut-être deviné, c'est un golf de code, donc il devrait être aussi court que possible.
L' entrée , n
est un nombre entier (devrait au moins prendre en charge les entiers, mais ne doit pas être limité à). La sortie est la moyenne de:
n
- Le carré de
n
- Le nombre premier le plus proche de
n
- Le nombre le plus proche de
n
dans la séquence de Fibonacci
Peu de temps, le programme devrait imprimer sur la sortie standard canal le résultat de (n+(n*n)+closestPrime(n)+closestFib(n))/4
.
Vous n'avez pas à vous soucier des débordements possibles, etc. La précision normale en virgule flottante est également correcte.
La façon dont l'entrée est donnée dépend entièrement de vous. Le programme le plus court (en caractères) gagne, comme toujours avec les golfs à code.
Dans le cas où une égalité se produit lorsque vous recherchez le plus proche, choisissez l'une des options suivantes:
- Monter
- Descendre
- Choisissez-en un au hasard
Réponses:
Python 160 caractères
Une petite explication sur la partie Fib la plus proche:
la source
[b,a][2*N-a-b<0]
:)GolfScript, 59 caractères
Ce script ne remplit pas certaines des conditions:
n >= 2
, sinon il se bloque.n
Une brève procédure pas à pas du code:
~:N..*
L'entrée est stockée dans N, et nous poussons les deuxn
et le carrén*n
tout de suite..,2>
Nous allons générer une liste de nombres premiers en filtrant le tableau[2..n*n]
. Nous utilisons notre calcul précédentn*n
comme limite supérieure (très mauvaise!) Pour trouver un nombre premier supérieur à n.{:P{(.P\%}do(!},
Notre tableau précédent est filtré par division d'essai. Chaque entier P est testé contre chaque entier [P-1..1].{{N-.*}$0=}:C~
Trie le tableau précédent en fonction de la distancen
et capture le premier élément. Nous avons maintenant le nombre premier le plus proche.[1.{.@+.N<}do]C
Nous générons Fibonnacis jusqu'à ce que nous obtenions un supérieur àn
. Heureusement, cet algorithme garde naturellement la trace de la Fibonnaci précédente, nous les jetons donc tous les deux dans un tableau et utilisons notre tri par distance antérieur. Nous avons maintenant la Fibonnaci la plus proche.+++4/
Moyenne. Notez que GolfScript ne prend pas en charge les flottants, donc le résultat est tronqué.GolfScript, 81 caractères
Voici une variante qui répond à toutes les exigences.
Pour garantir un comportement correct pour
n<2
, j'évite2<
(se bloque lorsque le tableau est petit) et j'utilise à la place3,|2,^
. Cela garantit que le premier tableau de candidats est juste au[2]
momentn < 2
. J'ai changé la limite supérieure pour le prochain premier den*n
la2*n
( postulat de Bertrand ). De plus, 0 est considéré comme un nombre de Fibonnaci. Le résultat est calculé en mathématiques à virgule fixe à la fin. Fait intéressant, il semble que le résultat soit toujours en quart (0, 0,25, 0,5, 0,75), donc j'espère que 2 décimales de précision sont suffisantes.Ma première fissure à utiliser GolfScript, je suis sûr qu'il y a place à amélioration!
la source
JavaScript, 190
[257]
Non compressé:
la source
a=0
et incrémentez positivement. Au lieu de vérifierisPrime
poura
etb
, il suffit de cocherisPrime(n+a)
etisPrime(n-a)
. Vous pourriez probablement tout écraser en une seule déclaration ternaire folle, mais je suis terrible avec javascript.function closestPrime(n,o){return isPrime(n+o)?n+o:isPrime(n-o)?n-o:closestPrime(n,o+1);}
. Appelez-le comme çaclosestPrime(n,0)
et ça marchera. Raccourcissez au besoin.Mathematica,
7069 octetsUn octet sauvé grâce au Sp3000 (parfois les intégrés ne sont pas la meilleure solution).
Ceci définit une fonction sans nom prenant un entier et produisant la moyenne exacte comme un nombre rationnel. En cas d'égalité, le plus petit nombre premier / Fibonacci est choisi.
Ceci est très inefficace pour les entrées de grande taille, car il génère en fait les premiers
2n
nombres premiers et Fibonacci avant de choisir le plus proche.la source
#&@@#
.. Hein?#
est l'argument d'une fonction pure (def
). Ce cas, c'est en fait une fonction elle-même, puisqu'ellef
est appliquée àPrime
etFibonacci
. Cela#@Range@...
applique donc la fonction donnée à chaque entier de la plage. Il ne#&@@
s'agit alors que d' une manière golfée d'extraire le premier élément d'une liste. Il fonctionne en appliquant#&
à la liste, qui est une fonction qui renvoie simplement son premier argument.Q, 119
Pas le plus efficace.
la source
MATLAB 88 caractères
n est votre entier
Fonctionne avec des non entiers, pour autant que je l'ai testé, il fonctionne également avec de très grands nombres, fonctionne très vite aussi.
la source
Scala 299
Test et invocation:
La question parle
any Integer
mais le problème n'est pas si intéressant pour les valeurs inférieures à 0. Cependant - comment commencer? À 0? À 1? Et quelle est la prochaine prime pour 11? 11 lui-même?L'idée d'autoriser le prochain plus grand ou plus bas en cas d'égalité est mauvaise, car cela rend la comparaison inutile. Si vos résultats diffèrent, ils peuvent avoir choisi l'autre fib, l'autre prime, l'autre fib et l'autre prime, ou le vôtre est faux, ou le résultat de l'autre personne est faux, ou c'est une combinaison: choix différent, mais mal bien, peut-être les deux mal.
la source