N-й грифон номер


26

Я придумал ряд цифр на днях и решил проверить, что это за номер OEIS. К моему большому удивлению, последовательность, по-видимому, отсутствует в базе данных OEIS, поэтому я решил назвать эту последовательность после себя (обратите внимание, что кто-то, кто намного умнее меня, возможно, уже придумал это, и если кто-то найдет Фактическое название этой последовательности, пожалуйста, прокомментируйте, и я изменю название вопроса). Так как я не мог найти где - нибудь последовательность, я решил назвать его в честь себя, следовательно , «Грифон номера». РЕДАКТИРОВАТЬ: Спасибо @Surb за внимание к тому факту, что эта последовательность равна последовательности OEIS A053696 - 1.

Число Gryphon - это число вида a+a2+,,,+aИкс , где a и Икс являются целыми числами, большими или равными двум, а последовательность Gryphon представляет собой набор всех чисел Gryphon в порядке возрастания. Если существует несколько способов формирования числа Gryphon (первый пример - 30 , который равен 2+22+23+24 и 5+52 ), число учитывается только один раз в последовательности. Первые несколько чисел Gryphon:6,12,14,20,30,39,42,56,62,72 .

Твое задание:

Напишите программу или функцию, которая получает целое число n качестве входных данных и выводит номер n го грифона.

Входные данные:

Целое число от 0 до 10000 (включительно). Вы можете рассматривать последовательность как 0-индексированную или 1-индексированную, в зависимости от того, что вы предпочитаете. Пожалуйста, укажите, какую систему индексации вы используете в своем ответе, чтобы избежать путаницы.

Выход:

Номер Грифон, соответствующий вход.

Тестовые случаи:

Пожалуйста, обратите внимание, что это предполагает, что последовательность 0-индексирована. Если ваша программа использует последовательность с 1 индексом, не забудьте увеличить все введенные числа.

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

Подсчет очков:

Это , поэтому выигрывает самая низкая оценка в байтах.


6
Последовательность Gryphon A053696 - 1. Другими словами, A053696 - это возрастающая последовательность чисел вида . a0+a1++aИкс
Сурб

2
@ Ага, вот почему я не смог его найти. В этом случае я внесу эту информацию в редактирование, но оставлю остальную часть вопроса такой, какой она есть, поскольку, кажется, нет лучшего названия для последовательности.
Грифон - Восстановить Монику

Ответы:


15

Желе , 9 байт

bṖ’ḅi-µ#Ṫ

Полная программа, которая читает (1-индексированное) целое число из STDIN и печатает результат.

Попробуйте онлайн!

Как?

Число Gryphon - это число, которое может быть выражено на основе меньше, чем она сама, так что все цифры являются единицами, кроме наименее значимого, что является нулем. Например:

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

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

Эта программа берет n, затем запускает v=0и проверяет это свойство и увеличивает vего до тех пор, пока не найдет nтакие числа, а затем выводит окончательное значение.

Чтобы проверить базу b число, оно вычитает по одному из каждой цифры, конвертирует из базового vи затем проверяет, равен ли результат 1 . (Обратите внимание, что bменьше, чем 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 байт

:Qtt!^Ys+uSG)

1 на основе.

Попробуйте онлайн!

объяснение

Рассмотрим ввод n = 3в качестве примера.

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

Матрица, полученная на шаге (*), содержит, возможно, повторяющиеся числа грифонов. В частности, nв первом ряду он содержит разные числа грифонов. Это не обязательно самые nмаленькие цифры Gryphon. Однако левая нижняя запись 2+2^+···+2^n превышает правую верхнюю запись n+n^2, и, таким образом, все числа в последнем ряду превышают числа в первом ряду. Это подразумевает, что расширение матрицы вправо или вниз не приведет к тому, что число грифонов будет меньше, чем самые низкие nчисла в матрице. Следовательно, матрица гарантированно содержит nнаименьшие числа грифонов. Следовательно, его nвторым самым низким уникальным элементом является решение.


1
Какого черта, это удивительно!
IQuick 143

8

Haskell , 53 байта

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

Попробуйте онлайн!

Число N является грифоном, если существуют целые числа a2 и Икс2 такие что Nзнак равноΣязнак равно1Иксaя .

Мы генерируем бесконечный список всех N6 такой, что поиск методом грубой силы показывает, что это так.

Ответом является индексная функция с нулевым индексом в этом списке, обозначаемая в Haskell как (list!!).

Почему a^y+n==n*a+aправильно?

Из формулы для суммирования геометрической прогрессии :

Σязнак равно1ναρя-1знак равноα(1-ρν)1-ρ

имеем: (α,ρ,ν)знак равно(a,a,Икс) :

Nзнак равноΣязнак равно1Иксaязнак равноa(1-aИкс)1-aзнак равноa-aИкс+11-a,

Переставляя уравнение, мы получаем N(1-a)знак равноa-aИкс+1 .

Переставив это еще дальше, мы получим ax+1+n=na+a .

Подстановка y=x+1 в поиске методом грубой силы дает окончательное выражение a^y+n=n*a+a.

nДостаточно ли поиска ?

  • a>n (in other words, an+1), then

    ay+n>a2(n+1)a=na+a
    which proves ay+nna+a. So there's no sense checking any of the values a>n.

  • y>n

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

    We can assume 2n1>n+1 because we know n6, the smallest Gryphon number.


7

Python 3.8 (Pre-release), 98 92 89 78 71 bytes

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

Try it online!

0-indexed. Integer division must be used here because f(10000) overflows floats.

Generates all Gryphon numbers where 2an+2 and 2xn+2, sorts them, and selects the nth element.

-6 bytes thanks to Jonathan Allan

-3 bytes thanks to ArBo. I almost did as he suggested myself, but tried to use {*(...)} which didn't save space anyway

-11 bytes thanks to mathmandan

-7 bytes thanks to ArBo

Mathematical Proof of Validity

Using 0-indexing for the sake of this proof, even though mathematical convention is 1-indexed.

  • Let Gn be the nth Gryphon number
  • Let g(a,x)=a+a2+...+ax (The Gryphon number from a and x)
  • Let An be the set of all Gryphon numbers where 2an+2 and 2xn+2
  • We know that 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

В строке «Следовательно, Gn + 1 ≠ (a + 1, x + 1), если Gn = g (a, x)», является ошибкой, это должно быть Gn + 1 ≠ g (a + 1, x + 1), если ...
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 байта

Дорогой Джебус! Либо я действительно забыл, как играть в гольф, либо выпивка наконец берет свое!

Не прямой путь решения Джонатана, но очень вдохновленный его наблюдением.

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

Попытайся


1

05AB1E , 12 байтов

L¦ãε`LmO}êIè

0 индексированные

Попробуйте онлайн или проверьте первыйNпредметы .

Объяснение:

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)
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.