ผลรวมบางส่วนของ Harmonic Sequence!


13

คำนิยาม

ในวิชาคณิตศาสตร์Harmonic Sequenceหมายถึงลำดับที่

สมการลำดับฮาร์มอนิก

เช่นn THระยะของลำดับเท่ากับซึ่งกันและกันของn


บทนำ

ในความท้าทายนี้รับจำนวนเต็มบวกnเป็นอินพุตเอาต์พุตผลรวมบางส่วนของคำแรกnของ Harmonic Sequence


อินพุต

คุณจะได้รับจำนวนเต็มบวก (ภายในช่วงของตัวเลขที่รองรับโดยภาษาของคุณ) สามารถเป็นได้ทั้งที่ลงชื่อและไม่ได้ลงชื่อ (ขึ้นอยู่กับคุณ) เนื่องจากความท้าทายต้องใช้จำนวนเต็มบวกเท่านั้น

คุณสามารถรับอินพุตในลักษณะใดก็ได้ยกเว้นสมมติว่ามีอยู่ในตัวแปรที่กำหนดไว้ล่วงหน้า อนุญาตให้อ่านจากไฟล์เทอร์มินัลหน้าต่าง modal ( prompt()ใน JavaScript) เป็นต้น อนุญาตให้ป้อนค่าเป็นอาร์กิวเมนต์ของฟังก์ชันได้เช่นกัน


เอาท์พุต

โปรแกรมของคุณควรแสดงผลรวมของคำศัพท์แรกของnของ Harmonic Sequence เป็นทศนิยม (หรือจำนวนเต็มถ้าผลลัพธ์หารด้วย 1 อย่างสม่ำเสมอ) ด้วยความแม่นยำของตัวเลข 5 ตัวที่สำคัญโดยที่nอ้างถึงอินพุต ในการถ่ายทอดสิ่งเดียวกันในศัพท์แสงคณิตศาสตร์คุณต้องคำนวณ

Harmonic Sequence ผลรวมบางส่วนของคำศัพท์แรก

โดยที่nหมายถึงอินพุต

คุณสามารถส่งออกในทางใดทางหนึ่งยกเว้นการเขียนผลลัพธ์ไปยังตัวแปร อนุญาตให้เขียนไปที่หน้าจอเทอร์มินัลไฟล์หน้าต่างโมดอล ( alert()ใน JavaScript) เป็นต้น returnอนุญาตให้ส่งออกเป็นค่าฟังก์ชันได้เช่นกัน


กฎเพิ่มเติม

  • หมายเลขอินพุตสามารถเป็น 0 หรือดัชนีอย่างใดอย่างหนึ่ง คุณต้องระบุในโพสต์ของคุณ

  • คุณไม่ต้องใช้ตัวในการคำนวณผลรวมบางส่วนแรกnองค์ประกอบ (ใช่สำหรับคุณ Mathematica!)

  • คุณต้องไม่ละเมิดประเภทจำนวนพื้นเมืองทำเป็นปัญหา

  • มาตรฐานช่องโหว่ใช้


กรณีทดสอบ

กรณีทดสอบถือว่าอินพุตเป็น 1 ดัชนี

Input     Output
1         1
2         1.5
3         1.8333
4         2.0833
5         2.2833

เกณฑ์การชนะ

นี่คือดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ!


คุณช่วยให้เราทดสอบได้ไหม?
user41805

2
ต้องการความแม่นยำระดับใด โดยทั่วไปเอาต์พุตที่แน่นอนจะเป็นเศษส่วนเท่านั้น แต่ในหลายภาษาที่จะต้องมีตัวเลขแยกต่างหากสำหรับตัวเศษและส่วน เราสามารถเอาท์พุท a) a ลอย a) เศษส่วนหรือจำนวนเต็มคู่ c) ได้ไหม?
ระดับแม่น้ำเซนต์

2
@Arjun ซีรีส์ฮาร์โมนินั้นเติบโตขึ้นอย่างไม่มีที่สิ้นสุดดังนั้นมันจึงยากที่จะพบทศนิยม 10 ตำแหน่งเมื่อตัวเลขเข้าสู่หลักพันและล้าน ฉันจะไปหาตัวเลขที่สำคัญแทนตำแหน่งทศนิยมและฉันไม่ต้องการความแม่นยำเลย 5 ตัวเลขที่สำคัญน่าจะเพียงพอ ดังนั้น9.9999E10แทนที่จะ99999999999.9999999999
ระดับแม่น้ำเซนต์

เราสามารถไปมากกว่า 5 ตัวเลขที่สำคัญได้หรือไม่?
Erik the Outgolfer

โดยวิธีการที่เป็นที่รู้จักกันว่าลำดับฮาร์มอนิไม่ได้มีจำนวนเต็มใด ๆ นอกเหนือจาก a_1 เริ่มต้น 1 (แนวคิดของการพิสูจน์ว่า a_n ไม่ได้เป็นจำนวนเต็มสำหรับ n> 1: ปล่อยให้ 2 ^ k เป็นพลังงานที่ใหญ่ที่สุดที่ 2 ไม่เกิน n; จากนั้น 2 ^ k หารตัวหารของ a_n.)
Greg Martin

คำตอบ:



9

Python 3, 27 ไบต์

h=lambda n:n and 1/n+h(n-1)

0 การจัดทำดัชนีหรือการจัดทำดัชนี 1?
Arjun

2
โยนRuntimeErrorเมื่อจัดการอินพุตที่มากกว่าขีด จำกัด การเรียกซ้ำ 1,000 ตามค่าเริ่มต้น
sagiksp

คุณสามารถทำได้sys.setrecursionlimit(473755252663)แต่สแต็กในที่สุดจะล้นได้อย่างง่ายดาย
cat

@ Arjun มันเป็น 1 ดัชนี
shooqie

8

JavaScript, 19 18 ไบต์

บันทึก 1 ไบต์ด้วย @RickHitchcock

f=a=>a&&1/a+f(--a)

นี่คือดัชนี 1

f=a=>a&&1/a+f(--a)

for(i=0;++i<10;)console.log(f(i))


จากสิ่งที่ฉันเห็นจากโพสต์อื่นคุณสามารถลบออกf=จากคำตอบของคุณเพื่อบันทึก 2 ไบต์
Rick Hitchcock

1
@RickHitchcock ฉันไม่สามารถลบf=เพราะฟังก์ชั่นคือ recursive f(--a)และอ้างอิงตัวเองใน แต่ถ้านี่ไม่ใช่วิธีแบบเรียกซ้ำฉันก็สามารถทำเช่นนั้นได้
user41805

อ่าเข้าใจแล้ว! f=a=>a&&1/a+f(--a)บันทึกหนึ่งไบต์ด้วย
Rick Hitchcock

@ RickHitchcock Nice หนึ่ง!
user41805

6

APL (Dyalog) 5 ไบต์

+/÷∘⍳

ลองออนไลน์!

คุณสามารถเพิ่มส่วนหัวที่จะเปลี่ยนความแม่นยำในการ⎕PP←{number}{number}

นี่คือดัชนี 1

คำอธิบาย

+/÷∘⍳                     Right argument; n
                         Range; 1 2 ... n
  ÷                       Reciprocal; 1/1 1/2 ... 1/n
+/                        Sum; 1/1 + 1/2 + ... + 1/n

6

Mathematica, 21 20 16 ไบต์

วิธีการแก้ปัญหานี้ได้รับการจัดทำดัชนี 1

Sum[1./i,{i,#}]&

มันเป็นดัชนี 1
J42161217

1
> คุณต้องไม่ใช้บิวด์อินเพื่อคำนวณผลรวมบางส่วนขององค์ประกอบแรก (ใช่สำหรับคุณ Mathematica!)
MCCCS

4
OP หมายความว่าฉันไม่สามารถใช้ HarmonicNumber [#] &
J42161217

4
และสามารถย่อให้สั้นลงไปTr[1./Range@#]&อีก
Greg Martin

2
@Ian Mathematica อาจแสดงรูปที่ 5 sig แต่ฟังก์ชันส่งคืนตัวเลขที่มีความแม่นยำของเครื่องจักร (52 บิตบิตหรือเพียง 16 ทศนิยมความแม่นยำ)
LLlAMnYP




5

Japt -x , 8 6 5 3 ไบต์

õpJ

ด้วยความขอบคุณจาก ETHproductions

ลองออนไลน์


0 การจัดทำดัชนีหรือการจัดทำดัชนี 1?
Arjun

ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วยõ x@1/X
ETHproductions

... และอีกสองไบต์โดยใช้XpJแทน1/X:-)
ETHproductions

ขอบคุณ @ETHproductions :) ฉันทวีสิ่งเหล่านั้นทันทีที่ฉันเดินจากไป
Shaggy

จริงๆแล้วฉันไม่คิดว่าคุณจะต้องการ_ฟังก์ชั่นอัตโนมัติ ฉันควรเขียนเคล็ดลับนั้นจริง ๆ : P (ฉันควรมีเวลาวันนี้หรือวันพรุ่งนี้เนื่องจากเป็นวันแห่งความทรงจำ)
ETHproductions

4

CJam , 11 10 ไบต์

ลบ 1 ไบต์ด้วย Erik the outgolfer

ri),{W#+}*

สิ่งนี้ใช้การจัดทำดัชนีแบบอิง 1

ลองออนไลน์!

คำอธิบาย

ri            e# Read integer, n
  )           e# Increment by 1: gives n+1
   ,          e# Range: gives [0 1 2 ... n]
    {   }*    e# Fold this block over the array
     W#       e# Inverse of a number
       +      e# Add two numbers

คุณสามารถใช้แทนW -1
Erik the Outgolfer

@EriktheOutgolfer ได้แซงหน้าตัวเอง :-)
Luis Mendo

@ LuisMendo ฉันชอบชื่อของฉันมันเป็นเพียงชื่อ และใช่ฉัน outgolfed ตัวเองในกระบวนการของการช่วยให้นักกอล์ฟเพื่อนนักกอล์ฟยิ่งขึ้น
Erik the Outgolfer

@Erik มันเป็นเรื่องตลก ขอบคุณสำหรับความช่วยเหลือ
Luis Mendo

3

Haskell, 20 ไบต์

f 0=0
f n=1/n+f(n-1)

โซลูชันดั้งเดิม 22 ไบต์

f n=sum[1/k|k<-[1..n]]

solutios เหล่านี้จะถือว่าอินพุต 1 ดัชนี



3

Tcl 38 ไบต์

proc h x {expr $x?1./($x)+\[h $x-1]:0}

นั่นเป็นแฮ็คที่สกปรกมากและการโทรซ้ำจะส่งผ่านสตริงตัวอักษรเช่น "5-1-1-1 ... " จนกว่ามันจะประเมินเป็น 0


ขอบคุณ @Christopher สำหรับการจัดรูปแบบ ด้วยเหตุนี้การทำซ้ำของแบ็กสแลชจึงไม่จำเป็นอีกต่อไป
avl42

ไม่มีปัญหา! ดูดีขึ้น
Christopher


2

MATL, 5 ไบต์

:l_^s

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

ลองที่MATL Online

คำอธิบาย

    % Implicitly grab input (N)
:   % Create an array from [1...N]
l_^ % Raise all elements to the -1 power (take the inverse of each)
s   % Sum all values in the array and implicitly display the result

2

ความจริง45 34 ไบต์

f(x:PI):Any==sum(1./n,n=1..x)::Any

1 จัดทำดัชนี; มันมีอาร์กิวเมนต์หนึ่งจำนวนเต็มบวก (PI) และส่งกลับ "ใด ๆ " ที่ sys แปลง (หรือไม่แปลง) ประเภทที่มีประโยชน์สำหรับฟังก์ชั่นต่อไป ARG (ในที่สุดก็ดูเหมือนว่าเห็นตัวอย่างด้านล่าง)

(25) -> [[i,f(i)] for i in 1..9]
   (25)
   [[1,1.0], [2,1.5], [3,1.8333333333 333333333], [4,2.0833333333 333333333],
    [5,2.2833333333 333333333], [6,2.45], [7,2.5928571428 571428572],
    [8,2.7178571428 571428572], [9,2.8289682539 682539683]]
                                                      Type: List List Any
(26) -> f(3000)
   (26)  8.5837498899 591871142
                                        Type: Union(Expression Float,...)
(27) -> f(300000)
   (27)  13.1887550852 056117
                                        Type: Union(Expression Float,...)
(29) -> f(45)^2
   (29)  19.3155689383 88117644
                                                   Type: Expression Float




1

QBICขนาด 13 ไบต์

[:|c=c+1/a]?c

คำอธิบาย

[ |        FOR a = 1 to
 :            the input n
   c=c+    Add to c (starts off as 0)
   1/a     the reciprocal of the loop iterator
]          NEXT
?c         PRINT c

1

Gol> <> , 8 ไบต์

F1LP,+|B

ลองออนไลน์!

ตัวอย่างโปรแกรมเต็มรูปแบบและวิธีการทำงาน

1AGIE;GN
F1LP,+|B

1AGIE;GN
1AG       Register row 1 as function G
   IE;    Take input as int, halt if EOF
      GN  Call G and print the result as number
          Repeat indefinitely

F1LP,+|B
F     |   Repeat n times...
 1LP,       Compute 1 / (loop counter + 1)
     +      Add
       B  Return



0

Braingolf, 20 ไบต์ [ไม่แข่งขัน]

VR1-1[1,!/M,$_1+]v&+

สิ่งนี้จะไม่ทำงานเนื่องจาก braingolf ไม่สามารถทำงานกับการลอยได้ แต่ตรรกะนั้นถูกต้อง

คำอธิบาย:

VR1-1[1,!/M,$_1+]v&+   Implicit input
VR                     Create new stack and return to main stack
  1-                   Decrement input
    1                  Push 1
     [..........]      Loop, always runs once, then decrements first item on stack at ]
                       Breaks out of loop if first item on stack reaches 0
      1,!/             Push 1, swap last 2 values, and divide without popping
                       Original values are kept on stack, and result of division is pushed
          M,$_         Move result of division to next stack, then swap last 2 items and
                       Silently pop last item (1)
              1+       Increment last item on stack
                 v&+   Move to next stack, sum entire stack 
                       Implicit output of last item on current stack

นี่คือล่ามที่ได้รับการแก้ไขซึ่งรองรับการลอย อาร์กิวเมนต์แรกคืออินพุต


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.