Trình tự tái phát nhị phân


10

Trình tự lặp lại nhị phân là trình tự được định nghĩa đệ quy có dạng sau:

định nghĩa trình tự tái phát nhị phân

Đây là một khái quát của chuỗi Fibonacci ( x = 1, y = 2, a = [1, 1], alpha = 1, beta = 1) và chuỗi Lucas ( x = 1, y = 2, a = [2, 1], alpha = 1, beta = 1).

Các thách thức

Với n, x, y, a, alpha, và beta, trong bất kỳ định dạng hợp lý, sản lượng nhạn thứ của chuỗi tái phát nhị phân tương ứng.

Quy tắc

  • Bạn có thể chọn trình tự là 1 chỉ mục hoặc 0 chỉ mục, nhưng lựa chọn của bạn phải nhất quán trên tất cả các đầu vào và bạn phải lưu ý lựa chọn của mình trong câu trả lời.
  • Bạn có thể cho rằng sẽ không có đầu vào không hợp lệ nào được đưa ra (chẳng hạn như một chuỗi kết thúc trước nhoặc một chuỗi tham chiếu các thuật ngữ không xác định, như F(-1)hoặc F(k)ở đâu k > n). Kết quả của việc này, xysẽ luôn tích cực.
  • Đầu vào và đầu ra sẽ luôn là số nguyên, trong phạm vi loại số nguyên tự nhiên của ngôn ngữ của bạn. Nếu ngôn ngữ của bạn có số nguyên không giới hạn, đầu vào và đầu ra sẽ nằm trong phạm vi [2**31, 2**31-1](tức là phạm vi cho số nguyên bổ sung hai chữ ký 32 bit).
  • asẽ luôn chứa ycác giá trị chính xác (theo định nghĩa).

Các trường hợp thử nghiệm

Lưu ý: tất cả các trường hợp thử nghiệm đều được lập chỉ mục 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

Liệu lấy atheo thứ tự đảo ngược là hợp lý?
Dennis

@Dennis Vâng, đúng vậy.
Mego

OK, cảm ơn đã làm rõ.
Dennis

Câu trả lời:


2

Thạch , 11 byte

⁴Cịæ.⁵ṭµ¡⁶ị

Hãy thử trực tuyến!  1  |  2  |  3  |  4  |  5 

Làm thế nào nó hoạt động

⁴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 byte

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

Một giải pháp đệ quy trực tiếp. Tất cả các đầu vào được lấy từ STDIN ngoại trừ nnhư là một đối số chức năng, một phân chia được cho phép theo mặc định (mặc dù có nội dung).

Dường như không có cách nào để lưu byte and/orthay if/elsel[n]có thể là falsey bằng 0.


2

Python 2, 59 byte

x,y,A,a,b,n=input()
exec'A+=a*A[-x]+b*A[-y],;'*n
print A[n]

Kiểm tra nó trên Ideone .


2

JavaScript (ES6), 51 44 byte

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

Lưu ý rằng hàm bị cắt một phần, ví dụ f(1,2,[1,1],1,1)(8)trả về 34. Sẽ tốn 2 byte để làm cho các hàm trung gian độc lập với nhau (hiện tại chỉ có hàm được tạo cuối cùng hoạt động chính xác).

Chỉnh sửa: Đã lưu 7 byte nhờ @Mego chỉ ra rằng tôi đã bỏ qua rằng mảng truyền vào luôn chứa các yphần tử đầu tiên của kết quả.


@Mego Tôi biết tôi thường bỏ qua chi tiết các câu hỏi nhưng câu hỏi đó khiến tôi đặc biệt tinh tế.
Neil

2

Haskell, 54 48 byte

l@(x,y,a,p,q)%n|n<y=a!!n|k<-(n-)=p*l%k x+q*l%k y

0

J, 43 byte

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

Với một chuỗi ban đầu từ ngữ Một , tính nhiệm kỳ tiếp theo n lần sử dụng các thông số của x , y , αβ . Sau đó, nó chọn thuật ngữ thứ n trong chuỗi mở rộng và đưa ra kết quả.

Sử dụng

Vì J chỉ hỗ trợ 1 hoặc 2 đối số, tôi nhóm tất cả các tham số dưới dạng danh sách các danh sách được đóng hộp. Các giá trị hạt giống ban đầu A là đầu tiên, theo sau là các tham số của xy dưới dạng danh sách, theo sau là các tham số của αβ dưới dạng danh sách và kết thúc bằng giá trị 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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.