Nihayet Gryphon Numarası


26

Geçen gün bir dizi numara buldum ve bunun için OEIS numarasının ne olduğunu kontrol etmeye karar verdim. Sürprizimden ötürü, dizi OEIS veritabanında görünmüyordu, bu yüzden diziyi kendimden sonra isimlendirmeye karar verdim (benden çok daha zeki bir başkasının muhtemelen çoktan bu konuyu gündeme getirdiğini ve eğer birisini bulduğunu unutmayın) Bu dizinin asıl adı, lütfen yorum yapın ve soru başlığını değiştireceğim). Diziyi hiçbir yerde bulamadığım için kendimden sonra “Gryphon Numbers” olarak adlandırmaya karar verdim. EDIT: Bu sekansın OEIS sekansı A053696 - 1'e eşit olduğu gerçeğini dikkatimi çektiğim için @Surb sayesinde .

Bir Gryphon numarası, a+a2+...+ax formunun bir numarasıdır . . . + Bir x , hem de a ve x daha büyük tamsayılardır veya iki eşit ve Gryphon dizisi artan tüm Gryphon sayı dizisidir. Bir Gryphon numarası oluşturmanın birden fazla yolu varsa (ilk örnek 30 , bu her ikisi de 2+22+23+24 ve 5+52 ), sayı yalnızca sekansta bir kez sayılır. İlk birkaç Gryphon numarası:6,12,14,20,30,39,42,56,62,72 .

Senin görevin:

Bir tamsayıdır alan bir program ya da işlev Yazın n girdi olarak alır ve çıktı olarak n Gryphon sayıda inci.

Giriş:

0 ile 10000 arasında bir tam sayı (dahil). Diziyi, hangisini tercih ederseniz, 0 indeksli veya 1 indeksli olarak kabul edebilirsiniz. Lütfen karışıklığı önlemek için cevabınızda hangi indeksleme sistemini kullandığınızı belirtin.

Çıktı:

Girdiye karşılık gelen Gryphon numarası.

Test Durumları:

Lütfen, dizinin 0 indeksli olduğunu varsaydığını unutmayın. Programınız 1 indeksli bir dizilişe geçerse, tüm giriş numaralarını arttırmayı unutmayın.

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

puanlama:

Bu , yani bayt cinsinden en düşük puan kazanır.


6
Gryphon'un dizisidir A053696 - 1. Diğer bir deyişle, A053696 formunun sayı artan dizisidir . a0+a1++ax
Surb

2
@Surb ah, bu yüzden bulamadım. Bu durumda, bu bilgiyi bir düzenlemeye koyacağım, ancak sorunun geri kalanını, sıralama için daha iyi bir isim olmadığı için olduğu gibi tutacağım.
Gryphon - Monica'yı

Yanıtlar:


15

Jöle , 9 bayt

bṖ’ḅi-µ#Ṫ

STDIN'den (1 indeksli) bir tam sayı okuyan ve sonucu basan tam bir program.

Çevrimiçi deneyin!

Nasıl?

Bir Gryphon numarası, bir bazda kendisinden daha az açık olan bir rakamdır, öyle ki tüm rakamlar, en az anlamlı olan hariçtir, sıfırdır. Örneğin:

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

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

Bu program nbaşlar, daha sonra başlar v=0ve bu özelliği test eder ve bu sayıları vbulana kadar artırır n, sonra sonunu çıkarır.

Bir temel bsayıyı test etmek için , her basamaktan bir tane çıkarır, tabandan dönüştürür vve sonucun 1 olup olmadığını kontrol eder . ( bDaha küçük olduğuna dikkat edin 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

11

MATL , 16, 13 bayt

:Qtt!^Ys+uSG)

1 tabanlı.

Çevrimiçi deneyin!

açıklama

n = 3Bir örnek olarak girişi düşünün .

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

(*) Adımında elde edilen matris muhtemelen tekrarlanan Gryphon numaralarını içerir. Özellikle, nilk satırında farklı Gryphon numaraları içerir . Bunlar mutlaka en nküçük Gryphon sayıları değildir. Ancak, sol alt giriş2+2^+···+2^n sağ üst aşıyor n+n^2ve bu nedenle son satırdaki tüm sayılar ilk satırdakileri aşıyor. Bu, matrisi sağa veya aşağıya uzatmanın, matristeki en düşük nsayılardan daha düşük herhangi bir Gryphon numarasına katkıda bulunmayacağı anlamına gelir . Bu nedenle, matrisin en nküçük Gryphon numaralarını içereceği garanti edilir . Sonuç olarak, nen düşük tekil benzersiz elemanı çözümdür.


1
Ne cehennem, bu harika!
IQuick 143

8

Haskell , 53 bayt

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

Çevrimiçi deneyin!

Bir dizi n tamsayı var ise Gryphon olan a2 ve x2 , öyle ki n=i=1xai .

Sonsuz bir liste oluştururuz n6Bir kaba kuvvet araştırmasının durumun böyle olduğunu gösterecek şekilde n6'nın.

Cevap, Haskell'de olduğu gibi bu listeye (sıfır indeksli) bir indeks fonksiyonudur (list!!).

Neden a^y+n==n*a+adoğru?

Kaynaktan bir geometrik ilerlemesi toplanmasıyla formül :

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

a(α,ρ,ν)=(a,a,x) izin verdik :

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

Denklemi yeniden düzenleyerek n ( 1 - a ) = a - a x + 1 elde ederiz.n(1a)=aax+1 .

Daha da ileri, biz olsun o yeniden düzenleme ax+1+n=na+a .

Kaba kuvvet arayışındaki y=x+1 ikamesi son ifadeyi verir a^y+n=n*a+a.

Kadar aramaya mı n, yeterli uzunlukta?

  • Eğer a>n (diğer bir deyişle an+1 ) ise, o zaman

    ay+n>a2(n+1)a=na+a
    bu da ay+nna+a . Yani a>n değerlerinden herhangi birini kontrol etmenin bir anlamı yoktur .

  • Benzer şekilde: eğer y>n , o zaman

    ay+n>an=an1a2n1a>(n+1)a=na+a,
    tekrar ay+nna+a kanıtlayın + a .

    Biz varsayabiliriz2n1>n+1Bildiğimiz çünkün6, en küçük Gryphon numarası.


7

Python 3.8 (Yayın öncesi) , 98 92 89 78 71 bayt

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

Çevrimiçi deneyin!

0 endeksli. Tam sayı bölümü burada kullanılmalıdır çünkü f (10000) taşması yüzer.

2an+2 ve 2xn+2 aldığı tüm Gryphon numaralarını oluşturur ve n'yi seçer.n . Öğeyi .

Jonathan Allan sayesinde -6 bayt

ArBo sayesinde -3 bayt. Neredeyse kendimi önerdiği gibi yaptım ama kullanmaya çalıştım{*(...)} yine de yerden tasarruf etmedi

Mathmandan sayesinde -11 bayt

ArBo sayesinde -7 bayt

Matematiksel Geçerlilik Kanıtı

Matematiksel konvansiyon 1 indeksli olsa bile, bu ispat uğruna 0 indekslemenin kullanılması.

  • Let Gn olması n Gryphon'un sayıda inci
  • Let g(a,x)=a+a2+...+ax den (Gryphon'un numarası a ve x )
  • olsunAn2an+22xn+2
  • olduğunu biliyoruz.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) for all a and x
  • g(a,x+1)<g(a+1,x+1) for all a and x
  • Therefore Gn+1g(a+1,x+1) if Gn=g(a,x)
  • g(a+1,x)<g(a+2,x) for all a and x
  • g(a,x+1)<g(a,x+2) for all a and x
  • Therefore Gn+1 must either be g(a+1,x) or g(a,x+1) if Gn=g(a,x) since no other possibilities exist.
  • We can use this information to conclude that Gn+1An+1 if GnAn
  • Since we know that G0A0, we can use this rule to induce that GnAn for all n
  • Since this can be applied from G0 to Gn, then Gn must be at index n of An if An is ordered from smallest to largest

f= is unnecessary, and lambda n,r=range: will save 4 more (like so)
Jonathan Allan

You can drop the set() and replace it by a set comprehension to get to 89
ArBo

Also, you can remove the f= from the TIO link by putting it in the header, as in the TIO of my 89-byter
ArBo

86 bytes with Python 3.8 and assignment expressions
ovs

At the line "Therefore Gn+1≠(a+1,x+1) if Gn=g(a,x)" is a mistake, it should be Gn+1≠g(a+1,x+1) if ...
IQuick 143

5

J, 35 32 bytes

-3 bytes thanks to FrownyFrog

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

Try it online!

Explanation is same as original. Simply uses explicit form to save bytes be removing the multiple @.

original answer, tacit, with explanation: 35 bytes

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

Try it online!

Similar to Luis Mendo's approach, we create a "power table" (like a times table) with top row 2 3 ... n and left column 1 2 ... n resulting in:

 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

^~/ >: creates the table, and 1+i.@+&2 creates the 1... n sequences, and we add 2 (+&2) to the input to ensure we always have enough elements to create a table even for 0 or 1 inputs.

After we have the table above the solution is trivial. We just scan sum the rows +/\, and then remove the first row, flatten, take unique, and sort /:~@~.@,@}.. Finally { uses the original input to index into that result, producing the answer.


explicit notation saves 3
FrownyFrog

thank you, nice catch.
Jonah


3

R, 65 62 bytes

-1 byte thanks to Giuseppe.

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

Try it online!

1-indexed.

Generates a matrix of all values of the form ai, takes the cumulative sum, removes the first row (0s) and the second row (entries corresponding to x=1), then takes the unique sorted values.

Note that sort(unique(...)) would not work, as unique would give unique rows of the matrix, and not unique entries. Using unique(sort(...)) works because sort converts to vector.


It takes a bit more work, but using t and diffinv is 64 bytes
Giuseppe

1
@Giuseppe Thanks! I didn't know diffinv. I golfed down another 2 bytes by replacing [-1:-2,] with [3:n,].
Robin Ryder

2

JavaScript (ES7), 76 bytes

1-indexed.

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

Try it online!


JavaScript (ES7), 89 bytes

1-indexed.

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

Try it online!



1

Charcoal, 36 bytes

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

Try it online! Link is to verbose version of code. 1-indexed. Uses Luis Mendo's algorithm. Explanation:

Nθ

Input n.

FθFθ⊞υ

Create an n-by-n grid of Gryphon numbers and push each one to the predefined list.

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

Calculate the Gryphon number using the fact that 1xai=ax+1aa1.

F⊖θ≔Φυ›κ⌊υυ

Remove the lowest n1 Gryphon numbers.

I⌊υ

Print the lowest remaining Gryphon number.


1

Japt, 23 bytes

Dear Jebus! Either I really have forgotten how to golf or the booze is finally taking its toll!

Not a direct port of Jonathan's solution but very much inspired by his observation.

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

Try it


1

05AB1E, 12 bytes

L¦ãε`LmO}êIè

0-indexed

Try it online or verify the first n items.

Explanation:

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)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.