ฉันเป็นหมายเลข N-bonacci พิเศษหรือไม่


11

ลำดับ N-bonacci ที่คิดค้นโดย @DJMcMayhem ในคำถามนี้เป็นลำดับที่สร้างโดยเริ่มต้นด้วยจำนวนเต็ม 0 และ 1 แล้วเพิ่มหมายเลข N ก่อนหน้าเพื่อสร้างหมายเลขถัดไป ลำดับ N-bonacci พิเศษคือลำดับ N-bonacci ที่เริ่มต้นด้วยตัวเลขอื่นที่ไม่ใช่ 0 และ 1 ซึ่งจะมีชื่อว่า X และ Y หาก N มากกว่าจำนวนคำที่มีอยู่ในลำดับเพียงเพิ่มทั้งหมดที่มีอยู่ เงื่อนไข

ตัวอย่างเช่นลำดับฟีโบนักชีปกติมี N ของ 2 (รับสองรายการก่อนหน้า) และ X และ Y ของ 0 และ 1 หรือ 1 และ 1 ขึ้นอยู่กับผู้ที่คุณถาม

งานของคุณ:

คุณต้องเขียนโปรแกรมหรือฟังก์ชั่นที่ตรวจสอบว่าจำนวนเต็ม (A) เป็นส่วนหนึ่งของลำดับ N-bonacci พิเศษที่สร้างขึ้นโดยจำนวนเต็มสามตัวถัดไป (ใช้อินพุตที่สองเป็น N และสามและสี่เป็น X และ Y) . ตรวจสอบให้แน่ใจว่าคุณจัดการกับกรณีพิเศษของ N = 1

การป้อนข้อมูล:

เลขจำนวนเต็มที่ไม่เป็นลบสี่จำนวนคือ A, N, X และ Y

เอาท์พุท:

ค่าความจริง / เท็จที่ระบุว่า A เป็นส่วนหนึ่งของลำดับ N-bonacci ที่สร้างโดยอินพุต N, X และ Y

กรณีทดสอบ:

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

อ๋อ แต่กรณีที่แปลกคือสิ่งที่ทำให้สนุกนี้ :)
Gryphon

หากคุณต้องการคำตอบเพื่อจัดการเคสN=1คุณอาจต้องการโทรหาคำถามเนื่องจากมีคำตอบมากมาย (รวมถึงคำตอบปัจจุบันทั้งหมดฉันคิดว่า) จะมีเงื่อนไขความล้มเหลวที่ถือว่าซีรีส์ที่เพิ่มขึ้นอย่างเคร่งครัด นอกจากนี้ยังสามารถXและYจะเป็นลบ? นั่นอาจจะทำให้คำตอบที่มีอยู่ทั้งหมดไม่ถูกต้อง
apsillers

1
ฉันคิดว่าคำตอบที่มีอยู่ทั้งหมดล้มเหลวในการจัดการกับกรณีที่ไม่เพิ่มขึ้นซึ่งทั้ง X และ Y เป็นศูนย์ จำเป็นต้องจัดการกับกรณีนี้ด้วยหรือไม่?
apsillers

1
ฉันคิดว่าคุณควรเพิ่มกรณีความจริง8,1,8,9และ9,1,8,9เพื่อให้แน่ใจว่าการN=1จัดการกรณีตรวจจับค่าที่ไม่ซ้ำXรวมทั้งYค่า (หากคุณต้องการจัดการกับ0,0คดีคุณควรเพิ่มเรื่องนั้นด้วย)
apsillers

คำตอบ:


5

เยลลี่ 12 ไบต์

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

สละโปรแกรมเต็มรูปแบบ[X,Y], ,NA

ลองออนไลน์!

อย่างไร?

ḣ⁴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
Gryphon

หากต้องการดูลำดับ N-bonacci กลับด้านเป็นค่าที่มากกว่าหรือเท่ากับ A เพียงลบค่าออก⁵eจากท้ายที่สุด ง่ายกว่ามากที่จะบอกว่ามันจะทำงานได้แล้ว (สังเกตว่าคำสั่งของสองคำแรกไม่มีผล)
Jonathan Allan

ลองใช้กรณีทดสอบมากมายดังนั้นถ้าไม่มีใครพบว่ามันล้มเหลวมันดีสำหรับฉัน
Gryphon

5

05AB1E , 18 ไบต์

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

ลองออนไลน์!


การใช้งาน: [X,Y], N, A


ฉันรู้สึกว่าฟังก์ชั่นที่ไม่ได้ตั้งใจทำให้มันยากกว่าที่คิดไว้

ไม่มีอะไรมากไปกว่าหรือเท่ากับไม่เคยสังเกตเห็นมาก่อน

และไม่ได้ทำงานและจำเป็นต้องใช้]สำหรับ 1 #]³ไบต์



3

Perl 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}

ลองออนไลน์!

ส่งกลับระบุชื่อฟังก์ชันการและเวกเตอร์a,n l=c(y,x)โครงสร้าง N ไม่ Bonacci ลำดับย้อนหลัง (กล่าวคือดัชนีที่มีขนาดเล็กเป็นต่อไปในลำดับ) เนื่องจากการตรวจสอบเพียงองค์ประกอบแรกของwhile(l<a)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))))))))

ฟังก์ชันนี้คืนค่าNILเป็นเท็จไม่ใช่ NIL สำหรับจริง (ตามคำนิยามของบูลีนทั่วไปของ Common LISP)

(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ตรวจจับสิ่งใดสิ่งAหนึ่งเช่นทั้ง1และ / หรือ2เมื่อX=1 Y=2ใด? ทักษะการอ่านเสียงกระเพื่อมของฉันไม่ดีนัก แต่ดูเหมือนว่าคุณอาจเปรียบเทียบAกับค่าเริ่มต้นหนึ่งในสองค่าเท่านั้น
apsillers

@apsillers เมื่อ N = 1 ฉันเปรียบเทียบ A เฉพาะกับ X และไม่ใช่กับ Y ฉันควรเปรียบเทียบกับทั้งสองคืนจริงถ้ามันเท่ากับหนึ่งของพวกเขา? บางทีลำดับอาจไม่ชัดเจนสำหรับกรณีนี้?
Renzo

ตกลงตอนนี้ฉันเห็นคำถามที่มีการเปลี่ยนแปลงฉันได้ปรับปรุงคำตอบของฉัน
Renzo

0

k, 29 ไบต์

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

ลองออนไลน์! 1เป็นความจริง0เป็นเท็จ [A;N;X,Y]การป้อนข้อมูลเป็น


ฉันวิ่งไปตามตัวอย่างทั้งหมดที่ฉันเห็น 1 คือความจริง 0 เป็นเท็จ
zgrep

@Gryphon ฉันย้ายอินพุตไปยังส่วนท้ายแทนที่จะเป็นเนื้อความ แต่ฉันไม่แน่ใจว่าคุณต้องการให้ฉันเปลี่ยนอะไร มันทั้งเป็นและเป็นฟังก์ชั่นเดียวกัน
zgrep

โอ้ฉันเห็นแล้ว ฉันคิดว่าคุณไม่ได้รับการป้อนข้อมูลใด ๆ แต่คุณได้รับรหัส ทำให้รู้สึกมากขึ้นในขณะนี้ ฉันไม่รู้ k ดังนั้นฉันคิดว่าคุณจะพลาดการตีความคำถามเพราะมันจะเป็นผลลัพธ์ 1 0 1 1
Gryphon


0

Mathematica, 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.