나는 특별한 N- 보나 치 번호입니까?


11

이 질문 에서 원래 @DJMcMayhem 발명 한 N-bonacci 시퀀스 는 정수 0과 1로 시작한 다음 이전 N 숫자를 더하여 다음 숫자를 생성하여 생성 된 시퀀스입니다. 특수 N- 보나 치 시퀀스는 0과 1 이외의 숫자 쌍으로 시작하는 N- 보나 치 시퀀스이며 X와 Y로 이름이 지정됩니다. N이 시퀀스에 이미있는 항의 수보다 큰 경우 사용 가능한 모든 항목을 추가하면됩니다. 자귀.

예를 들어, 정상적인 피보나치 수열은 요청한 사람에 따라 N이 2이고 (앞의 두 항목을 취함) X와 Y가 0과 1 또는 1과 1입니다.

당신의 작업 :

입력 된 정수 (A)가 다음 세 정수에 의해 생성 된 특수 N- 보나 치 시퀀스의 일부인지 확인하는 프로그램 또는 함수를 작성해야합니다 (두 번째 입력은 N으로, 세 번째와 네 번째는 X와 Y로 사용). . 특수한 경우 N = 1을 처리해야합니다.

입력:

네 개의 음이 아닌 정수, A, N, X 및 Y

산출:

A가 N, X 및 Y 입력에 의해 생성 된 N- 보나 치 시퀀스의 일부인지 여부를 나타내는 참 / 거짓 값입니다.

테스트 사례 :

Input:    Output:
13,2,0,1->truthy
12,3,1,4->falsy
4,5,0,1-->truthy
8,1,8,9-->truthy
9,1,8,9-->truthy

12,5,0,1->falsy  [0,1]>[0,1,1]>[0,1,1,2]>[0,1,1,2,4]>[0,1,1,2,4,8]>[0,1,1,2,4,8,16]>etc.  

채점 :

이것은 이므로 바이트 단위의 최저 점수가 이깁니다.


1
N==1그런 이상한 경우입니다.
Magic Octopus Urn

네,하지만 이상한 경우가이 재미를 만듭니다 :)
그리폰

실제로 사례를 처리하기 위해 답변을 N=1원한다면 많은 답변 (모든 현재 답변을 포함하여)이 엄격하게 증가하는 시리즈를 가정하는 실패 조건을 갖기 때문에 질문에서 사례 를 호출 할 수 있습니다. 또한, 수 XY음수? 아마도 기존의 모든 답변이 무효화 될 것입니다.
apillers

1
기존의 모든 답변이 X와 Y가 모두 0 인 비 증분 경우를 처리하지 못하는 것 같습니다. 이 경우도 처리해야합니까?
apillers

1
난 당신이 truthy 사례를 추가해야한다고 생각 8,1,8,9하고 9,1,8,9보장하기 위하여 N=1경우 처리가 반복되지 않은 감지 X값뿐만 아니라 Y값입니다. ( 0,0케이스 를 처리 하려면 추가해야합니다.)
apsillers

답변:


5

젤리 , 12 바이트

ḣ⁴S;µṀ<⁵µ¿⁵e

[X,Y],,을 (를 N) 복용하는 전체 프로그램 A.

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

어떻게?

ḣ⁴S;µṀ<⁵µ¿⁵e - Main link (monadic): [X,Y]
    µ   µ¿   - while:
     Ṁ       -   maximum value of the list
       ⁵     -   5th command line argument (3rd input) = A
      <      -   less than?
             - ...do:
 ⁴           -   4th command line argument (2nd input) = N
ḣ            -   head (get the first N (or less) items from the list)
  S          -   sum
   ;         -   concatenate (add the result to the front of the list)
          ⁵  - 5th command line argument (3rd input) = A
           e - exists in the resulting list?

우수한. 어쨌든 나를 위해 일하는 것 같습니다. +1
그리폰

반대로 A보다 크거나 같은 값까지 반전 된 N- 보나 치 수열을 보려면 ⁵e끝에서를 제거하십시오 . 그때는 효과가있을 것이라고 말하기가 훨씬 쉬워졌습니다 (처음 두 용어의 순서는 중요하지 않음).
Jonathan Allan

많은 테스트 사례를 시도 했으므로 누군가가 실패하면 찾지 못하면 나에게 좋습니다.
그리폰

5

05AB1E , 18 바이트

[DR²£O©‚˜³®>‹#]³QZ

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


용도 : [X,Y], N, A


의도하지 않은 기능으로 인해 필요 이상으로 힘들어졌습니다.

크거나 같지 않으며 이전에는 눈치 채지 못했습니다.

그리고 작동하지 않았으며 ]+1 바이트에 대해 필요했습니다 #]³.



3

펄 6 , 47 바이트

->\A,\N,\X,\Y{A∈(X,Y,{[+] @_.tail(N)}...*>A)}

그것을 테스트

넓히는:

->
  \A,
  \N,
  \X, \Y
{
    A          # is 「A」

              # an element of

    (          # this Sequence

      X, Y,        # seed values of sequence

      {            # generate the rest of the Seq using this code block

        [+]        # reduce by addition

          @_       # of all previously generated values
          .tail(N) # only use the last 「N」 of them
      }

      ...          # keep generating values until

      * > A        # it is greater than 「A」

    )
}


1

R , 69 60 바이트

function(a,n,l){while(l<a)l=c(sum(l[1:n],na.rm=T),l)
a%in%l}

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

익명 함수, taking a,n과 vector를 반환합니다 l=c(y,x). while(l<a)의 첫 번째 요소 만 확인하기 때문에 N- 보나 치 시퀀스를 거꾸로 구성합니다 (즉, 더 작은 인덱스가 시퀀스에 더 있음) l.


1

공통 리스프, 164 바이트

(defun f(a n x y &aux(l(list y x)))(if(= n 1)(or(= a x)(= a y))(loop(if(<= a(car l))(return(member a l))(setf l(cons(reduce'+ l)(if(<(length l)n)l(butlast l))))))))

이 함수는 Common Lisp NIL일반화 된 부울 정의에 따라 true, non-NIL을 리턴 합니다 .

(defun f(a n x y &aux (l (list y x)))    ; initialize a list l for the N values
  (if (= n 1)                            ; special case for N = 1
      (or (= a x) (= a y))               ;    true only if A = X or A = Y
      (loop
        (if (<= a (car l))               ; when the last number generated is greater than A
            (return (member a l))        ; return true if A is in the list
            (setf l (cons (reduce '+ l)  ; otherwise compute the sum of l
                          (if (< (length l) n)   ; and push it to l (truncating the list at 
                              l                  ; end if it has already size = N)
                              (butlast l))))))))

예를 들어 및 / 또는 언제 를 N=1감지하기 위한 특별한 경우 처리를 합니까? 나의 Lisp- 독해 기술은별로 좋지 않지만 두 초기 값 중 하나와 비교할 수있을 것 같습니다 . A12X=1 Y=2A
apillers

@apsillers, N = 1 일 때 A와 Y만이 아닌 X 만 비교합니다. 둘 중 하나와 같으면 true를 반환하는 것과 비교해야합니까? 이 경우 시퀀스가 ​​잘 정의되지 않았습니까?
Renzo

자, 이제 질문이 변경되었음을 확인하고 답변을 업데이트했습니다.
Renzo

0

k, 29 바이트

{x=*(*x>){(x=#y)_y,+/y}[y]/z}

온라인으로 사용해보십시오! 1진실하고 0거짓입니다. 입력은 [A;N;X,Y]입니다.


내가 본 모든 예제에서 실행했습니다. 1은 진실이고 0은 거짓입니다.
zgrep

@Gryphon 입력을 본문 대신 바닥 글로 옮겼지만 변경하려는 내용이 확실하지 않습니다. 둘 다 같은 기능이었습니다.
zgrep

아, 지금 봅니다. 나는 당신이 어떤 입력을받지 않는다고 생각했지만 코드에서 입력하고 있습니다. 이제 훨씬 더 이해가됩니다. 난 당신이 질문을 missinterpreted했던 가정 그래서 나는 그것이 출력 1 0 1 1이었다 않는 것 모두로, K를 모르는
그리폰


0

수학, 94 바이트

(s={#3,#4};t=1;While[t<#2-1,s~AppendTo~Tr@s;t++];!LinearRecurrence[1~Table~#2,s,#^2]~FreeQ~#)&


입력 형식

[A, N, X, Y]

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