Trình tự Divinacci


23

Divinacci ( OEIS )

Thực hiện chuỗi Fibonacci nhưng thay vì sử dụng:

f(n) = f(n-1)+f(n-2)

Sử dụng:

f(n) = sum(divisors(f(n-1))) + sum(divisors(f(n-2)))

Đối với đầu vào n, xuất ra thuật ngữ thứ n, chương trình của bạn chỉ nên có 1 đầu vào.


14 thuật ngữ đầu tiên (0 chỉ mục, bạn có thể 1 chỉ mục; trạng thái bạn đã sử dụng):

0  | 0     # Initial               | []
1  | 1     # Initial               | [1] => 1
2  | 1     # [] + [1]              | [1] => 1
3  | 2     # [1] + [1]             | [1,2] => 3
4  | 4     # [1] + [1,2]           | [1,2,4] => 7
5  | 10    # [1,2] + [1,2,4]       | [1,2,5,10] => 18
6  | 25    # [1,2,4] + [1,2,5,10]  | [1,5,25] => 31
7  | 49    # [1,2,5,10] + [1,5,25] | [1,7,49] => 57
8  | 88    # [1,5,25] + [1,7,49]   | [1, 2, 4, 8, 11, 22, 44, 88] => 180
9  | 237   # [1,7,49] + [180]      | [1, 3, 79, 237] => 320
10 | 500   # [180] + [320]         | [1, 2, 4, 5, 10, 20, 25, 50, 100, 125, 250, 500] => 1092
11 | 1412  # [320] + [1092]        | [1, 2, 4, 353, 706, 1412] => 2478
12 | 3570  # [1092] + [2478]       | [1, 2, 3, 5, 6, 7, 10, 14, 15, 17, 21, 30, 34, 35, 42, 51, 70, 85, 102, 105, 119, 170, 210, 238, 255, 357, 510, 595, 714, 1190, 1785, 3570] => 10368
13 | 12846 # [2478] + [10368]      | [1, 2, 3, 6, 2141, 4282, 6423, 12846] => 25704
Etc...

Bạn có thể chọn hay không bao gồm 0. Đối với những người lãnh đạo thực hiện: các ước của 0những []nhằm mục đích thách thức này.

Đó là số đếm byte thấp nhất của ...


15
Tất cả các số tự nhiên chia 0 , do đó tổng số chia của nó là + .
Dennis

9
@Dennis cuối cùng cũng có người không nghĩ rằng 1 + 2 + 3 + ... = -1/12.
Rò rỉ Nun

1
@Dennis Chúng tôi có thể thoát khỏi 0 và làm cho điều này hợp lệ mặc dù: P. Hoặc bạn chỉ có thể gửi câu trả lời Mathicala Infinitynếu bạn muốn.
Bạch tuộc ma thuật Urn

Câu trả lời Jelly sẽ ngắn hơn. : P Bạn có thể thay đổi trình tự (câu trả lời có thể cũng cần điều chỉnh) hoặc thay đổi mô tả của nó (bắt đầu với các giá trị cơ bản 0, 1, 1 ).
Dennis

1
@carusocomputing Nếu nó không thay đổi trình tự, làm thế nào nó có thể ảnh hưởng đến câu trả lời?
Martin Ender

Câu trả lời:


10

05AB1E , 9 byte

XÎFDŠ‚ÑOO

Hãy thử trực tuyến!

Giải trình

XÎ          # initialize stack with 1,0,input
  F         # input times do
   D        # duplicate
    Š       # move down 2 places on the stack
     ‚      # pair the top 2 elements on the stack
      Ñ     # compute divisors of each
       OO   # sum twice

Hàng tấn hoán đổi đang diễn ra heh! Hấp dẫn.
Bạch tuộc ma thuật Urn

2
Tôi thích cách các byte cuối cùng la hét mạnh mẽ với người đọc.
Rohan Jhunjhunwala

1
Bạn đã giành được điều này sau 2 phút lol.
Bạch tuộc ma thuật Urn

8

Toán học, 45 40 byte

If[#<3,1,Tr@Divisors@#0[#-i]~Sum~{i,2}]&

Chức năng ước liên quan của Mathematica Divisors, DivisorSumDivisorSigmatất cả đều không xác định cho n = 0 (đúng như vậy), vì vậy chúng tôi bắt đầu từ f(1) = f(2) = 1và không hỗ trợ đầu vào 0.

Xác định nó là toán tử thay vì sử dụng hàm không tên có vẻ dài hơn hai byte:

±1=±2=1
±n_:=Sum[Tr@Divisors@±(n-i),{i,2}]

* 7 byte dài hơn trừ khi ±là 1 byte trong mã hóa được hỗ trợ Mathicala.
Máy

@CalculatorFeline Đó là. (Cài đặt mặc định cho $CharacterEncodingcác máy Windows là WindowsANSICP 1252.)
Martin Ender

1
Tốt để biết. .
Máy




3

MATL, 16 15 byte

Oliq:",yZ\s]+]&

Giải pháp này sử dụng lập chỉ mục dựa trên 0.

Dùng thử tại MATL Online

Giải trình

O        % Push the number literal 0 to the stack
l        % Push the number literal 1 to the stack
i        % Explicitly grab the input (n)
q        % Subtract 1
:        % Create the array [1...(n - 1)]
"        % For each element in this array...
  ,      % Do the following twice
    y    % Copy the stack element that is 1-deep
    Z\   % Compute the divisors
    s    % Sum the divisors
  ]      % End of do-twice loop
  +      % Add these two numbers together
]        % End of for loop
&        % Display the top stack element

3

Thạch , 10 9 byte

ð,ÆDẎSð¡1

Hãy thử trực tuyến!

Cảm ơn Dennis cho -1.



@Dennis The 0đã ngầm?
Erik the Outgolfer

Khi bạn lấy số lần lặp từ STDIN, bạn sẽ nhận được chuỗi niladic và 0 là đối số ngầm của chuỗi niladic.
Dennis

@Dennis Vì vậy ¡, những người khác sẽ chỉ cố gắng đưa ra một cuộc tranh luận từ khắp mọi nơi, ngay cả với một Ɠ? Điều đó khá bất ngờ ...
Erik the Outgolfer

Trừ khi được chỉ định rõ ràng, ¡et al. lấy đối số dòng lệnh cuối cùng và, nếu không có, đọc một dòng từ STDIN.
Dennis





1

R, 81 byte

f=function(n,a=1,b=1,d=numbers::divisors)`if`(n-1,f(n-1,b,sum(d(a))+sum(d(b))),a)

1 được lập chỉ mục và loại trừ 0 khi bắt đầu chuỗi. Số không đó đã cho tôi rất nhiều rắc rối để thực hiện, bởi vì nội dungnumbers::divisors không xử lý tốt.

Phần còn lại là phiên bản sửa đổi của hàm đệ quy tiêu chuẩn thực hiện chuỗi Wikipedia.

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
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.