Partiële som van harmonische volgorde!

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

Definitie

In de wiskunde verwijst Harmonic Sequence naar een volgorde waarin

Harmonische sequentievergelijking

dat wil zeggen dat de nde term van de reeks gelijk is aan de reciproke van n .


Invoering

Geef in deze uitdaging, gegeven een positief geheel getal n als invoer, de gedeeltelijke som van de eerste n termen van de harmonische reeks af.


Invoer

Je krijgt een positief geheel getal (binnen het bereik van nummers die door jouw taal worden ondersteund). Het kan ofwel van Signed en Unsigned zijn (afhankelijk van u), omdat de uitdaging alleen positieve gehele getallen vereist.

U kunt de invoer op elke manier aannemen, behalve wanneer u ervan uitgaat dat deze aanwezig is in een vooraf gedefinieerde variabele. Lezen van bestand, terminal, modaal venster ( prompt() in JavaScript) etc. is toegestaan. Het invoeren van de invoer als functieargument is ook toegestaan.


uitgang

Uw programma zou de som van de eerste n termen van de harmonische sequentie als een float moeten uitvoeren (of een geheel getal als de uitvoer gelijkelijk deelbaar is door 1) met een nauwkeurigheid van 5 significante cijfers, waarbij n naar de invoer verwijst. Om hetzelfde over te brengen in wiskundig jargon, moet je het berekenen

Harmonische volgorde Partiële som van de eerste n termen

waarbij n verwijst naar de invoer.

U kunt op elke manier uitvoeren behalve de uitvoer naar een variabele schrijven. Schrijven naar scherm, terminal, bestand, modaal venster ( alert() in JavaScript) enz. Is toegestaan. Uitvoeren als functieretourwaarde is ook toegestaan.


Aanvullende regels


Testgevallen

De testkoffers veronderstellen dat de invoer 1-geïndexeerd is

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

Winnend criterium

Dit is , dus de kortste code in bytes wint!

5 Comments
Cows quack 05/28/2017
Kun je ons wat testcases geven?
2 Level River St 05/28/2017
Welke precisie is vereist? Exacte uitvoer is over het algemeen alleen mogelijk als een breuk, maar in veel talen moeten deze afzonderlijke nummers zijn voor teller en noemer. Kunnen we a) een float, b) een fractie of een geheel paar c) uitvoeren?
2 Level River St 05/28/2017
@Arjun De harmonische serie groeit tot in het oneindige, zodat het moeilijk wordt om 10 decimalen te halen wanneer het aantal duizenden en miljoenen bereikt. Ik zou voor significante cijfers gaan in plaats van decimale plaatsen, en ik zie geen noodzaak om zo precies te zijn. 5 significante cijfers zouden voldoende moeten zijn. dus 9.9999E10 plaats van 99999999999.9999999999
Erik the Outgolfer 05/28/2017
Kunnen we meer dan 5 significante cijfers bekijken?
Greg Martin 05/28/2017
Trouwens, het is bekend dat de harmonische reeks geen gehele getallen bevat behalve de initiële a_1 = 1. (Idee van bewijs dat a_n geen geheel getal is voor n> 1: laat 2 ^ k het grootste vermogen van 2 zijn niet overschrijdend n; dan deelt 2 ^ k de noemer van a_n.)

24 Answers


Erik the Outgolfer 05/29/2017.

Jelly , 3 bytes

İ€S 

Probeer het online!

1 geïndexeerd.

Uitleg:

İ€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-indexering of 1-indexering?
2 sagiksp 05/28/2017
Hiermee wordt RuntimeError bij het verwerken van invoer die groter is dan de recursielimiet, standaard 1000.
cat 05/29/2017
je kunt sys.setrecursionlimit(473755252663) maar de stapel zal uiteindelijk vrij gemakkelijk overlopen
shooqie 05/29/2017
@Arjun het is 1 geïndexeerd

Cows quack 05/28/2017.

JavaScript, 19 18 bytes

1 byte saved thanks to @RickHitchcock

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

Dit is 1 geïndexeerd.

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

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

4 comments
Rick Hitchcock 05/28/2017
Van wat ik heb gezien van andere berichten, kun je f= van je antwoord verwijderen om 2 bytes te redden.
1 Cows quack 05/28/2017
@RickHitchcock Ik kan f= niet verwijderen omdat de functie recursief is en zichzelf verwijst in f(--a) . Maar als dit geen recursieve oplossing was, zou ik dat hebben kunnen doen
Rick Hitchcock 05/28/2017
Ah, is logisch! Sla één byte op met f=a=>a&&1/a+f(--a) .
Cows quack 05/28/2017
@RickHitchcock Leuke ervaring!

Jenny_mathy 05/28/2017.

Mathematica, 21 20 16 bytes

Deze oplossing is 1 geïndexeerd.

Sum[1./i,NO 
5 comments
Jenny_mathy 05/28/2017
Het is 1 indexering
1 MCCCS 05/28/2017
> U moet geen ingebouwde functie gebruiken om de gedeeltelijke som van de eerste n-elementen te berekenen. (Ja, het is voor jou Mathematica!)
3 Jenny_mathy 05/28/2017
OP betekent dat ik HarmonicNumber [#] niet kan gebruiken &
4 Greg Martin 05/28/2017
En men kan verder inkorten tot Tr[1./Range@#]& .
2 LLlAMnYP 05/30/2017
@Ian Mathematica kan 5 sig fig weergeven, maar de functie returns machine-precisienummers (52 binaire bits of iets minder dan 16 decimale cijfers van precisie)

Cows quack 05/28/2017.

APL (Dyalog) , 5 bytes

 +/÷∘⍳ 

Probeer het online!

U kunt ⎕PP←NO aan de kop toevoegen om de nauwkeurigheid in NO .

Dit is 1 geïndexeerd.

Uitleg

 +/÷∘⍳                     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 indexeren

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

Probeer het online!


alephalpha 05/28/2017.

Pari / GP , 18 bytes

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

1 indexeren.

Probeer het online!


Erik the Outgolfer 05/29/2017.

CJam , 11 bytes

1.ri,:)f/:+ 

Probeer het online!

1 geïndexeerd.


Shaggy 06/01/2017.

Japt , 8 6 5 3 + 1 = 4 bytes

+1 byte voor de vlag -x .

õpJ 

Met dank aan ETHproductions

Probeer het online

5 comments
Arjun 05/28/2017
0-indexering of 1-indexering?
ETHproductions 05/28/2017
Ik denk dat je een byte kunt opslaan met õ x@1/X
ETHproductions 05/28/2017
... en nog een paar bytes door XpJ plaats van 1/X :-)
Shaggy 05/28/2017
Bedankt, @ETHproductions :) Ik twigged die zodra ik wegging.
ETHproductions 05/28/2017
Eigenlijk denk ik niet dat je zelfs de _ vanwege auto-functies nodig hebt. Ik zou echt die tip moeten schrijven: P (ik zou vandaag of morgen de tijd moeten hebben, omdat het Memorial Day is)

Luis Mendo 05/28/2017.

CJam , 11 10 bytes

1 byte verwijderd dankzij Erik de outgolfer

ri),NO 

Hierbij wordt 1-gebaseerd indexeren gebruikt.

Probeer het online!

Uitleg

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
U kunt W plaats van -1 .
Luis Mendo 05/28/2017
@EriktheOutgolfer heeft zichzelf buitengegolfd :-)
Erik the Outgolfer 05/28/2017
@LuisMendo Ik vind mijn naam leuk, het is maar een naam. En ja, ik heb mezelf uitgegolfd in het proces om een ​​medegolfgolf nog verder te helpen.
Luis Mendo 05/28/2017
@Erik Het was bedoeld als een grap. Bedankt voor de hulp

Ryan McCleary 05/28/2017.

Haskell, 20 bytes

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

Originele oplossing, 22 bytes

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

Deze solutios veronderstelt 1-geïndexeerde invoer.


Nitrodon 05/28/2017.

R , 15 bytes

 sum(1/1:scan()) 

Probeer het online!


avl42 05/28/2017.

Tcl 38 bytes

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

Dat is een erg vuile hack en de recursieve aanroepen passeren letterlijke tekenreeksen zoals "5-1-1-1 ..." totdat het evalueert naar 0.

2 comments
avl42 05/28/2017
Bedankt @ Christopher voor de opmaak. Daarmee was het dupliceren van backslash niet langer nodig.
Christopher 2EZ 4RTZ 05/28/2017
Geen probleem! Het ziet er beter uit

Erik the Outgolfer 05/29/2017.

05AB1E , 3 bytes

LzO 

Probeer het online!

1 geïndexeerd.


Suever 05/28/2017.

MATL, 5 bytes

:l_^s 

Deze oplossing maakt gebruik van op 1 gebaseerde indexering.

Probeer het op 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 bytes

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

1-geïndexeerd; Het heeft argument één positief geheel getal (PI) en geeft "Any" terug dat het sys converteert (of niet converteert) naar het type dat nuttig is voor de volgende functie arg (eindelijk lijkt het dus onderstaande voorbeelden te zien)

(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 

Probeer het hier.

1 geïndexeerd.


Uriel 05/28/2017.

C, 54 bytes

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

Gebruikt 1-geïndexeerde nummers.


Fatalize 05/29/2017.

Brachylog , 6 bytes

⟦₁/₁ᵐ+ 

Probeer het online!

Dit is 1 geïndexeerd.

Uitleg

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

steenbergh 05/30/2017.

QBIC , 13 bytes

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

Uitleg

[ |        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 bytes

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

Giacomo Garabello 05/30/2017.

C (gcc) , 35 bytes

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

Probeer het online!


Mayube 05/30/2017.

Braingolf, 20 bytes [niet-concurrerend]

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

Dit werkt niet echt vanwege het onvermogen van Braingolf om met drijvers te werken, maar de logica is correct.

Uitleg:

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 

Hier is een aangepaste interpreter die drijvers ondersteunt. Eerste argument is invoer.


sergiol 06/14/2017.

Tcl, 61 bytes

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

Probeer het online!

Related questions

Hot questions

Language

Popular Tags