Divinacci Sequence


23

Divinacci ( OEIS )

ดำเนินการลำดับฟีโบนักชี แต่แทนที่จะใช้:

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

ใช้:

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

สำหรับอินพุทของnเอาท์พุทคำที่ n โปรแกรมของคุณควรมีเพียง 1 อินพุท


14 คำแรก (0 ดัชนีคุณอาจ 1 ดัชนี; สถานะที่คุณใช้):

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

คุณอาจจะเลือกหรือไม่ที่จะรวม 0. ชั้นนำสำหรับผู้ที่ทำหารของ0มี[]สำหรับวัตถุประสงค์ของการท้าทายนี้

มันเป็นชนะนับไบต์ต่ำสุด ...


15
หมายเลขธรรมชาติทั้งหมดแบ่ง0จึงรวมตัวหารของมันคือ+
Dennis

9
@Dennis ในที่สุดคนที่ไม่คิดว่า 1 + 2 + 3 + ... = -1/12
Leun Nun

1
@Dennis เราสามารถกำจัด 0 และทำให้ถูกต้องแม้ว่า: P หรือคุณสามารถส่งคำตอบทางคณิตศาสตร์Infinityหากคุณต้องการ
Magic Octopus Urn

คำตอบของเยลลี่จะสั้นลง : P คุณสามารถเปลี่ยนลำดับได้ (คำตอบอาจจำเป็นต้องมีการปรับแต่งเช่นกัน) หรือเปลี่ยนคำอธิบาย (เริ่มต้นด้วยค่าฐาน0, 1, 1 )
Dennis

1
@carusocomputing หากไม่เปลี่ยนลำดับจะมีผลต่อคำตอบอย่างไร
Martin Ender

คำตอบ:


10

05AB1E , 9 ไบต์

XÎFDŠ‚ÑOO

ลองออนไลน์!

คำอธิบาย

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

ตันของการแลกเปลี่ยนเกิดขึ้น heh! น่าสนใจ
Magic Octopus Urn

2
ฉันชอบวิธีที่ไบต์คู่สุดท้ายถูกตะโกนใส่ผู้อ่านอย่างแรง
Rohan Jhunjhunwala

1
คุณได้รับรางวัลนี้ 2 นาทีฮ่า ๆ
Magic Octopus Urn

8

Mathematica, 45 40 ไบต์

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

Mathematica ของฟังก์ชั่นที่เกี่ยวข้องกับหารDivisors, DivisorSumและDivisorSigmaจะไม่ได้กำหนดทั้งหมดn = 0 (ถูกต้องเพื่อ) ดังนั้นเราเริ่มต้นจากและไม่สนับสนุนการป้อนข้อมูลf(1) = f(2) = 10

การนิยามเป็นโอเปอเรเตอร์แทนการใช้ฟังก์ชั่นที่ไม่มีชื่อดูเหมือนจะยาวกว่าสองไบต์:

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

* 7 ไบต์ยาวขึ้นเว้นแต่±จะมี 1 ไบต์ในการเข้ารหัสที่รองรับ Mathematica
CalculatorFeline

@CalculatorFeline เป็น (การตั้งค่าเริ่มต้นสำหรับ$CharacterEncodingบนเครื่อง Windows คือWindowsANSICP 1252)
Martin Ender

1
ดีแล้วที่รู้. .
CalculatorFeline




3

MATL, 16 15 ไบต์

Oliq:",yZ\s]+]&

วิธีนี้ใช้การจัดทำดัชนีแบบ 0

ลองใช้ที่MATL Online

คำอธิบาย

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

เยลลี่ , 10 9 ไบต์

ð,ÆDẎSð¡1

ลองออนไลน์!

ขอบคุณเดนนิสสำหรับ -1



@Dennis The 0เป็นนัยหรือไม่
Erik the Outgolfer

เมื่อคุณใช้จำนวนการวนซ้ำจาก STDIN คุณจะได้ niladic chain และ0คืออาร์กิวเมนต์โดยนัยของ niladic chains
Dennis

@Dennis ดังนั้น¡และคนอื่น ๆ ก็จะพยายามที่จะโต้แย้งจากทุกที่แม้จะมีƓ? ค่อนข้างคาดไม่ถึง ...
Erik the Outgolfer

เว้นแต่จะระบุไว้อย่างชัดเจน¡และอื่น ๆ รับอาร์กิวเมนต์บรรทัดคำสั่งสุดท้ายและหากไม่มีให้อ่านบรรทัดจาก STDIN
Dennis





1

R, 81 ไบต์

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 และแยก 0 ที่จุดเริ่มต้นของลำดับ ศูนย์นั้นให้ปัญหามากมายแก่ฉันในการนำไปใช้เพราะ builtin numbers::divisorsไม่สามารถจัดการได้ดี

ส่วนที่เหลือเป็นรุ่นที่แก้ไขของฟังก์ชันเรียกซ้ำมาตรฐานที่ใช้ลำดับฟีโบนักชี

> f(1)
[1] 1
> f(2)
[1] 1
> f(3)
[1] 2
> f(5)
[1] 10
> f(13)
[1] 12846
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.