N 번째 그리폰 번호


26

나는 다른 날에 일련의 숫자를 생각해 내고 OEIS 번호가 무엇인지 확인하기로 결정했습니다. 놀랍게도 시퀀스는 OEIS 데이터베이스에없는 것처럼 보였으므로 나 자신의 이름을 따서 시퀀스 이름을 지정하기로 결정했습니다. 이 순서의 실제 이름은 주석을 달고 질문 제목을 변경하겠습니다.) 어디에서나 시퀀스를 찾을 수 없었기 때문에 "Gryphon Numbers"라는 이름을 붙였습니다. 편집 : @Surb 덕분 에이 시퀀스가 ​​OEIS 시퀀스 A053696-1 과 동일하다는 사실에 주목했습니다 .

그리폰 번호는 a+a2+...+ax 형식 숫자입니다 . . . + a x (여기서 ax 는 모두 2 이상의 정수이며, 그리폰 시퀀스는 모든 그리폰 번호의 집합이 오름차순 임) 그리폰 번호를 형성하는 여러 방법이있는 경우 (첫 번째 예는 30 이며, 이는 2+22+23+245+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
그리폰 시퀀스는 A053696-1입니다 . 즉, A053696은 형식의 숫자가 증가하는 시퀀스입니다 . 에이0+에이1++에이엑스
Surb

2
@Surb 아, 그래서 나는 그것을 찾을 수 없었습니다. 이 경우 해당 정보를 편집에 넣을 것이지만 시퀀스의 이름이 더 나은 것처럼 보이지 않으므로 나머지 질문은 그대로 유지하십시오.
그리폰-복원 모니카

답변:


15

젤리 , 9 바이트

bṖ’ḅi-µ#Ṫ

STDIN에서 (1 인덱스) 정수를 읽고 결과를 인쇄하는 전체 프로그램입니다.

온라인으로 사용해보십시오!

방법?

그리폰 번호는 모든 자릿수가 가장 중요하지 않은 숫자 (0)를 제외하고 1보다 작은 밑수로 표현할 수있는 숫자입니다. 예를 들면 다음과 같습니다.

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

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

이 프로그램은을 가져 와서 n시작 v=0하고이 속성을 테스트하여 해당 숫자를 v찾을 때까지 증가한 n다음 마지막 값을 출력합니다.

베이스 시험 b은 기지국에서 각 자리에서 하나 뺀 수를 변환 v하고 검사 결과 인 경우 1 . ( b보다 작은 참고 v)

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

8440×84+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가장 작은 그리폰 번호 는 아닙니다 . 그러나 왼쪽 하단 항목 2+2^+···+2^n 이 오른쪽 상단 항목을 초과 n+n^2하므로 마지막 행의 모든 ​​숫자가 첫 번째 행의 숫자를 초과합니다. 이것은 매트릭스를 오른쪽 또는 아래쪽으로 확장해도 그리폰 번호 n가 매트릭스에서 가장 낮은 숫자 보다 낮게 영향을 미치지 않습니다 . 따라서 매트릭스에는 n가장 작은 그리폰 번호 가 포함되어 있습니다 . 결과적으로 n가장 낮은 고유 요소가 솔루션입니다.


1
도대체 이건 대단해!
IQuick 143

8

하스켈 , 53 바이트

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

온라인으로 사용해보십시오!

숫자 정수가 존재한다면 그리핀이다 2X2 되도록 N = Σ는 X = 1 I .에이2엑스2=나는=1엑스에이나는

우리는 모든 6 의 무한 목록을 생성하여 무차별 대입 검색이이를 보여줍니다.

정답은이 목록에 대한 인덱스가 0 인 인덱스 함수이며 Haskell로 표시됩니다 (list!!).

a^y+n==n*a+a정확합니까?

가입일 기하학적 진행 합산 식 :

나는=1ναρ나는1=α(1ρν)1ρ

우리는 (α,ρ,ν)=(에이,에이,엑스) :

=나는=1엑스에이나는=에이(1에이엑스)1에이=에이에이엑스+11에이.

방정식을 재정렬하면 (1에이)=에이에이엑스+1 됩니다.

더 정리 에이엑스+1+=에이+에이 됩니다.

치환 와이=엑스+1 무차별 검색의 최종 표현을 산출 a^y+n=n*a+a.

n충분히 검색 할까요?

  • 만약 > N (즉, N + 1 ), 다음 Y + N > 2( N + 1 ) = N + 증명하는 Y + NN + . 따라서 a > n 값을 확인하는 것은 의미가 없습니다 .에이>에이+1

    에이와이+>에이2(+1)에이=에이+에이
    에이와이+에이+에이에이>

  • 마찬가지로 : 만약 와이> 다음 Y + N > N = N - 12 N - 1 * > ( N + 1 ) = N + , 다시 증명 Y + NN + a .

    에이와이+>에이=에이1에이21에이>(+1)에이=에이+에이,
    에이와이+에이+에이

    그리폰 번호가 가장 작은n6이므로21>+1이라고 가정 할 수 있습니다.6


7

Python 3.8 (시험판) , 98 92 89 78 71 바이트

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

온라인으로 사용해보십시오!

인덱스가 0입니다. f (10000) 오버플로가 발생하기 때문에 정수 나누기를 사용해야합니다.

2에이+22엑스+2

Jonathan Allan 덕분에 -6 바이트

ArBo 덕분에 -3 바이트. 나는 그가 제안한대로 거의했지만 {*(...)}공간을 절약하지 못한

mathmandan 덕분에 -11 바이트

ArBo 덕분에 -7 바이트

수학적 유효성 증명

이 규칙을 위해 0- 인덱싱을 사용하지만 수학 규칙은 1- 인덱싱입니다.

  • (에이,엑스)=에이+에이2+...+에이엑스에이엑스
  • 에이2에이+22엑스+2
  • 에이0={(2,2)}={6}={0}
  • 에이+1={(에이,엑스),(에이+1,엑스),(에이,엑스+1),(에이+1,엑스+1)|(에이,엑스)에이}
  • (에이+1,엑스)<(에이+1,엑스+1)에이엑스
  • (에이,엑스+1)<(에이+1,엑스+1)에이엑스
  • +1(에이+1,엑스+1)=(에이,엑스)
  • (에이+1,엑스)<(에이+2,엑스)에이엑스
  • (에이,엑스+1)<(에이,엑스+2)에이엑스
  • +1(에이+1,엑스)(에이,엑스+1)=(에이,엑스)
  • +1에이+1에이
  • 0에이0에이
  • 0에이에이

f=불필요하고, lambda n,r=range:4 개의 저장됩니다 ( 같은 )
조나단 앨런

set()
빼고

또한, f=89 비트
ArBo

Python 3.8 및 할당 표현식을 사용한 86 바이트
ovs

"Gn = g (a, x)"인 경우 "따라서 Gn + 1 ≠ (a + 1, x + 1)"라인에서 실수이면 Gn + 1 ≠ g (a + 1, x + 1)이어야합니다. ...
IQuick 143

5

J , 35 32 바이트

FrownyFrog 덕분에 -3 바이트

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

온라인으로 사용해보십시오!

설명은 원본과 동일합니다. 바이트를 저장하기 위해 명시 적 형식을 사용하면 여러 개를 제거 할 수 @있습니다.

원래 답변, 암묵적인 설명 : 35 바이트

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

온라인으로 사용해보십시오!

Luis Mendo의 접근 방식과 유사하게 상단 행 2 3 ... n과 왼쪽 열이 있는 "전원 테이블"(시간 테이블과 같은)을 만듭니다 1 2 ... n.

 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

^~/ >:테이블을 1+i.@+&2생성하고 1... n시퀀스를 생성하고 +&2입력에 2 ( )를 추가 하여 0 또는 1 개의 입력에도 테이블을 생성 할 수있는 충분한 요소를 항상 확보 할 수 있습니다.

위의 표를 얻은 후에는 해결책이 간단합니다. 우리는 행을 스캔 +/\한 다음 첫 번째 행을 제거하고 평평하게하고 고유하게하고 정렬 /:~@~.@,@}.합니다. 마지막으로 {원래 입력을 사용하여 해당 결과를 색인화하여 답을 만듭니다.


명시 적 표기법으로 3
FrownyFrog

고마워요
요나


3

R , 65 62 바이트

주세페 덕분에 -1 바이트.

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

온라인으로 사용해보십시오!

1- 색인.

에이나는엑스=1

참고 sort(unique(...))로, 것없는 일을 unique행렬의 고유 한 행, 그리고 고유의 항목을 줄 것입니다. 사용 unique(sort(...))하기 때문에 작품을 sort변환 벡터 수 있습니다.


그것은 조금 더 작업이 필요하지만 사용 t하고 diffinv있다 64 바이트
주세페

1
@Giuseppe 감사합니다! 몰랐어요 diffinv. 로 교체 [-1:-2,]하여 다른 2 바이트를 골프 다운 했습니다 [3:n,].
로빈 라이더



1

, 36 바이트

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

온라인으로 사용해보십시오! 링크는 자세한 버전의 코드입니다. 1- 색인. Luis Mendo의 알고리즘을 사용합니다. 설명:

Nθ

FθFθ⊞υ

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

1엑스에이나는=에이엑스+1에이에이1

F⊖θ≔Φυ›κ⌊υυ

1

I⌊υ

가장 낮은 잔여 그리폰 번호를 인쇄하십시오.


1

Japt , 23 바이트

친애하는 Jebus! 어느 나는 정말 골프 나 술에 마지막으로 그것의 통행세를 복용하는 방법을 잊어 버린!

조나단의 해결책의 직접적인 항구는 아니지만 그의 관찰에 많은 영감을 받았습니다.

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

시도 해봐


1

05AB1E , 12 바이트

L¦ãε`LmO}êIè

0 인덱스

온라인으로 시도 하거나 첫 번째 확인하십시오. 항목을 .

설명:

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)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.