Un homme des étoiles est venu sur Terre! Heureusement, le président des États-Unis, Donald Trump, a un dé à l'infini. En utilisant ce dé, il peut créer un numéro que vous , le maire de Podunk , devrez utiliser pour déterminer qui doit être envoyé pour arrêter l'envahisseur! Mais attention, vous ne pouvez envoyer qu'un nombre limité d'octets au dos de votre grenouille !
Étant donné une entrée utilisateur (qui sera un entier positif), vous devez renvoyer une chaîne en fonction de la catégorie dans laquelle se trouve le nombre.
- Si le nombre est un nombre de Fibonacci , vous devez générer Ness .
- Si le nombre est un nombre Lucas , vous devez sortir Lucas .
- Si le numéro est à la fois un numéro Lucas et un numéro Fibonacci , vous devez générer Travis .
- Si le numéro n'est ni un numéro Lucas ni un numéro Fibonacci , vous devez sortir Pippi .
Exemples
Voici un tas de cas de test:
1 => Travis 2 => Travis 3 => Travis 4 => Lucas 5 => Ness 6 => Pippi 7 => Lucas 8 => Ness 610 => Ness 722 => Pippi 843 => Lucas
Règles
- C'est code-golf , la réponse la plus courte en octets gagne.
- Votre programme peut être un programme complet ou une fonction (n anonyme).
Bonus
Il y a quelques bonus que vous pouvez utiliser pour aider votre grenouille à transmettre les données au président Trump plus rapidement:
- Pour les
-15
octets: si le nombre entré est2016
, vous devez sortirTrump
, car il est au sommet de sa présidence.
0, 1
tandis que d'autres commencent par1, 1
, je crois que cela dépend de la définition que vous utilisez. Il n'est pas rare de voir les numéros Lucas commencer par2, 1
exemple, par exemple OEIS a les deux versions ( 1 , 2 ), mais celle commençant par 2 correspond à la phase de définition.Réponses:
Pyth, 59 - 15 = 44 octets
ou 42 octets après la correction d'un bogue
Hexdump:
Les deux premiers caractères (
&Q
) sont nécessaires en raison d’un bogue d’analyse Pyth qui échoueQ
après."
. Le correctif a été appliqué. Si l'interpréteur post-correctif est autorisé, -2 octets.Sans compression de chaîne illisible:
Pyth, 63 - 15 = 48 octets
49 octets sans atout
Suite de tests
Assez simple, il suffit de générer les séquences, de les dupliquer et de vérifier leur appartenance.
Les séquences sont générées en commençant par
[1, 2]
et[2, 1]
, puis en appliquant la règle de fibonacci.la source
Julia,
146142121120 octetsCela crée une fonction sans nom qui renvoie un booléen. Pour l'appeler, donnez-lui un nom, par exemple
f=n->...
.Ungolfed:
Correction d'un problème et enregistrement de 7 octets grâce à Glen O!
la source
Mathematica
143156 - 15 (bonus) = 141 octetsAvec 2 octets sauvegardés grâce à LegionMammal978.
la source
False
etTrue
peuvent être remplacés par1<0
et1>0
respectivement.Mathematica,
9287 octetsInspiré par la réponse de Sp3000 .
la source
Python 2, 107
La clé est deux contrôles purement arithmétiques pour les nombres de Fibonacci et Lucas:
n
est un nombre de Fibonacci exactement si5*n*n+4
ou5*n*n-4
est un carré parfaitn
est un nombre Lucas exactement si5*n*n+20
ou5*n*n-20
est un carré parfaitCe site a des sketches .
La sortie dépend donc des valeurs de
5*n*n+i
fori
in{4,-4,20,-20}
. La fonctionf
teste une valeur dei
, en vérifiant si la valeur correspondante n'a pas de racine carrée de nombre entier.abs
y a juste là pour éviter une erreur de prendre la racine d'un négatif pourn=1, i=-20
.La fonction
f
prend la valeur du nombren
à tester à partir de STDIN. Python ne l’évalue qu’une fois, pas une fois par appel de fonction.Si le nombre n'est pas Fibonacci est évalué comme
f(4)*f(-4)
utilisant la conversion implicite booléen en nombre et de la même manière pour pas Lucas, et la chaîne correspondante est prise. Si les espaces de fin étaient autorisés, l'entrelacement des chaînes serait plus court.la source
Python 2, 117 octets
Pour la liste de chaînes, a
"Pippi Lucas Ness Travis".split()
la même longueur.la source
CJam,
585554 octetsUne approche naïve consistant à générer les nombres de Fibonacci et de Lucas, puis à compter les occurrences dans les deux cas, à convertir en binaire et à sélectionner la chaîne appropriée.
Essayez-le en ligne .
la source
Sérieusement, 69 octets
Avant ce défi, Sérieusement avait le construit
f
(index dans les nombres de Fibonacci, -1 sinon un nombre de Fibonacci) ... mais pas dans une liste ou "est dans la liste"! (Il a été ajouté depuisí
.)En conséquence, voici ce que je passe à chercher si l'entrée est un nombre de Fibonacci:
C'est ce que je passe à générer une liste de numéros Lucas:
Et voici ce que je passe à chercher si l'entrée est dans la liste des nombres de Lucas:
C'est une chaîne formatée à l'aide de la notation% Python en quelque chose comme
:610:=
, et convertie en une fonction, qui est ensuite mappée sur le tableau et sommée. (Les nombres Lucas sont uniques, la somme est toujours égale à 0 ou 1.)Merci à @Mego pour ce dernier bit avec le formatage de chaîne.
la source
Perl,
133(146-15 =) 131(144-15 =) 129(136-15 =) 121 octets+1 octet pour le
-n
drapeau.Avec des retours à la ligne après le point-virgule, par souci de lisibilité:
Démo:
Des trucs:
Vous pourriez vous demander pourquoi mes variables sont nommées$a
,$b
,$%
et$d
. C'est une excellente question! En fait, cela me permet de sauvegarder un octet.est un octet plus court que
Cela ne s'applique plus parce que j'ai modifié mon code en réarrangeant les choses, empêchant ainsi le changement de nom de variable de sauvegarder des octets. Je l'ai changé pour que les noms de variables aient à nouveau un sens.$_-2?$f+$l*2:3
est légèrement intéressant. En gros, je devais utiliser des cas particuliers2
pour les numéros Lucas, car mon programme vérifie si un numéro est un numéro Lucas après avoir "mis à jour" les numéros de Fibonacci et Lucas. Ainsi a2
été considéré un nombre non-Lucas$_-2?foo:bar
est un omble plus court que$_==2?bar:foo
. La même chose est utilisée pour le2016
test.Cela n’est plus vrai non plus parce que j’ai pu restructurer le programme de manière à ne pas exiger de cas spécial
2
. Mais j'utilise toujours$_-2016?stuff:Trump
au lieu de$_==2016?Trump:stuff
, qui est un octet de plus.En parlant de cela, vous vous demandez peut-être comment j'ai procédé à cette restructuration. Je viens de faire que le programme fasse 9 fois plus d'itérations que nécessaire, ce qui ne coûte que 2 octets (
*9
) mais me permet de faire des suppositions ailleurs qui aident le terrain de golf.Parce que les variables par défaut à zéro,
est plus court que
Perl supporte les mots nus, je n'ai donc pas besoin de citer mes chaînes (\ o /).
la source
-n
drapeau (comme indiqué dans la réponse).-n
drapeau?while(<>) { ... }
boucle autour de votre programme. Voir: docs Perl .Julia,
101 à100 octetsUngolfed:
la source
{}
syntaxe alternative pourAny[]
est obsolète; cela permettrait d'économiser quelques octets.Octave, 93 octets
Cette approche est similaire à ma réponse MATLAB à l'exception du fait qu'Octave vous permet d'indexer directement dans un nouveau tableau:
la source
MATL (non compétitif),
575554(67-15) = 52 octetsEssayez-le en ligne!
Explication
Encore une fois, logique similaire à mes autres réponses ici et ici .
la source
C ++ 11, 176 + 15 (#include) = 191
Ungolfed avec l'utilisation. Je peux ajouter une explication si demandé demain, gtg au lit maintenant!
la source
Javascript (ES6), 108 octets
Même fonction pour Fibonnacci et Lucas. C'est une fonction récursive qui prend les deux premières valeurs comme init.
la source
Java, 151 octets
Vous pourriez prétendre que Trump n'externaliserait jamais cette décision cruciale, de sorte que nous n'aurions pas à rendre la méthode publique, ce qui permettrait d'économiser 7 octets supplémentaires.
Ungolfed y compris invocation test-main
Jusqu'à présent, je n'ai trouvé aucun moyen de tester pour 2016 et de renvoyer "Trump" dans un code inférieur à 15 octets.
la source
C (gcc) ,
128120116110 octetsEssayez-le en ligne!
Explication
Appelons le
F(n)
nième nombre de Fibonacci etL(n)
le nième nombre de Lucas.a
,b
sontF(n-1)
,F(n)
respectivement.Ensuite, nous pouvons calculer
L(n) == F(n-1)+F(n+1) == 2*F(n-1) + F(n) == 2*a+b
Cette fonction calcule successivement les nombres de Fibonacci et de Lucas, jusqu’à
n
, et vérifie s’il enn
est.Si
n
est un numéro de Fibonacci, le premier bit deo
sera défini sur1
Si
n
est un nombre de Lucas, le deuxième bit deo
sera défini sur1
o
sera ensuite utilisé pour déterminer quel nom sortiemodifier
a<b<c
eta<a+c=L(n)
, donc( b<=n || a+c<=n ) => a<n
. J'ai réellement besoina<=n
de gérer correctementn=1
c
égale àF(n+1)
, ce qui était inutile puisque nous pouvons déjà calculerF(n+1)
aveca
etb
la source
b+=a
lieu deb=a+b
Perl 5.10, 119 - 15 (bonus) = 104 octets
Ungolfed:
Cela exploite le fait que
est le plus grand nombre de Lucas inférieur ou égal à F (n).
la source
Groovy, 149 octets
Code de test:
g
est une fermeture qui génère une liste de nombres basée sur un seed (s
) et une valeur max (m
).(g(i,[1,1]).contains(i)?1:0)+(g(i,[2,1]).contains(i)?2:0)
trouve l'index à utiliser en fonction du nombre lucas ou fibonacci.la source
MATLAB,
122119 octetsBrève explication
Nous créons d’abord un tableau de cellules contenant les valeurs à imprimer:
{'Pippi', 'Lucas', 'Ness', 'Travis'}
. Ensuite, pour déterminer la valeur à afficher, nous vérifions s’iln
s’agit d’un nombre de Fibonacci ou de Lucas.Pour Fibonnaci, nous utilisons la formule suivante:
Ceci vérifie si soit
5*n^2 + 4
ou l'5*n^2 - 4
est un carré parfait. Siany
tel est le cas, il s'agit d'un numéro de Fibonacci.La formule pour un numéro Lucas est très similaire à l'exception que nous utilisons +/- 20 au lieu de 4:
Dans cette solution, j'ai combiné ces deux cas en un seul en utilisant la matrice:
En appliquant la même équation que celles ci-dessus, mais en ne prenant
any
en compte que la première dimension, j'obtiens un tableau logique à deux éléments où, si le premier élément esttrue
, il s'agit d'un nombre de Lucas et si le deuxième élément esttrue
, il s'agit d'un nombre de Fibonacci. .Ensuite, pour calculer l'index dans mon tableau de cellules initial, je le traite comme une séquence binaire en effectuant une multiplication élément par élément de ce booléen avec
[2^0, 2^1]
ou simplement[1,2]
. Et résumer les éléments. Évidemment, je dois ajouter 1 en raison de l'indexation à une base de MATLAB.Ensuite, je dois utiliser
subsref
etsubstruct
indexer dans le tableau de cellules initial pour obtenir le résultat final.la source
JavaScript (ES6), 97 octets
Le
a==1
chèque est nécessaire sinon je ne remarque pas que 1 est un numéro Lucas.la source
Gelée , 47 octets - 15 = 32 (non compétitif ...?)
Essayez-le en ligne!
la source
05AB1E ,
3937 (52 - 15 bonus) octetsEssayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source