ผลรวมบางส่วนของลำดับฮาร์มอนิก!

Arjun 05/28/2017. 24 answers, 1.268 views
code-golf math sequence

คำนิยาม

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

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

นั่นคือลำดับที่ n ของลำดับเท่ากับ n ของ reciprocal of n


บทนำ

ในความท้าทายนี้ให้จำนวนเต็มบวก n เป็นอินพุทเอาท์พุทผลรวมของคำศัพท์ n คำแรกของลำดับฮาร์มอนิก


อินพุต

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

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


เอาท์พุต

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

ลำดับฮาร์มอนิกผลรวมบางส่วนของคำศัพท์ n คำแรก

โดยที่ n หมายถึงการป้อนข้อมูล

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


กฎเพิ่มเติม


กรณีทดสอบ

กรณีทดสอบสมมติว่าอินพุตถูกจัดทำดัชนีไว้ 1 รายการ

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

เกณฑ์การชนะ

นี่เป็น ดังนั้นรหัสที่สั้นที่สุดในไบต์จะชนะ!

5 Comments
Cows quack 05/28/2017
คุณสามารถให้เรา testcases บาง?
2 Level River St 05/28/2017
ต้องมีความแม่นยำอะไร? เอาท์พุทที่แน่นอนโดยทั่วไปเป็นไปได้เฉพาะเป็นเศษส่วน แต่ในหลายภาษาที่จะต้องเป็นตัวเลขที่แยกต่างหากสำหรับเศษและตัวหาร เราสามารถส่งออก a) ลอย, b) เศษส่วนหรือจำนวนเต็มคู่ c) ทั้ง?
2 Level River St 05/28/2017
@Arjun ชุดฮาร์โมนิคส์เติบโตขึ้นเป็นอนันต์ดังนั้นจึงยากที่จะตอบสนองตำแหน่งทศนิยม 10 ตำแหน่งตามจำนวนที่ได้รับนับพันล้าน ฉันจะไปสำหรับตัวเลขที่สำคัญมากกว่าตำแหน่งทศนิยมและฉันเห็นไม่จำเป็นต้องมีความแม่นยำเพื่อ 5 ตัวเลขที่สำคัญควรจะเพียงพอ 9.9999E10 แทนที่จะเป็น 99999999999.9999999999
Erik the Outgolfer 05/28/2017
เราสามารถไปมากกว่า 5 ตัวเลขสำคัญ?
Greg Martin 05/28/2017
โดยวิธีการที่เป็นที่รู้จักกันว่าลำดับฮาร์มอนิไม่มีจำนวนเต็มอื่นใดนอกเหนือจาก a_1 = 1 (ความคิดในการพิสูจน์ว่า a_n ไม่ใช่จำนวนเต็มสำหรับ n> 1: ให้ 2 ^ k เป็นพลังงานที่ใหญ่ที่สุดที่ 2 ไม่เกิน n แล้ว 2 ^ k หารตัวหารของ a_n)

24 Answers


Erik the Outgolfer 05/29/2017.

เยลลี่ 3 ไบต์

İ€S 

ทดลองใช้แบบออนไลน์!

1 การจัดทำดัชนี

คำอธิบาย:

İ€S Main link, monadic
İ€         1 / each one of [1..n]
  S Sum of 

shooqie 05/28/2017.

Python 3, 27 bytes

h=lambda n:n and 1/n+h(n-1) 
4 comments
Arjun 05/28/2017
การจัดทำดัชนี 0 หรือการจัดทำดัชนี 1 รายการ?
2 sagiksp 05/28/2017
โยน RuntimeError เมื่อจัดการกับอินพุทมากกว่าขีด จำกัด การเรียกซ้ำ 1000 โดยค่าเริ่มต้น
cat 05/29/2017
คุณสามารถทำ sys.setrecursionlimit(473755252663) แต่ stack ในที่สุดจะล้นค่อนข้างง่าย
shooqie 05/29/2017
@Arjun มีการจัดทำดัชนีไว้ 1 รายการ

Cows quack 05/28/2017.

JavaScript, 19 18 ไบต์

1 byte saved thanks to @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)) 

4 comments
Rick Hitchcock 05/28/2017
จากสิ่งที่ฉันได้เห็นจากโพสต์อื่น ๆ คุณสามารถลบ f= จากคำตอบของคุณเพื่อประหยัด 2 ไบต์
1 Cows quack 05/28/2017
@ RickHitchcock ฉันไม่สามารถลบ f= เพราะฟังก์ชันเป็น recursive และอ้างอิงตัวเองใน f(--a) . แต่ถ้านี่ไม่ใช่ทางแก้ปัญหา recursive ฉันจะได้รับสามารถทำเช่นนั้น
Rick Hitchcock 05/28/2017
อามีเหตุผล! บันทึกหนึ่งไบต์ด้วย f=a=>a&&1/a+f(--a)
Cows quack 05/28/2017
@RickHitchcock ดีหนึ่ง!

Jenny_mathy 05/28/2017.

Mathematica, 21 20 16 ไบต์

โซลูชันนี้มีการจัดทำดัชนี 1 รายการ

Sum[1./i,NO 
5 comments
Jenny_mathy 05/28/2017
เป็นการจัดทำดัชนี 1 รายการ
1 MCCCS 05/28/2017
> คุณต้องไม่ใช้ built-in เพื่อคำนวณผลรวมบางส่วนขององค์ประกอบ n ตัวแรก (ใช่มันสำหรับคุณ Mathematica!)
3 Jenny_mathy 05/28/2017
OP หมายความว่าฉันไม่สามารถใช้ HarmonicNumber [#] &
4 Greg Martin 05/28/2017
และอีกหนึ่งข้อสามารถตัดทอนให้สั้นลงใน Tr[1./Range@#]&
2 LLlAMnYP 05/30/2017
@Ian Mathematica อาจ display 5 สัญลักษณ์ แต่ฟังก์ชัน returns ตัวเลขความแม่นยำของเครื่องจักร (52 บิตไบต์หรือต่ำกว่า 16 หลักทศนิยมของความแม่นยำ)

Cows quack 05/28/2017.

APL (Dyalog) 5 ไบต์

 +/÷∘⍳ 

ทดลองใช้แบบออนไลน์!

คุณสามารถเพิ่ม ⎕PP←NO ลงในส่วนหัวเพื่อเปลี่ยนความแม่นยำเป็น NO

นี่เป็นดัชนี 1 รายการ

คำอธิบาย

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

Jörg Hülsermann 05/28/2017.

PHP, 33 Bytes

1 การจัดทำดัชนี

for(;$i++<$argn;)$s+=1/$i;echo$s; 

ทดลองใช้แบบออนไลน์!


alephalpha 05/28/2017.

Pari / GP , 18 ไบต์

n->sum(i=1,n,1./i) 

1 การจัดทำดัชนี

ทดลองใช้แบบออนไลน์!


Erik the Outgolfer 05/29/2017.

CJam , 11 ไบต์

1.ri,:)f/:+ 

ทดลองใช้แบบออนไลน์!

1 การจัดทำดัชนี


Shaggy 06/01/2017.

Japt , 8 6 5 3 + 1 = 4 ไบต์

+1 ไบต์สำหรับธง -x

õpJ 

ขอบคุณกับ ETHproductions

ลองใช้แบบออนไลน์

5 comments
Arjun 05/28/2017
การจัดทำดัชนี 0 หรือการจัดทำดัชนี 1 รายการ?
ETHproductions 05/28/2017
ฉันคิดว่าคุณสามารถบันทึกไบต์ด้วย õ x@1/X
ETHproductions 05/28/2017
... และไบต์คู่อื่นโดยใช้ XpJ แทน 1/X :-)
Shaggy 05/28/2017
ขอบคุณ @ETHproductions :) ฉัน twigged เหล่านั้นทันทีที่ฉันเดินออกไป
ETHproductions 05/28/2017
จริงๆแล้วฉันไม่คิดว่าคุณจะต้องมี _ เนื่องจากฟังก์ชันอัตโนมัติ ฉันควรจะเขียนเคล็ดลับว่า: P (ควรมีเวลาในวันนี้หรือวันพรุ่งนี้เนื่องจากเป็นวันแห่งความทรงจำ)

Luis Mendo 05/28/2017.

CJam , 11 10 ไบต์

ลบไบต์ 1 ตัวออกโดยเอริคคนนอก

ri),NO 

ใช้การจัดทำดัชนีแบบ 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 
4 comments
Erik the Outgolfer 05/28/2017
คุณสามารถใช้ W แทน -1 ได้
Luis Mendo 05/28/2017
@ EriktheOutgolfer มี outgolfed ตัวเอง :-)
Erik the Outgolfer 05/28/2017
@LuisMendo ฉันชอบชื่อฉันมันเป็นแค่ชื่อ และใช่ฉัน outgolfed ตัวเองในกระบวนการของการช่วยนักกอล์ฟกอล์ฟเพื่อนเพิ่มเติม
Luis Mendo 05/28/2017
@Erik มันมีความหมายว่าเป็นเรื่องตลก ขอขอบคุณสำหรับความช่วยเหลือ

Ryan McCleary 05/28/2017.

Haskell ขนาด 20 ไบต์

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

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

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

คำตอบเหล่านี้จะอนุมานการป้อนข้อมูลที่จัดทำดัชนีไว้ 1 รายการ


Nitrodon 05/28/2017.

avl42 05/28/2017.

Tcl 38 ไบต์

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

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

2 comments
avl42 05/28/2017
ขอบคุณ @Christopher สำหรับการจัดรูปแบบ ด้วยเหตุนี้การทำสำเนาเครื่องหมายทับขวาจึงไม่จำเป็นอีกต่อไป
Christopher 2EZ 4RTZ 05/28/2017
ไม่มีปัญหา! ดูดีขึ้น

Erik the Outgolfer 05/29/2017.

05AB1E , 3 ไบต์

LzO 

ทดลองใช้แบบออนไลน์!

1 การจัดทำดัชนี


Suever 05/28/2017.

MATL, 5 ไบต์

:l_^s 

โซลูชันนี้ใช้การสร้างดัชนีแบบ 1 รายการ

ลองใช้ที่ MATL Online

Explanation

% 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 

RosLuP 05/28/2017.

Axiom, 45 34 ไบต์

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

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

(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 

Erik the Outgolfer 05/29/2017.

Pyth, 5 bytes

scL1S 

ลองใช้ที่นี่

1 การจัดทำดัชนี


Uriel 05/28/2017.

C, 54 ไบต์

i;float f(n){float s;for(i=n+1;--i;s+=1./i);return s;} 

ใช้หมายเลขที่มีการจัดทำดัชนี 1 รายการ


Fatalize 05/29/2017.

Brachylog , 6 ไบต์

⟦₁/₁ᵐ+ 

ทดลองใช้แบบออนไลน์!

นี่เป็นดัชนี 1 รายการ

คำอธิบาย

⟦₁         Range [1, …, Input]
    ᵐ      Map:
  /₁         Inverse
     +     Sum 

steenbergh 05/30/2017.

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 

Uri Goren 05/29/2017.

Haskell ขนาด 21 ไบต์

f n=sum$map(1/)[1..n] 

Giacomo Garabello 05/30/2017.

C (gcc) , 35 ไบต์

 float f(n){return n?1./n+f(--n):0;} 

ทดลองใช้แบบออนไลน์!


Mayube 05/30/2017.

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

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

นี้จะไม่ทำงานจริงเนื่องจาก braingolfs ไม่สามารถทำงานกับ floats แต่เหตุผลถูกต้อง.

คำอธิบาย:

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 

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


sergiol 06/14/2017.

Tcl, 61 ไบต์

proc h {x s\ 0} {time {set s [expr $s+1./[incr i]]} $x;set s} 

ทดลองใช้แบบออนไลน์!

Related questions

Hot questions

Language

Popular Tags