Die N-te Gryphon-Nummer

26

Ich habe mir neulich eine Reihe von Nummern ausgedacht und mich entschlossen, die OEIS-Nummer zu überprüfen. Zu meiner großen Überraschung befand sich die Sequenz anscheinend nicht in der OEIS-Datenbank, daher habe ich beschlossen, die Sequenz nach mir zu benennen (beachten Sie, dass sich jemand anderes, der viel schlauer als ich ist, dies wahrscheinlich bereits ausgedacht hat und falls jemand das findet) Tatsächlicher Name dieser Sequenz, bitte kommentieren und ich ändere den Fragentitel). Da ich die Sequenz nirgendwo finden konnte, beschloss ich, sie nach mir zu benennen, daher "Gryphon Numbers". EDIT: Vielen Dank an @Surb, der mich darauf aufmerksam gemacht hat, dass diese Sequenz der OEIS-Sequenz A053696-1 entspricht .

Eine Gryphon-Zahl ist eine Zahl der Form , wobei sowohl als auch ganze Zahlen größer oder gleich zwei sind und die Gryphon-Folge die Menge aller Gryphon-Zahlen in aufsteigender Reihenfolge ist bestellen. Wenn es mehrere Möglichkeiten gibt, eine Gryphon-Nummer zu bilden (das erste Beispiel ist , was sowohl als auch ), wird die Nummer in der Sequenz nur einmal gezählt. Die ersten paar Gryphon-Zahlen sind: .a+a2+...+axax302+22+23+245+526,12,14,20,30,39,42,56,62,72

Deine Aufgabe:

Schreiben Sie ein Programm oder eine Funktion, die eine Ganzzahl als Eingabe empfängt und die te Gryphon-Nummer ausgibt . nn

Eingang:

Eine ganze Zahl zwischen 0 und 10000 (einschließlich). Sie können die Sequenz entweder als 0-indexiert oder als 1-indexiert behandeln, je nachdem, was Sie bevorzugen. Bitte geben Sie an, welches Indexsystem Sie in Ihrer Antwort verwenden, um Verwirrung zu vermeiden.

Ausgabe:

Die der Eingabe entsprechende Gryphon-Nummer.

Testfälle:

Bitte beachten Sie, dass davon ausgegangen wird, dass die Sequenz 0-indiziert ist. Wenn Ihr Programm eine 1-indizierte Sequenz annimmt, vergessen Sie nicht, alle eingegebenen Zahlen zu erhöhen.

Input:    Output:
0   --->  6
3   --->  20
4   --->  30
10  --->  84
99  --->  4692
9999 -->  87525380

Wertung:

Das ist , also gewinnt die niedrigste Punktzahl in Bytes.

Gryphon - Setzen Sie Monica wieder ein
quelle
6
Die Gryphon-Sequenz ist A053696 - 1. Mit anderen Worten, A053696 ist die aufsteigende Folge von Zahlen der Form . a0+a1++ax
Surb
2
@Surb ah, deshalb konnte ich es nicht finden. In diesem Fall werde ich diese Informationen in eine Bearbeitung einfügen, aber den Rest der Frage so lassen, wie er ist, da es anscheinend keinen besseren Namen für die Sequenz gibt.
Gryphon - Setzen Sie Monica

Antworten:

15

Gelee , 9 Bytes

bṖ’ḅi-µ#Ṫ

Ein vollständiges Programm, das eine (1-indizierte) Ganzzahl aus STDIN liest und das Ergebnis ausgibt.

Probieren Sie es online!

Wie?

Eine Gryphon-Zahl ist eine Zahl, die in einer Basis ausgedrückt werden kann, die kleiner ist als sie selbst, so dass alle Ziffern Einsen sind, mit Ausnahme der niedrigstwertigen Ziffer, die eine Null ist. Beispielsweise:

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

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

Dieses Programm nimmt n, startet v=0und testet diese Eigenschaft und erhöht sie, vbis es nsolche Zahlen findet, und gibt dann die letzte aus.

Um eine Basiszahl zu testen b, subtrahiert sie eine von jeder Ziffer, konvertiert von der Basis vund prüft dann, ob das Ergebnis 1 . (Beachten Sie, dass bweniger als v)

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
quelle
11

MATL , 16 13 Bytes

:Qtt!^Ys+uSG)

1-basiert.

Probieren Sie es online!

Erläuterung

Betrachten Sie die Eingabe n = 3als Beispiel.

:    % 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

Die in Schritt (*) erhaltene Matrix enthält möglicherweise wiederholte Gryphon-Zahlen. Insbesondere enthält es nverschiedene Gryphon-Nummern in seiner ersten Reihe. Dies sind nicht unbedingt die nkleinsten Gryphon-Zahlen. Der linke untere Eintrag 2+2^+···+2^n überschreitet jedoch den rechten oberen Eintrag n+n^2und daher überschreiten alle Nummern in der letzten Zeile die in der ersten Zeile. Dies impliziert, dass das Erweitern der Matrix nach rechts oder unten keine Gryphon-Zahl beitragen würde, die niedriger ist als die niedrigsten nZahlen in der Matrix. Daher enthält die Matrix garantiert die nkleinsten Gryphon-Zahlen. Folglich ist das nniedrigste eindeutige Element die Lösung.

Luis Mendo
quelle
1
Was zur Hölle, das ist unglaublich!
IQuick 143
8

Haskell , 53 Bytes

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

Probieren Sie es online!

na2x2n=i=1xai

n6

Die Antwort ist eine (nullindexierte) Indexfunktion in dieser Liste, die in Haskell als bezeichnet wird (list!!).

Warum ist das a^y+n==n*a+arichtig?

Aus der Formel zur Summierung eines geometrischen Verlaufs :

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

(α,ρ,ν)=(a,a,x)

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

n(1a)=aax+1

ax+1+n=na+a

y=x+1a^y+n=n*a+a

Sucht bis ngenug?

  • a>nan+1

    ay+n>a2(n+1)a=na+a
    ay+nna+aa>n

  • y>n

    ay+n>an=an1a2n1a>(n+1)a=na+a,
    ay+nna+a

    2n1>n+1n6

Lynn
quelle
7

Python 3.8 (Vorabversion) , 98 92 89 78 71 Byte

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

Probieren Sie es online!

0-indiziert. Hier muss eine Ganzzahldivision verwendet werden, da f (10000) überläuft.

2an+22xn+2n

-6 Bytes dank Jonathan Allan

-3 Bytes dank ArBo. Ich hätte fast getan, was er mir vorschlug, aber ich habe versucht, etwas zu verwenden, {*(...)}was sowieso keinen Platz sparte

-11 bytes dank mathmandan

-7 Bytes dank ArBo

Mathematischer Gültigkeitsnachweis

Verwenden der 0-Indizierung für diesen Beweis, obwohl die mathematische Konvention 1-indiziert ist.

  • Gnn
  • g(a,x)=a+a2+...+axax
  • An2an+22xn+2
  • A0={g(2,2)}={6}={G0}
  • An+1={g(a,x),g(a+1,x),g(a,x+1),g(a+1,x+1)|g(a,x)An}
  • g(a+1,x)<g(a+1,x+1)ax
  • g(a,x+1)<g(a+1,x+1)ax
  • Gn+1g(a+1,x+1)Gn=g(a,x)
  • g(a+1,x)<g(a+2,x)ax
  • g(a,x+1)<g(a,x+2)ax
  • Gn+1g(a+1,x)g(a,x+1)Gn=g(a,x)
  • Gn+1An+1GnAn
  • G0A0GnAnn
  • G0GnGnnAnAn
Beefster
quelle
f=ist unnötig und lambda n,r=range:wird 4 weitere sparen ( wie so )
Jonathan Allan
Sie können das set()
löschen
Sie können den f=Link auch aus dem TIO entfernen, indem Sie ihn in den Header einfügen, wie im TIO meines 89-Bytes
ArBo,
86 Bytes mit Python 3.8 und Zuweisungsausdrücken
ovs
In der Zeile "Also Gn + 1 ≠ (a + 1, x + 1), wenn Gn = g (a, x)" ist ein Fehler, es sollte Gn + 1 ≠ g (a + 1, x + 1) sein, wenn ...
IQuick 143
5

J , 35 32 Bytes

-3 Bytes dank FrownyFrog

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

Probieren Sie es online!

Erklärung ist die gleiche wie im Original. Verwendet einfach eine explizite Form, um Bytes zu speichern, indem das Mehrfache entfernt wird @.

Originalantwort, stillschweigend, mit Erklärung: 35 Bytes

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

Probieren Sie es online!

Ähnlich wie Luis Mendo Ansatz haben wir eine „Power - Tabelle“ (wie ein mal Tabelle) mit oberen Reihe erstellen 2 3 ... nund linke Spalte 1 2 ... nergibt:

 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

^~/ >:erstellt die Tabelle und 1+i.@+&2erstellt die 1... nSequenzen, und wir fügen +&2der Eingabe 2 ( ) hinzu, um sicherzustellen, dass immer genügend Elemente vorhanden sind, um eine Tabelle auch für 0- oder 1-Eingaben zu erstellen.

Nachdem wir die Tabelle oben haben, ist die Lösung trivial. Wir scannen einfach die Zeilen +/\und entfernen dann die erste Zeile, reduzieren, nehmen eindeutige und sortieren /:~@~.@,@}.. Schließlich {verwendet den ursprünglichen Eingang Index in dieses Ergebnis die Antwort zu erzeugen.

Jona
quelle
explizite Notation speichert 3
FrownyFrog
Danke, schöner Fang.
Jona
3

Gaia , 18 Bytes

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

Probieren Sie es online!

1-basierter Index.

Dies ist eine ziemlich traurige Antwort mit einer langen Nase: )┅:Es wünscht sich wahrscheinlich, es könnte weiter abgespielt werden.

Kopiert den von Luis Mendo angegebenen Algorithmus

Giuseppe
quelle
3

R , 65 62 Bytes

-1 Byte danke an Giuseppe.

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

Probieren Sie es online!

1-indiziert.

aix=1

Beachten Sie, dass sort(unique(...))dies nicht funktionieren würde, da uniquees eindeutige Zeilen der Matrix und keine eindeutigen Einträge geben würde. Mit unique(sort(...))funktioniert , weil sortKonvertiten zum Vektor.

Robin Ryder
quelle
Es dauert ein bisschen mehr Arbeit, aber mit tund diffinvist 64 Bytes
Giuseppe
1
@ Giuseppe Danke! Ich wusste es nicht diffinv. I golfed weitere 2 Bytes nach unten durch den Ersatz [-1:-2,]mit [3:n,].
Robin Ryder
2

JavaScript (ES7), 76 Byte

1-indiziert.

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

Probieren Sie es online!


JavaScript (ES7), 89 Byte

1-indiziert.

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')

Probieren Sie es online!

Arnauld
quelle
1

Kohle , 36 Bytes

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

Probieren Sie es online! Link ist eine ausführliche Version des Codes. 1-indiziert. Verwendet den Algorithmus von Luis Mendo. Erläuterung:

Nθ

n

FθFθ⊞υ

Erstelle ein nn

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

1xai=ax+1aa1

F⊖θ≔Φυ›κ⌊υυ

n1

I⌊υ

Drucken Sie die niedrigste verbleibende Gryphon-Nummer.

Neil
quelle
1

Japt , 23 Bytes

Lieber Jebus! Entweder habe ich das Golfen wirklich vergessen oder der Alkohol fordert endlich seinen Tribut!

Kein direkter Hafen von Jonathans Lösung, aber sehr inspiriert von seiner Beobachtung.

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

Versuch es

Zottelig
quelle
1

05AB1E , 12 Bytes

L¦ãε`LmO}êIè

0-indiziert

n .

Erläuterung:

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
quelle