Le Nième numéro de Gryphon

26

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: .une+une2+...+uneXuneX302+22+23+245+526,12,14,20,30,39,42,56,62,72

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. nn

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 , donc le score le plus bas en octets gagne.

Gryphon - Rétablir Monica
la source
6
La séquence Gryphon est A053696 - 1. En d'autres termes, A053696 est la séquence croissante des nombres de la forme . une0+une1++uneX
Surb
2
@Surb ah, c'est pourquoi je ne l'ai pas trouvé. Dans ce cas, je mettrai ces informations dans un montage, mais gardez le reste de la question tel qu'il est, car il ne semble pas y avoir de meilleur nom pour la séquence.
Gryphon - Rétablir Monica

Réponses:

15

Gelée , 9 octets

bṖ’ḅi-µ#Ṫ

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:

30=1×24+1×23+1×22+1×21+0×20302=11110

84=1×43+1×42+1×41+0×40844=1110

Ce programme prend n, puis démarre à v=0et teste cette propriété et incrémente vjusqu'à ce qu'il trouve de ntels nombres, puis sort le dernier.

Pour tester un bnombre de base, il soustrait un de chaque chiffre, convertit de la base v, puis vérifie si le résultat est . (Notez que c'est moins que )1bv

3020×304+0×303+0×302+0×301+(1)×300=1

8440×843+0×842+0×841+(1)×840=1

bṖ’ḅi-µ#Ṫ - Main Link: no arguments
       #  - set v=0 then count up collecting n=STDIN matches of:
      µ   -  the monadic link -- i.e. f(v):  e.g. v=6
 Ṗ        -    pop (implicit range of v)            [1,2,3,4,5]
b         -    to base (vectorises)                 [[1,1,1,1,1,1],[1,1,0],[2,0],[1,2],[1,1]]
  ’       -    decrement (vectorises)               [[0,0,0,0,0,0],[0,0,-1],[1,-1],[0,1],[0,0]]
   ḅ      -    from base (v) (vectorises)           [0,-1,5,1,0]
     -    -    literal -1                           -1
    i     -    first index of (zero if not found)   2
          - }  e.g. n=11 -> [6,12,14,20,30,39,42,56,62,72,84]
        Ṫ - tail         -> 84
          - implicit print
Jonathan Allan
la source
11

MATL , 16 13 octets

:Qtt!^Ys+uSG)

1 basé.

Essayez-le en ligne!

Explication

Considérez la saisie n = 3comme exemple.

:    % Implicit input: n. Range
     % STACK: [1 2 3]
Q    % Add 1, element-wise
     % STACK: [2 3 4]
tt   % Duplicate twice, transpose
     % STACK: [2 3 4], [2 3 4], [2;
                                 3;
                                 4]
^    % Power, element-wise with broadcast
     % STACK: [2 3 4], [ 4   9  16;
                         8  27  64;
                        16  81 256]
Ys   % Cumulative sum of each column
     % STACK: [2 3 4], [ 4    9  16;
                         12  36  80;
                         28 117 336]
+    % Add, element-wise with broadcast (*)
     % STACK: [ 6  12  20;
               14  39  84
               30 120 340]
u    % Unique elements. Gives a column vector
     % STACK: [  6;
                14;
                30;
                12;
               ···
               340]
S    % Sort
     % STACK: [  6;
                12
                14;
                20;
               ···
               340]
G)   % Push input again, index. This gets the n-th element. Implicit display
     % STACK: 14

La matrice obtenue à l'étape (*) contient des nombres de Gryphon éventuellement répétés. En particulier, il contient ndes numéros de Gryphon distincts dans sa première ligne. Ce ne sont pas nécessairement les nplus petits nombres de Gryphon. Cependant, l'entrée en bas à gauche 2+2^+···+2^n dépasse l' entrée en haut à droite n+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 aux nnombres les plus bas de la matrice. Par conséquent, la matrice est garantie pour contenir les nplus petits nombres de Gryphon. Par conséquent, son n-ème élément unique le plus bas est la solution.

Luis Mendo
la source
1
Qu'est-ce que c'est, c'est incroyable!
IQuick 143
8

Haskell , 53 octets

([n|n<-[6..],or[a^y+n==n*a+a|a<-[2..n],y<-[3..n]]]!!)

Essayez-le en ligne!

Un nombre est Gryphon s'il existe des entiers et tels que .nune2X2n=je=1Xuneje

Nous générons une liste infinie de tous les telle sorte qu'une recherche par force brute montre que c'est le cas.n6

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+acorrect?

De la formule de sommation d'une progression géométrique :

i=1ναρi1=α(1ρν)1ρ

nous avons, laissant :(α,ρ,ν)=(a,a,x)

n=i=1xai=a(1ax)1a=aax+11a.

En réarrangeant l'équation, nous obtenons .n(1a)=aax+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+1a^y+n=n*a+a

La recherche est-elle nsuffisante?

  • Si une>n (en d'autres termes, unen+1 ), alors

    uney+n>une2(n+1)une=nune+une
    ce qui prouve uney+nnune+une . Il est donc inutile de vérifier les valeurs une>n .

  • y>n

    uney+n>unen=unen-1une2n-1une>(n+1)une=nune+une,
    uney+nnune+une

    2n-1>n+1n6

Lynn
la source
7

Python 3.8 (version préliminaire) , 98 92 89 78 71 octets

lambda n:sorted({a*~-a**x//~-a for a in(r:=range(2,n+3))for x in r})[n]

Essayez-le en ligne!

0 indexé. La division entière doit être utilisée ici car f (10000) déborde flottant.

2unen+22Xn+2n

-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.

  • gnn
  • g(une,X)=une+une2+...+uneXuneX
  • UNEn2unen+22Xn+2
  • UNE0={g(2,2)}={6}={g0}
  • UNEn+1={g(une,X),g(une+1,X),g(une,X+1),g(une+1,X+1)|g(une,X)UNEn}
  • g(une+1,X)<g(une+1,X+1)uneX
  • g(une,X+1)<g(une+1,X+1)uneX
  • gn+1g(une+1,X+1)gn=g(une,X)
  • g(une+1,X)<g(une+2,X)uneX
  • g(une,X+1)<g(une,X+2)uneX
  • gn+1g(une+1,X)g(une,X+1)gn=g(une,X)
  • gn+1UNEn+1gnUNEn
  • g0UNE0gnUNEnn
  • g0gngnnUNEnUNEn
Beefster
la source
f=est inutile, et lambda n,r=range:permettra d'économiser 4 autres ( comme ça )
Jonathan Allan
Vous pouvez supprimer le set()et le remplacer par une compréhension d'ensemble pour arriver à 89
ArBo
En outre, vous pouvez supprimer le f=lien TIO en le mettant dans l'en-tête, comme dans le TIO de mon 89 octets
ArBo
86 octets avec Python 3.8 et expressions d'affectation
ovs
À la ligne "Donc Gn + 1 ≠ (a + 1, x + 1) si Gn = g (a, x)" est une erreur, ce devrait être Gn + 1 ≠ g (a + 1, x + 1) si ...
IQuick 143
5

J , 35 32 octets

-3 octets grâce à FrownyFrog

3 :'y{/:~~.,}.+/\(^~/>:)1+i.y+2'

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

{[:/:~@~.@,@}.[:+/\@(^~/>:)1+i.@+&2

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 ... net la colonne de gauche 1 2 ... nrésultant en:

 2   3    4     5     6      7
 4   9   16    25    36     49
 8  27   64   125   216    343
16  81  256   625  1296   2401
32 243 1024  3125  7776  16807
64 729 4096 15625 46656 117649

^~/ >:crée la table et 1+i.@+&2crée les 1... nsé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.

Jonas
la source
la notation explicite sauve 3
FrownyFrog
merci, belle prise.
Jonah
3

Gaia , 18 octets

)┅:1D¤*‡+⊣¦tv<_uȯE

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

Giuseppe
la source
3

R , 65 62 octets

-1 octet grâce à Giuseppe.

n=scan();unique(sort(diffinv(t(outer(2:n,1:n,"^")))[3:n,]))[n]

Essayez-le en ligne!

1 indexé.

unejeX=1

Notez que sort(unique(...))cela ne fonctionnerait pas, car uniquecela donnerait des lignes uniques de la matrice et non des entrées uniques. Utilisation de unique(sort(...))travaux car sortconvertit en vecteur.

Robin Ryder
la source
Cela prend un peu plus de travail, mais en utilisant tet diffinvest de 64 octets
Giuseppe
1
@Giuseppe Merci! Je ne savais pas diffinv. J'ai joué au golf encore 2 octets en remplaçant [-1:-2,]par [3:n,].
Robin Ryder
2

JavaScript (ES7), 76 octets

1 indexé.

f=(n,a=[i=2])=>(n-=a.some(j=>a.some(k=>(s+=j**k)==i,s=j)))?f(n,[...a,++i]):i

Essayez-le en ligne!


JavaScript (ES7), 89 octets

1 indexé.

n=>eval('for(a=[i=1e4];--i>1;)for(s=1e8+i,x=1;a[s+=i**++x]=x<26;);Object.keys(a)[n]-1e8')

Essayez-le en ligne!

Arnauld
la source
1

Fusain , 36 octets

NθFθFθ⊞υ÷⁻X⁺²ι⁺³κ⁺²ι⊕ιF⊖θ≔Φυ›κ⌊υυI⌊υ

Essayez-le en ligne! Le lien est vers la version détaillée du code. 1 indexé. Utilise l'algorithme de Luis Mendo. Explication:

Nθ

n

FθFθ⊞υ

nn

÷⁻X⁺²ι⁺³κ⁺²ι⊕ι

1Xuneje=uneX+1-uneune-1

F⊖θ≔Φυ›κ⌊υυ

n-1

I⌊υ

Imprimez le plus petit nombre de Gryphon restant.

Neil
la source
1

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.

@ÈÇXìZ mÉ ìZÃeÄ}fXÄ}gNÅ

Essayez-le

Hirsute
la source
1

05AB1E , 12 octets

L¦ãε`LmO}êIè

0 indexé

n

Explication:

L             # Create a list in the range [1, (implicit) input-integer]
              #  i.e. 4 → [1,2,3,4]
 ¦            # Remove the first item to make the range [2, input-integer]
              #  i.e. [1,2,3,4] → [2,3,4]
  ã           # Create each possible pair of this list by using the cartesian product
              #  i.e. [2,3,4] → [[2,2],[2,3],[2,4],[3,2],[3,3],[3,4],[4,2],[4,3],[4,4]]
   ε          # Map each pair to:
    `         #  Push the values of the pair separately to the stack
              #   i.e. [4,3] → 4 and 3
     L        #  Take the list [1, value] for the second value of the two
              #   i.e. 3 → [1,2,3]
      m       #  And then take the first value to the power of each integer in this list
              #   i.e. 4 and [1,2,3] → [4,16,64]
       O      #  After which we sum the list
              #   i.e. [4,16,64] → 84
            # After the map: uniquify and sort the values
              #  i.e. [6,14,30,12,39,120,20,84,340] → [6,12,14,20,30,39,84,120,340]
          Iè  # And index the input-integer into it
              #  i.e. [6,12,14,20,30,39,84,120,340] and 4 → 30
              # (after which the result is output implicitly)
Kevin Cruijssen
la source