Nomor Gryphon Ke-N


26

Saya datang dengan serangkaian nomor hari yang lain dan memutuskan untuk memeriksa apa nomor OEIS itu. Betapa terkejutnya saya, urutannya tampaknya tidak ada dalam database OEIS, jadi saya memutuskan untuk memberi nama urutannya sendiri (perhatikan bahwa orang lain yang jauh lebih pintar dari saya mungkin telah menemukan ini, dan jika seseorang menemukan nama sebenarnya dari urutan ini, beri komentar dan saya akan mengubah judul pertanyaan). Karena saya tidak dapat menemukan urutan di mana pun, saya memutuskan untuk menamainya sendiri, maka "Gryphon Numbers". EDIT: Terima kasih kepada @Surb karena telah memperhatikan fakta bahwa urutan ini sama dengan urutan OEIS A053696 - 1.

Angka Gryphon adalah angka dari bentuk a+a2+...+ax , di mana a dan x adalah bilangan bulat lebih besar dari atau sama dengan dua, dan urutan Gryphon adalah himpunan semua angka Gryphon dalam urutan menaik. Jika ada beberapa cara untuk membentuk nomor Gryphon (contoh pertama adalah 30 , yang keduanya 2+22+23+24 dan 5+52 ) jumlahnya hanya dihitung satu kali dalam urutan. Beberapa angka Gryphon pertama adalah:6,12,14,20,30,39,42,56,62,72 .

Tugas Anda:

Tulis program atau fungsi yang menerima bilangan bulat n sebagai input dan menampilkan nomor Gryphon ke- n .

Memasukkan:

Integer antara 0 dan 10.000 (inklusif). Anda dapat memperlakukan urutan sebagai 0-diindeks atau 1-diindeks, mana yang Anda inginkan. Harap sebutkan sistem pengindeksan yang Anda gunakan dalam jawaban Anda untuk menghindari kebingungan.

Keluaran:

Nomor Gryphon sesuai dengan input.

Kasus uji:

Harap dicatat bahwa ini mengasumsikan urutan diindeks 0. Jika program Anda mengasumsikan urutan 1-diindeks, jangan lupa untuk menambah semua angka input.

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

Mencetak:

Ini adalah , sehingga skor terendah dalam byte menang.


6
Urutan Gryphon adalah A053696 - 1. Dengan kata lain, A053696 adalah urutan peningkatan jumlah bentuk . a0+a1++ax
Surb

2
@Surb ah, itu sebabnya saya tidak bisa menemukannya. Dalam hal ini, saya akan memasukkan informasi itu dalam sebuah pengeditan, tetapi pertahankan sisa pertanyaannya seperti semula karena sepertinya tidak ada nama yang lebih baik untuk urutan tersebut.
Gryphon - Kembalikan Monica

Jawaban:


15

Jelly , 9 byte

bṖ’ḅi-µ#Ṫ

Program lengkap yang membaca integer (1-diindeks) dari STDIN dan mencetak hasilnya.

Cobalah online!

Bagaimana?

Angka Gryphon adalah angka yang dapat diekspresikan dalam basis kurang dari itu sendiri sehingga semua digit adalah yang kecuali yang paling tidak signifikan, yaitu nol. Sebagai contoh:

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

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

Program ini mengambil n, kemudian mulai v=0dan menguji untuk properti ini dan kenaikan vsampai menemukan nangka-angka seperti itu, kemudian mengeluarkan yang terakhir.

bv1bv

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 byte

:Qtt!^Ys+uSG)

Berbasis 1.

Cobalah online!

Penjelasan

Pertimbangkan input n = 3sebagai contoh.

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

Matriks yang diperoleh pada langkah (*) berisi angka Gryphon yang mungkin diulang. Secara khusus, ini berisi nnomor Gryphon yang berbeda di baris pertama. Ini belum tentu nangka Gryphon terkecil. Namun, entri kiri bawah 2+2^+···+2^n melebihi entri kanan atas n+n^2, dan dengan demikian semua angka di baris terakhir melebihi yang ada di baris pertama. Ini menyiratkan bahwa memperluas matriks ke kanan atau ke bawah tidak akan menyumbang angka Gryphon yang lebih rendah dari nangka terendah dalam matriks. Oleh karena itu, matriks dijamin mengandung nangka Gryphon terkecil. Akibatnya, nelemen unik terendah ke -nya adalah solusinya.


1
Apa-apaan, ini luar biasa!
IQuick 143

8

Haskell , 53 byte

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

Cobalah online!

Angka adalah Gryphon jika ada bilangan bulat dan sedemikian rupa sehingga .na2x2n=i=1xai

Kami membuat daftar semua yang tidak terbatas dari semua sehingga pencarian dengan kekerasan menunjukkan hal ini.n6

Jawabannya adalah fungsi indeks (tanpa indeks) ke dalam daftar ini, dilambangkan dalam Haskell as (list!!).

Mengapa itu a^y+n==n*a+abenar?

Dari rumus untuk menjumlahkan perkembangan geometrik :

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

yang kita miliki, membiarkan :(α,ρ,ν)=(a,a,x)

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

Mengatur ulang persamaan, kita mendapatkan .n(1a)=aax+1

Menyusun ulang itu lebih jauh, kita mendapatkan .ax+1+n=na+a

Substitusi dalam pencarian brute-force menghasilkan ekspresi akhir .y=x+1a^y+n=n*a+a

Apakah mencari sampai ncukup?

  • Jika (dengan kata lain, ), maka yang membuktikan . Jadi tidak masuk akal memeriksa salah satu nilai .a>nan+1

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

  • Demikian pula: jika , maka sekali lagi membuktikan .y>n

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

    Kita dapat mengasumsikan karena kita tahu , angka Gryphon terkecil.2n1>n+1n6


7

Python 3.8 (Pra-rilis) , 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]

Cobalah online!

Diindeks 0. Divisi integer harus digunakan di sini karena f (10000) meluap mengapung.

Menghasilkan semua angka Gryphon di mana dan , mengurutkannya, dan memilih elemen ke- .2an+22xn+2n

-6 byte terima kasih kepada Jonathan Allan

-3 byte terima kasih kepada ArBo. Saya hampir melakukan apa yang disarankannya sendiri, tetapi mencoba menggunakan {*(...)}yang tidak menghemat ruang

-11 byte berkat mathmandan

-7 byte terima kasih kepada ArBo

Bukti Matematika tentang Validitas

Menggunakan pengindeksan-demi bukti ini, meskipun konvensi matematika 1-diindeks.

  • Biarkan menjadi nomor Gryphon ke-Gnn
  • Misalkan (Nomor Gryphon dari dan )g(a,x)=a+a2+...+axax
  • Biarkan menjadi himpunan semua angka Gryphon di mana danAn2an+22xn+2
  • Kita tahu bahwaA0={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) untuk semua danax
  • g(a,x+1)<g(a+1,x+1) untuk semua danax
  • Karenanya jikaGn+1g(a+1,x+1)Gn=g(a,x)
  • g(a+1,x)<g(a+2,x) untuk semua danax
  • g(a,x+1)<g(a,x+2) untuk semua danax
  • Karenanya harus berupa atau jika karena tidak ada kemungkinan lain.Gn+1g(a+1,x)g(a,x+1)Gn=g(a,x)
  • Kita dapat menggunakan informasi ini untuk menyimpulkan bahwa jikaGn+1An+1GnAn
  • Karena kita tahu bahwa , kita dapat menggunakan aturan ini untuk menginduksi untuk semuaG0A0GnAnn
  • Karena ini dapat diterapkan dari ke , maka harus berada pada indeks dari jika dipesan dari yang terkecil hingga terbesarG0GnGnnAnAn

f=tidak perlu, dan lambda n,r=range:akan menghemat 4 lebih banyak ( seperti itu )
Jonathan Allan

Anda dapat menjatuhkan set()dan menggantinya dengan satu set pemahaman untuk mencapai 89
ArBo

Juga, Anda dapat menghapus tautan f=dari TIO dengan meletakkannya di header, seperti pada TIO dari 89-byter saya
ArBo

86 byte dengan Python 3.8 dan ekspresi penugasan
ovs

Pada baris "Karenanya Gn + 1 ≠ (a + 1, x + 1) jika Gn = g (a, x)" adalah kesalahan, seharusnya Gn + 1 ≠ g (a + 1, x + 1) jika ...
IQuick 143

5

J , 35 32 byte

-3 byte terima kasih kepada FrownyFrog

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

Cobalah online!

Penjelasannya sama seperti aslinya. Cukup gunakan formulir eksplisit untuk menyimpan byte menjadi menghapus beberapa @.

jawaban asli, diam-diam, dengan penjelasan: 35 byte

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

Cobalah online!

Mirip dengan pendekatan Luis Mendo, kami membuat "tabel kekuatan" (seperti tabel waktu) dengan baris atas 2 3 ... ndan kolom kiri 1 2 ... nmenghasilkan:

 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

^~/ >:membuat tabel, dan 1+i.@+&2membuat 1... nurutan, dan kami menambahkan 2 ( +&2) ke input untuk memastikan kami selalu memiliki cukup elemen untuk membuat tabel bahkan untuk 0 atau 1 input.

Setelah kita memiliki tabel di atas solusinya sepele. Kami hanya memindai jumlah baris +/\, dan kemudian menghapus baris pertama, ratakan, ambil unik, dan urutkan /:~@~.@,@}.. Akhirnya {menggunakan input asli untuk mengindeks ke dalam hasil itu, menghasilkan jawaban.


notasi eksplisit menghemat 3
FrownyFrog

terima kasih, tangkapan yang bagus.
Jonah

3

Gaia , 18 byte

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

Cobalah online!

Indeks berbasis 1.

Ini adalah jawaban yang agak menyedihkan dengan hidung panjang: )┅:Mungkin berharap itu bisa diturunkan lebih jauh.

Menyalin algoritma yang diberikan oleh jawaban Luis Mendo


3

R , 65 62 byte

-1 byte terima kasih kepada Giuseppe.

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

Cobalah online!

1-diindeks.

Menghasilkan matriks dari semua nilai dari bentuk , mengambil jumlah kumulatif, menghapus baris pertama (0s) dan baris kedua (entri yang sesuai dengan ), kemudian mengambil nilai yang diurutkan unik.aix=1

Perhatikan bahwa sort(unique(...))tidak akan berfungsi, karena uniqueakan memberikan baris unik dari matriks, dan bukan entri unik. Menggunakan unique(sort(...))karya karena sortdikonversi ke vektor.


Dibutuhkan sedikit lebih banyak pekerjaan, tetapi menggunakan tdan diffinvadalah 64 byte
Giuseppe

1
@Giuseppe Terima kasih! Saya tidak tahu diffinv. Saya golf 2 byte lagi dengan mengganti [-1:-2,]dengan [3:n,].
Robin Ryder

2

JavaScript (ES7), 76 byte

1-diindeks.

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

Cobalah online!


JavaScript (ES7), 89 byte

1-diindeks.

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

Cobalah online!



1

Arang , 36 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. 1-diindeks. Menggunakan algoritma Luis Mendo. Penjelasan:

Nθ

Masukan .n

FθFθ⊞υ

Buat -by- grid nomor Gryphon dan mendorong masing-masing untuk daftar yang telah ditetapkan.nn

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

Hitung angka Gryphon menggunakan fakta bahwa .1xai=ax+1aa1

F⊖θ≔Φυ›κ⌊υυ

Hapus angka Gryphon terendah .n1

I⌊υ

Cetak angka Gryphon yang tersisa terendah.


1

Japt , 23 byte

Yebus sayang! Entah saya benar - benar lupa bagaimana golf atau minuman keras akhirnya mengambil korban!

Bukan port langsung solusi Jonathan tetapi sangat terinspirasi oleh pengamatannya.

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

Cobalah


1

05AB1E , 12 byte

L¦ãε`LmO}êIè

Diindeks 0

Cobalah online atau verifikasi item pertaman .

Penjelasan:

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)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.