高調波シーケンスの部分和!


13

定義

数学では、調和シーケンスとは、次のシーケンスを指します。

Harmonic Sequence Equation

つまり、シーケンスのn 番目の項はnの逆数に等しくなります。


前書き

この課題では、入力として正の整数nが与えられ、調和シーケンスの最初のn項の部分和を出力します。


入力

(あなたの言語でサポートされている数値の範囲内で)正の整数が与えられます。チャレンジには正の整数のみが必要なため、SignedとUnsignedのいずれかになります(ユーザーによって異なります)。

入力は、事前定義された変数に存在すると想定する以外の方法で取得できます。ファイル、ターミナル、モーダルウィンドウ(prompt()JavaScript)などからの読み取りが許可されます。入力を関数の引数として使用することもできます。


出力

プログラムは、高調波シーケンスの最初のn項の合計を、有効数字5桁の精度のfloat(または出力が1で割り切れる場合は整数)として出力する必要があります(nは入力を参照)。数学の専門用語で同じことを伝えるには、計算する必要があります

Harmonic Sequence Partial Sum of first n terms

ここで、nは入力を指します。

出力を変数に書き込む以外の方法で出力できます。画面、端末、ファイル、モーダルウィンドウ(alert()JavaScript)などへの書き込みが許可されます。関数return値として出力することもできます。


追加の規則


テストケース

テストケースでは、入力が1インデックスであると想定しています

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

受賞基準

これはなので、バイト単位の最短コードが勝ちです!


テストケースを教えてください。
KritixiのLithos

2
どんな精度が必要ですか?通常、正確な出力は分数としてのみ可能ですが、多くの言語では、分子と分母を別々の数値にする必要があります。a)float、b)小数または整数のペアc)のいずれかを出力できますか?
レベルリバーセント

2
@Arjunハーモニックシリーズは無限に成長するため、数が数千および数百万になると、小数点以下10桁に達するのが難しくなります。小数点以下の桁ではなく、有効数字を使用しますが、それほど正確にする必要はありません。5つの有効数字で十分です。そう9.9999E10ではなく99999999999.9999999999
レベル川セント

5つの有効数字を超えることはできますか?
エリックアウトゴルファー

ちなみに、ハーモニックシーケンスには、最初のa_1 = 1以外の整数が含まれていないことがわかっています(a_nがn> 1の整数ではないことを証明するアイデア:2 ^ kを超えない2の最大乗としますn;その後、2 ^ kがa_nの分母を分割します。)
グレッグマーティン

回答:



9

Python 3、27バイト

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

0インデックスまたは1インデックス?
アルジュン

2
RuntimeError再帰制限(デフォルトでは1000)を超える入力を処理するときにスローされます。
sagiksp

あなたが行うことができますsys.setrecursionlimit(473755252663)が、スタックは、最終的には非常に簡単にオーバーフローします

@アルジュン1インデックス付き
shooqie

8

JavaScript、19 18バイト

@RickHitchcockのおかげで1バイト節約

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バイト節約できます。
リックヒッチコック

1
@RickHitchcock f=関数は再帰的であり、でそれ自体を参照するため、削除できませんf(--a)。これは再帰的な解決策ではありませんでした場合でも、私はそれを行うことができただろう
KritixiのLithos

ああ、理にかなっています!で1バイトを保存しますf=a=>a&&1/a+f(--a)
リックヒッチコック

@RickHitchcockいいね!
KritixiのLithos


6

Mathematica、21 20 16バイト

このソリューションは1インデックスです。

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

1インデックス
-J42161217

1
>組み込みを使用して、最初のn個の要素の部分和を計算しないでください。(ええ、あなたのためですMathematica!)
MCCCS

4
OPは、HarmonicNumber [#]を使用できないことを意味します
-J42161217

4
そして、さらに短縮することができTr[1./Range@#]&ます。
グレッグマーティン

2
@Ian Mathematicaができる表示 5 SIGの図が、関数の戻り機械精度の数値(52進ビットまたは精度のすぐ下に16桁)
LLlAMnYP




5

Japt -x8 6 5 3バイト

õpJ

ETHproductionsに感謝します

オンラインで試す


0インデックスまたは1インデックス?
アルジュン

õ x@1/X
ETHproductions

... :-)のXpJ代わりに使用して別の数バイト1/X
-ETHproductions

ありがとう、@ ETHproductions :)歩いてすぐにそれらを小枝にした。
シャギー

実際_、自動機能のためにあなたも必要とは思わない。私は実際にその先端を書く必要があります:P(私はそれはメモリアルデーであることに起因する時間今日か明日、持っている必要があります)
ETHproductions

4

CJam11 10バイト

Erik the outgolferのおかげで1バイト削除

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
エリックアウトゴルファー

@EriktheOutgolferは自分自身をアウトゴルフしました:
ルイスメンドー

@LuisMendo私は私の名前が好きです、それはただの名前です。そしてはい、私は仲間のゴルファーのゴルフをさらに支援する過程で自分自身を凌gしました。
エリックアウトゴルファー

@Erikそれは冗談を意味していました。助けてくれてありがとう
ルイスメンドー

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 bytes

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

That's a very dirty hack, and the recursive calls pass literal strings like "5-1-1-1..." until it evaluates to 0.


Thanks @Christopher for the formatting. With that, the duplication of backslash was no longer necessary.
avl42

No problem! It looks better
Christopher


2

MATL, 5 bytes

:l_^s

This solution uses 1-based indexing.

Try it at 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

2

Axiom, 45 34 bytes

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

1-Indexed; It has argument one positive integer(PI) and return "Any" that the sys convert (or not convert) to the type useful for next function arg (at last it seems so seeing below examples)

(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

C, 54 bytes

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

Uses 1-indexed numbers.



1

QBIC, 13 bytes

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

Explanation

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

F1LP,+|B

Try it online!

Example full program & How it works

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 bytes [non-competing]

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

This won't actually work due to braingolf's inability to work with floats, however the logic is correct.

Explanation:

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

Here's a modified interpreter that supports floats. First argument is input.


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.