L'autre jour, j'ai trouvé une série de chiffres et j'ai décidé de vérifier quel était le numéro OEIS. À ma grande surprise, la séquence ne semblait pas figurer dans la base de données OEIS, j'ai donc décidé de nommer la séquence d'après moi-même (notez que quelqu'un d'autre qui est beaucoup plus intelligent que moi l'a probablement déjà trouvé, et si quelqu'un trouve le nom réel de cette séquence, veuillez commenter et je changerai le titre de la question). Comme je n'ai pu trouver la séquence nulle part, j'ai décidé de la nommer d'après moi-même, d'où "Gryphon Numbers". EDIT: Merci à @Surb d'avoir porté à mon attention le fait que cette séquence est égale à la séquence OEIS A053696 - 1.
Un nombre Gryphon est un nombre de la forme , où et sont des entiers supérieurs ou égaux à deux, et la séquence Gryphon est l'ensemble de tous les nombres Gryphon en ordre croissant ordre. S'il existe plusieurs façons de former un nombre Gryphon (le premier exemple est , qui est à la fois et ), le nombre n'est compté qu'une seule fois dans la séquence. Les premiers chiffres de Gryphon sont: .
Ta tâche:
Écrivez un programme ou une fonction qui reçoit un entier en entrée et génère le ème numéro de Gryphon.
Contribution:
Un entier entre 0 et 10000 (inclus). Vous pouvez traiter la séquence comme indexée 0 ou indexée 1, selon votre préférence. Veuillez indiquer le système d'indexation que vous utilisez dans votre réponse pour éviter toute confusion.
Sortie:
Le numéro de Gryphon correspondant à l'entrée.
Cas de test:
Veuillez noter que cela suppose que la séquence est indexée 0. Si votre programme suppose une séquence indexée sur 1, n'oubliez pas d'incrémenter tous les nombres saisis.
Input: Output:
0 ---> 6
3 ---> 20
4 ---> 30
10 ---> 84
99 ---> 4692
9999 --> 87525380
Notation:
C'est le code-golf , donc le score le plus bas en octets gagne.
Réponses:
Gelée , 9 octets
Un programme complet qui lit un entier (indexé 1) à partir de STDIN et imprime le résultat.
Essayez-le en ligne!
Comment?
Un nombre Gryphon est un nombre qui est exprimable dans une base inférieure à elle-même de telle sorte que tous les chiffres sont un sauf le moins significatif, qui est un zéro. Par exemple:
Ce programme prend
n
, puis démarre àv=0
et teste cette propriété et incrémentev
jusqu'à ce qu'il trouve den
tels nombres, puis sort le dernier.Pour tester un- 1
b
nombre de base, il soustrait un de chaque chiffre, convertit de la basev
, puis vérifie si le résultat est . (Notez que c'est moins que )b
v
la source
MATL ,
1613 octets1 basé.
Essayez-le en ligne!
Explication
Considérez la saisie
n = 3
comme exemple.La matrice obtenue à l'étape (*) contient des nombres de Gryphon éventuellement répétés. En particulier, il contient
n
des numéros de Gryphon distincts dans sa première ligne. Ce ne sont pas nécessairement lesn
plus petits nombres de Gryphon. Cependant, l'entrée en bas à gauche2+2^+···+2^n
dépasse l' entrée en haut à droiten+n^2
, et donc tous les nombres de la dernière ligne dépassent ceux de la première ligne. Cela implique que l'extension de la matrice vers la droite ou vers le bas ne contribuerait pas à un nombre de Gryphon inférieur auxn
nombres les plus bas de la matrice. Par conséquent, la matrice est garantie pour contenir lesn
plus petits nombres de Gryphon. Par conséquent, sonn
-ème élément unique le plus bas est la solution.la source
Haskell , 53 octets
Essayez-le en ligne!
Nous générons une liste infinie de tous les telle sorte qu'une recherche par force brute montre que c'est le cas.n≥6
La réponse est une fonction d'index (indexée zéro) dans cette liste, notée dans Haskell comme
(list!!)
.Pourquoi est-ce
a^y+n==n*a+a
correct?De la formule de sommation d'une progression géométrique :
nous avons, laissant :(α,ρ,ν)=(a,a,x) n=∑i=1xai=a(1−ax)1−a=a−ax+11−a.
En réarrangeant l'équation, nous obtenons .n(1−a)=a−ax+1
En réarrangeant cela encore plus, nous obtenons .ax+1+n=na+a
Une substitution dans la recherche par force brute donne l'expression finale .y=x+1
a^y+n=n*a+a
La recherche est-elle
n
suffisante?Sia > n (en d'autres termes, a ≥ n +1 ), alors uney+ n > a2≥ ( n + 1 ) a = n a + a
ce qui prouve uney+ n ≠ n a + a . Il est donc inutile de vérifier les valeurs a > n .
la source
Python 3.8 (version préliminaire) ,
9892897871 octetsEssayez-le en ligne!
0 indexé. La division entière doit être utilisée ici car f (10000) déborde flottant.
-6 octets grâce à Jonathan Allan
-3 octets grâce à ArBo. J'ai presque fait comme il me l'avait suggéré, mais j'ai essayé d'utiliser
{*(...)}
ce qui ne permettait pas d'économiser de l'espace-11 octets grâce à mathmandan
-7 octets grâce à ArBo
Preuve mathématique de validité
Utiliser l'indexation 0 pour cette preuve, même si la convention mathématique est indexée 1.
la source
f=
est inutile, etlambda n,r=range:
permettra d'économiser 4 autres ( comme ça )set()
et le remplacer par une compréhension d'ensemble pour arriver à 89f=
lien TIO en le mettant dans l'en-tête, comme dans le TIO de mon 89 octetsJ ,
3532 octets-3 octets grâce à FrownyFrog
Essayez-le en ligne!
L'explication est la même que l'original. Utilise simplement un formulaire explicite pour enregistrer les octets en supprimant le multiple
@
.réponse originale, tacite, avec explication: 35 octets
Essayez-le en ligne!
Semblable à l'approche de Luis Mendo, nous créons une "table de puissance" (comme une table de multiplication) avec la ligne du haut
2 3 ... n
et la colonne de gauche1 2 ... n
résultant en:^~/ >:
crée la table et1+i.@+&2
crée les1... n
séquences, et nous ajoutons 2 (+&2
) à l'entrée pour nous assurer que nous avons toujours suffisamment d'éléments pour créer une table même pour 0 ou 1 entrées.Une fois que nous avons le tableau ci-dessus, la solution est triviale. Nous analysons simplement la somme des lignes
+/\
, puis supprimons la première ligne, aplatissons, prenons unique et trions/:~@~.@,@}.
. Enfin,{
utilise l'entrée d'origine pour indexer ce résultat, produisant la réponse.la source
Gaia , 18 octets
Essayez-le en ligne!
Index basé sur 1.
C'est une réponse plutôt triste avec un long nez:
)┅:
il souhaite probablement qu'il puisse être approfondi.Copie l'algorithme donné par la réponse de Luis Mendo
la source
R ,
6562 octets-1 octet grâce à Giuseppe.
Essayez-le en ligne!
1 indexé.
Notez que
sort(unique(...))
cela ne fonctionnerait pas, carunique
cela donnerait des lignes uniques de la matrice et non des entrées uniques. Utilisation deunique(sort(...))
travaux carsort
convertit en vecteur.la source
t
etdiffinv
est de 64 octetsdiffinv
. J'ai joué au golf encore 2 octets en remplaçant[-1:-2,]
par[3:n,]
.JavaScript (ES7), 76 octets
1 indexé.
Essayez-le en ligne!
JavaScript (ES7), 89 octets
1 indexé.
Essayez-le en ligne!
la source
Wolfram Language (Mathematica) , 51 octets
Essayez-le en ligne!
1 indexé
-8 octets de @attinat
la source
Fusain , 36 octets
Essayez-le en ligne! Le lien est vers la version détaillée du code. 1 indexé. Utilise l'algorithme de Luis Mendo. Explication:
Imprimez le plus petit nombre de Gryphon restant.
la source
Japt , 23 octets
Cher Jebus! Soit j'ai vraiment oublié comment jouer au golf, soit l'alcool finit par faire des ravages!
Pas un port direct de la solution de Jonathan mais très inspiré par son observation.
Essayez-le
la source
05AB1E , 12 octets
0 indexé
Explication:
la source