Étant donné que les nombres et les séquences de Fibonacci semblent être un sujet populaire pour le golf de code, j'ai pensé que ce pourrait être un défi amusant de coder le golf avec des nombres de Keith .
Je propose donc un défi qui est de créer une fonction qui prend un entier et qui renvoie un vrai ou un faux selon que le nombre est un nombre de Keith ou non.
En savoir plus sur les chiffres de Keith
En mathématiques récréatives, un nombre Keith ou un nombre repfigit (abréviation de chiffre répétitif de type Fibonacci) est un nombre dans la séquence entière suivante: 14, 19, 28, 47, 61, 75, 197, 742, 1104, 1537, 2208, 2580,…
Numberphile a une vidéo expliquant comment calculer un nombre Keith. Mais en gros, vous prenez les chiffres d'un nombre. Ajoutez-les ensemble, puis prenez les derniers chiffres du numéro d'origine et ajoutez-les à la somme du calcul, rincez et répétez. Et un exemple pour le clarifier.
14
1 + 4 = 5
4 + 5 = 9
5 + 9 = 14
Contribution
Un nombre entier.
Production
Vrai si le nombre est un nombre Keith. Faux si ce n'est pas ..
true
/false
ou peut-il être quelque chose de vrai / de falsey ?Réponses:
GolfScript (
3125 caractères)Saisissez un entier au-dessus de la pile. La sortie est 0 (faux) ou 1 (vrai). Démo en ligne qui répertorie les numéros Keith jusqu'à 100.
la source
0>
. Malheureusement, je ne peux +1 qu'une seule fois.Python (
7875)n=n[1:]+[sum(n)]
fait toute la magie. Il prend chaque élément, mais le premier élément den
, colle à la somme den
(avec le premier élément), puis définit celan
.Je souhaite que vous puissiez appeler
list
un entier et séparer les chiffres.Renvoie
False
toutes les entrées inférieures à 10. Peut être 8 caractères plus court s'il est retournéTrue
.la source
n[0]
au lieu den[-1]
.print 9<a==n[0]
.n=n[1:]+[sum(n)]
peut devenirn=n[1:]+sum(n),
GolfScript,
3229 caractèresUne implémentation GolfScript qui peut être testée en ligne . L'entrée est donnée comme élément supérieur de la pile et elle renvoie respectivement 0 (c'est-à-dire faux) ou 1.
la source
APL,
36343936332927Sortie
1
si Keith,0
sinonGolfScript frappe à nouveau !!
Éditer
Utilisation de Right-reduction (
⊢/
) au lieu de Take moins 1 (¯1↑
), en sauvant directement 1 caractère et indirectement 1 en Disclose (⊃
)Explication
⍎¨⍕x←⎕
prend l'entrée évaluée (traitée comme un nombre) et l'affecte àx
. Le convertit en un tableau de caractères (alias "chaîne" dans d'autres langues), et parcourt chaque caractère (chiffre), le convertissant en un nombre. Il en résulte donc un tableau numérique des chiffres.{(∇⍣(x>⊢/⍵))⍵,+/⍵↑⍨-⍴⍕x}
est la fonction principale de "boucle":+/⍵↑⍨-⍴⍕x
prend le dernier⍴⍕x
(nombre de chiffresx
) du tableau et les additionne.⍵,
le concatène à la fin du tableau.(x>⊢/⍵)
vérifier si le dernier nombre du tableau (qui n'a pas encore été+/⍵↑⍨-⍴⍕x
concaténé) est plus petit quex
et renvoie1
ou0
∇⍣
exécute cette fonction sur le nouveau tableau autant de fois. Donc, si le dernier nombre est inférieur àx
, cette fonction se reproduit. Sinon, renvoyez simplement le nouveau tableauAprès l'exécution de la fonction, le tableau contient les sommes jusqu'au point où 2 des nombres sont supérieurs ou égaux
x
(par exemple14
va générer1 4 5 9 14 23
,13
va générer1 3 4 7 11 18 29
)Enfin vérifier si chaque nombre est égal
x
et sortir la somme du binaire résultant tableau.Éditer
Ajout de 2 caractères :-( pour faire une sortie
0
si l'entrée est à un chiffreEncore un autre montage
Explication
La fonction supprime maintenant le premier nombre (
1↓
) du tableau au lieu de prendre le dernier⍴⍕x
(↑⍨-⍴⍕x
).Cependant, cette approche
1=
ne permet pas de gérer des nombres à un chiffre. Donc, il supprime maintenant le dernier nombre du tableau avant de vérifier l'égalitéx
, en ajoutant 1 caractèreVous l'avez deviné: EDIT
Se compare
x
à l'élément nouvellement ajouté au lieu de l'ancien dernier élément, donc laisser tomber le premier (au lieu du dernier) élément avant de vérifier l'égalitéx
est suffisant, en enregistrant un signe moins. Enregistre 3 autres en utilisant une autre forme de l'opérateur Power (⍣
)Et une réponse gs de 25 caractères apparaît (Orz)
Dernière modification
Je ne peux pas croire que j'ai raté ça.
Je ne peux plus jouer au golf.
la source
x∊{1↓⍵,+/⍵}⍣{x≤⊃⍺}⍎¨⍕x←⎕
. Dans la fonction de puissance,⍺
est la valeur "après".Lisp commun, 134
CL peut parfois être tout à fait illisible.
Quelques mises en forme pour éviter le défilement horizontal:
Tester:
la source
F # - 184 caractères
J'espère que c'est ok que je participe à mon propre défi.
Modifier Correction d'un bug concernant les petits nombres.
la source
K, 55
.
la source
PowerShell:
12012812311111097$i=read-host
prend l'entrée de l'utilisateur, la stocke dans $ i.$j=(
...)-split''|?{$_}
décompose les chiffres de $ i dans un tableau et les stocke dans $ j.While($x-lt$i)
définit la boucle de type Fibonnaci suivante pour qu'elle s'exécute jusqu'à ce que la variable somme, $ x, atteigne ou dépasse $ i.$x=0
met à zéro $ x, il est donc prêt à être utilisé pour la sommation (nécessaire lorsque la boucle revient).$j|%{$x+=$_}
utilise une boucle ForEach-Object pour additionner les valeurs de $ j à $ x.$null,$j=$j+$x
décale les valeurs de $ j vers la gauche, en rejetant la première, tout en ajoutant $ x.$x-eq$i
une fois la boucle while terminée, teste si la valeur de somme, $ x, est égale à la valeur initiale, $ i - généralement indicative d'un nombre Keith.-and$x-gt9
invalide les nombres à un chiffre, zéro et les nombres négatifs, qui ne peuvent pas être des nombres Keith.Ce script est un peu "salissant". Il peut gérer avec élégance les restes de $ i et $ j, mais vous devrez effacer $ x entre les exécutions.
la source
-ne''
afin qu'il soit juste?{$_}
.$i=read-host;$j=$i-split''|?{$_}'
par$j=($i=read-host)-split''|?{$_}
.Rubis, 82
Suspect Python est un meilleur outil pour celui-ci.
la source
C, 123
test via harnais:
donne:
la source
i=(i+n-1)%n;t=g[i];g[i]=s;s=s*2-t;
aveci+=n-1;t=g[i%n];g[i%n]=s;s+=s-t;
et enregistrer deux caractères.R, 116
Arnaque Python:
la source
Perl, 90
Un exercice amusant! Je sais que c'est un vieux post mais j'ai remarqué que Perl manquait!
Je suis sûr que je peux améliorer ma façon de construire cela en digérant les autres réponses de manière plus approfondie, donc je vais probablement y revenir!
la source
Smalltalk - 136 caractères
Envoyer ce bloc
value:
la source
Java - 1437
la source
Python3 104
Et c'est une fonction;)
la source
Python - 116 caractères
Pas vraiment un expert en codegolf, donc vous l'avez - mon premier essai.
Apportez 2 modifications à une fonction:
print
parreturn
x
pour être le paramètrePS je seconde @ beary605- ajouter un intégré pour séparer les chiffres / caractères / que ce soit.
la source
Ruby (avec OOP)
la source