ลำดับการเกิดซ้ำของไบนารี


10

ลำดับการเกิดซ้ำแบบไบนารีเป็นลำดับที่กำหนดซ้ำแบบฟอร์มต่อไปนี้:

นิยามลำดับการเกิดซ้ำไบนารี

นี่เป็นลักษณะทั่วไปของลำดับฟีโบนักชี ( x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1) และลำดับลูคัส ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1)

ความท้าทาย

ป.ร. ให้ไว้n, x, y, a, alphaและbetaในรูปแบบใด ๆ ที่เหมาะสม, การส่งออกnระยะ TH ของที่สอดคล้องลำดับการเกิดซ้ำไบนารี

กฎระเบียบ

  • คุณอาจเลือกให้ลำดับเป็น 1 ดัชนีหรือดัชนี 0 แต่ตัวเลือกของคุณจะต้องสอดคล้องกันในทุกอินพุตและคุณต้องจดบันทึกตัวเลือกของคุณในคำตอบ
  • คุณอาจสมมติว่าจะไม่มีการป้อนข้อมูลที่ไม่ถูกต้อง (เช่นลำดับที่ยกเลิกก่อนหน้าnหรือลำดับที่อ้างอิงคำที่ไม่ได้กำหนดเช่นF(-1)หรือF(k)ที่ไหนk > n) เป็นผลมาจากสิ่งนี้xและyจะเป็นบวกเสมอ
  • อินพุตและเอาต์พุตจะเป็นจำนวนเต็มเสมอภายในขอบเขตของประเภทจำนวนเต็มตามธรรมชาติของภาษาของคุณ หากภาษาของคุณมีจำนวนเต็มไม่ จำกัด อินพุตและเอาต์พุตจะอยู่ในช่วง[2**31, 2**31-1](เช่นช่วงสำหรับจำนวนเต็มเสริมของ 32 บิตที่ลงชื่อสองบิต)
  • aจะมีyค่าที่แน่นอนเสมอ(ตามคำจำกัดความ)

กรณีทดสอบ

หมายเหตุ: กรณีทดสอบทั้งหมดได้รับการจัดทำดัชนี 0

x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1, n = 6 => 13
x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1, n = 8 => 47
x = 3, y = 5, a = [2, 3, 5, 7, 11], alpha = 2, beta = 3, n = 8 => 53
x = 1, y = 3, a = [-5, 2, 3], alpha = 1, beta = 2, n = 10 => -67
x = 5, y = 7, a = [-5, 2, 3, -7, -8, 1, -9], alpha = -10, beta = -7, n = 10 => 39

การaรับคำสั่งซื้อที่กลับรายการนั้นนับว่าสมเหตุสมผลหรือไม่
Dennis

@Dennis ใช่มันเป็นเช่นนั้น
Mego

ตกลงขอบคุณสำหรับการชี้แจง
Dennis

คำตอบ:


2

เยลลี่ 11 ไบต์

⁴Cịæ.⁵ṭµ¡⁶ị

ลองออนไลน์!  1  |  2  |  3  |  4  |  5 

มันทำงานอย่างไร

⁴Cịæ.⁵ṭµ¡⁶ị  Main link. Arguments: a; [x, y]; [α, β]; n (1-based)

       µ     Combine the links to the left into a chain.
        ¡    Execute that chain n times, updating a after each execution.
⁴              Yield [x, y].
 C             Complement; yield [1 - x, 1 - y].
  ị            Retrieve the elements of a at those indices.
               Indexing is 1-based and modular in Jelly, so this retrieves
               [a[-x], a[-y]] (Python syntax).
     ⁵         Yield [α, β].
   æ.          Take the dot product of [a[-x], a[-y]] and [α, β].
         ⁶   Yield n.
          ị  Retrieve the element of a at index n.

2

Python 2, 62 ไบต์

x,y,l,a,b=input();f=lambda n:l[n]if n<y else a*f(n-x)+b*f(n-y)

วิธีแก้ปัญหาแบบเรียกซ้ำโดยตรง อินพุตทั้งหมดนำมาจาก STDIN ยกเว้นnว่าเป็นอาร์กิวเมนต์ของฟังก์ชันการแยกที่อนุญาตโดยค่าเริ่มต้น (แม้ว่าจะเป็นที่ถกเถียงกัน)

มีไม่ดูเหมือนจะเป็นวิธีการประหยัดไบต์มีand/orในสถานที่ของif/elseเพราะl[n]อาจจะ falsey เป็น 0



2

JavaScript (ES6), 51 44 ไบต์

(x,y,z,a,b)=>g=n=>n<y?z[n]:a*g(n-x)+b*g(n-y)

โปรดทราบว่าฟังก์ชั่นบางส่วนได้รับการแก้ไขเช่นf(1,2,[1,1],1,1)(8)ส่งคืน 34 จะมีค่าใช้จ่าย 2 ไบต์เพื่อให้ฟังก์ชั่นระดับกลางเป็นอิสระจากกัน

แก้ไข: บันทึกแล้ว 7 ไบต์ขอบคุณ @Mego ชี้ให้เห็นว่าฉันมองข้ามไปว่าอาร์เรย์ที่ส่งผ่านมีyองค์ประกอบแรกของผลลัพธ์เสมอ


@ ฉันรู้ว่าฉันมักจะมองข้ามรายละเอียดของคำถาม แต่สิ่งนั้นทำให้ฉันรู้สึกว่าบอบบาง
Neil


0

J, 43 ไบต์

{:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.

ได้รับลำดับเริ่มต้นของคำคำนวณระยะต่อไปnครั้งโดยใช้พารามิเตอร์ของx , Y , αและβ หลังจากนั้นก็เลือกn THระยะในลำดับที่ขยายและเอาท์พุทว่ามันเป็นผลที่ตามมา

การใช้

เนื่องจาก J รองรับเฉพาะอาร์กิวเมนต์ 1 หรือ 2 เท่านั้นฉันจึงจัดกลุ่มพารามิเตอร์ทั้งหมดเป็นรายการของรายการแบบกล่อง เมล็ดพันธุ์เริ่มต้นค่าเป็นครั้งแรกตามด้วยพารามิเตอร์ของxและy ที่เป็นรายการตามด้วยพารามิเตอร์ของαและβเป็นรายการและลงท้ายด้วยค่าn

   f =: {:{](],(2>@{[)+/ .*]{~1-@>@{[)^:(3>@{[)>@{.
   2 3 5 7 11;3 5;2 3;8
┌──────────┬───┬───┬─┐
│2 3 5 7 11│3 5│2 3│8│
└──────────┴───┴───┴─┘
   f 2 3 5 7 11;3 5;2 3;8
53
   f _5 2 3 _7 _8 1 _9;5 7;_10 _7;10
39
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.