나라야나-지덱-카펠 숫자


17

입력 n이 주어지면 n 번째 Narayana-Zidek-Capell 수를 생성하십시오 . 가장 적은 바이트가 이깁니다.

f (1) = 1, f (n)은 이전 층 (n / 2) Narayana-Zidek-Capell 항의 합계입니다.

테스트 사례 :

f(1)=1

f(9)=42

f(14)=1308

f(15)=2605

f(23)=664299

12
프로그래밍 퍼즐 및 코드 골프에 오신 것을 환영합니다! 이것은 좋은 첫 번째 도전입니다. 궁극적으로 귀하에게 달려 있지만 일반적으로 답변을 받기 위해 적어도 일주일을 기다리는 것이 좋습니다. 조기에 답변을 받으면 다른 사용자에게 도전이 끝났음을 알리는 신호를 보내 참여를 방해 할 수 있습니다.
Alex A.

답변:


6

젤리, 11 10 바이트

HĊrµṖ߀Sȯ1

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

n인수로 취하여 결과를 인쇄합니다.

설명

H              divide input by 2
 Ċ             round up to get first n to recurse
  r            inclusive range from that to n
   µ           (chain separator)
    Ṗ          remove n itself from the range
     ߀        call self recursively on each value in the range
       S       sum results
        ȯ1     if sum was zero, return one

7

루비, 34 32 바이트

Narayana-Zidek-Cappell 숫자에 대한 OEIS 페이지의 수식을 사용 합니다 .

편집 : feersum과 Neil 덕분에 연산자 우선 순위를 사용하여 괄호를 제거했습니다.

f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]}

반드시 괄호가 필요하지 x%2않습니까?
feersum

글쎄, 당신이 x%2*적어도 넣어도 아닙니다 .
Neil

@feersum와 Neil 감사합니다
Sherlock9

이전 질문 편집은 공식이 x<2?... 이라고 제안했습니다. 이것은 훨씬 명확하게 감사합니다!
Neil

6

파이썬 2, 48 42 38 36 바이트

OEIS 페이지에서 가져온 알고리즘. 아무런 영향없이 n<3변경 될 수 있습니다 n<4. 양의 정수인 nth 수를 리턴합니다 n.

a=lambda n:n<3or 2*a(n-1)-n%2*a(n/2)

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


5

05AB1E, 16 바이트

05AB1E와 같은 반복 솔루션에는 기능이 없습니다.

X¸sGDN>;ï£Os‚˜}¬

X¸               # initialize a list with 1
  sG          }  # input-1 number of times do
    D            # duplicate current list
     N>;ï£       # take n/2 elements from the list
          O      # sum those elements
           s‚˜   # add at the start of the list
               ¬ # get the first element and implicitly print

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


5

C, 38

OEIS 알고리즘의 번역. 여기에는 C 코드가 충분하지 않습니다!

f(n){return n<3?:2*f(n-1)-n%2*f(n/2);}

어떻게 n<3?:(...)작동합니까?
LegionMammal978

2
중간 표현식이 누락되면 조건부 자체로 평가되는 GCC 확장 (clang에서도 작동하는 것으로 간주 됨)입니다. 참조 관련 GCC 페이지이 SO 질문 자세한 내용을.
owacoder

4

파이썬 3, 67 바이트

def f(n):
 x=1,
 for i in range(n):x+=sum(x[-i//2:]),
 print(x[-1])

인수를 통해 입력을 받아 STDOUT에 인쇄하는 함수입니다. 이것은 정의를 직접 구현 한 것입니다.

작동 원리

def f(n):               Function with input target term index n
 x=1,                   Initialise term list x as tuple (1)
 for i in range(n):...  For all term indices in [0,n-1]...
 x[-i//2:]              ..yield the previous floor(i/2) terms...
 x+=sum(...)            ...and append their sum to x
 print(x[-1])           Print the last term in x, which is the nth term

Ideone에서 사용해보십시오



3

수학, 38 바이트

If[#<4,1,2#0[#-1]-#~Mod~2#0[(#-1)/2]]&

익명의 기능. 𝑛를 입력으로 사용하고 𝑓 (𝑛)을 출력으로 반환합니다. Ruby 솔루션을 기반으로합니다.


내장되어 있지 않습니까?
Insane

@Insane 아니요, 내장 기능이 없습니다.
LegionMammal978

놀랍습니다!
Insane

2

하스켈, 34 바이트

f 1=1
f n=sum$f<$>[n-div n 2..n-1]

사용 예 : f 14-> 1308.

정의의 직접적인 구현.


2

자바, 63 바이트

int z(int n){return n<3?1:n%2>0?(2*z(n-1)-z(n/2)):(2*z(n-1));}

1

이동, 63 바이트

func f(i int) int{if(i<4){return 1};return 2*f(i-1)-i%2*f(i/2)}

C 답변에서 거의 직접 포트


0

PHP, 81 바이트

이것은 재귀없는 전체 프로그램입니다. 재귀 함수는 52 바이트로 정의 할 수 있지만 (이를 능가 할 수는 있지만) sherlock9의 대답의 지루한 포트 일뿐입니다 (그리고 f (100) 이상을 요구하면 오류가 발생합니다). 더 길고 재미있는 버전

<?php for($i=$argv[1];$j=$i;$i--)for(;--$j*2>=$i;)$a[$j]+=$a[$i]?:1;echo$a[1]?:1;

많은 (O [n]) 통지를 유발하지만 괜찮습니다.


O(n)통지? 응?
고양이

알림은 실행을 중지하지 않고 프로덕션 환경에서 일반적으로 침묵하는 비 위험 오류 유형입니다. 배열에서 선언되지 않은 변수 또는 정의되지 않은 오프셋의 값을 얻으려고 할 때마다 통지를받습니다. 이 프로그램은 O [n] 정의되지 않은 오프셋 (및 선언되지 않은 두 변수도)의 값을 얻으려고 시도하므로 O [n] 통지를받습니다.
user55641

0

R, 55 바이트

x[1]=1;for(i in 2:10){x[i]=sum(x[i-1:floor(i/2)])};x[9]

변경 10에서 for루프와 x[9]사용자가 원하는 어느 인덱스를 얻을 수 있습니다.


다음은 54 바이트 길이의 재귀 버전입니다. f=function(n)ifelse(n<4,1,2*f(n-1)-n%%2*f(floor(n/2)))
DSkoog

0

자바 스크립트, 54 52

f=n=>Math.round(n<3?1:2*f(n-1)-n%2*f(parseInt(n/2)))

C 답변을 기반으로합니다 .

  • parseInt대신 에 사용하여 2 바이트 절약Math.floor

0

메이플, 46 44 바이트

`if`(n<4,1,2*f(n-1)-(n mod 2)*f(floor(n/2)))

용법:

> f:=n->`if`(n<4,1,2*f(n-1)-(n mod 2)*f(floor(n/2)));
> seq( f(i), i = 1..10 );
  1, 1, 1, 2, 3, 6, 11, 22, 42, 84

0

R, 63 바이트

f=function(n,a=0)if(n<2)1 else{for(i in n-1:(n%/%2))a=a+f(i);a}

a=0두 개의 중괄호를 저장하므로 기본으로 추가됩니다. 함수는 필요에 따라 재귀 적으로 호출합니다.

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