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

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

定義

数学では、 Harmonic Sequenceとは、

高調波シーケンス式

すなわち、シーケンスのn 番目の項はnの逆数に等しい。


前書き

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


入力

正の整数(あなたの言語でサポートされている数値の範囲内)が与えられます。 チャレンジには正の整数だけが必要なので、SignedとUnsignedのどちらでもかまいません(あなたに依存します)。

あらかじめ定義された変数に入力されていることを前提としています。 ファイル、端末、モーダルウィンドウ(JavaScriptのprompt() )などprompt()からの読み込みは許可されています。 関数の引数として入力することもできます。


出力

プログラムは、高調波シーケンスの最初のn項の和を浮動小数点数(または出力が1で割り切れる場合は整数)として出力します。有効数字は5桁で、 nは入力を表します。 Mathematical jargonで同じことを伝えるには、

高調波シーケンス最初のn項の部分和

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

出力を変数に書き込む以外は、どのような方法でも出力できます。 画面、端末、ファイル、モーダルウィンドウ(JavaScriptのalert() )などalert()への書き込みは許可されています。 関数のreturn値として出力する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
テストケースをいくつか教えてください。
2 Level River St 05/28/2017
どんな精度が必要ですか? 正確な出力は一般的に分数としてしか可能ではありませんが、多くの言語で分子と分母に別々の数でなければなりません。 a)浮動小数点数、b)小数または整数の組c)どちらかを出力できますか?
2 Level River St 05/28/2017
@Arjun高調波シリーズは無限大に成長するので、数が数千から数百万になると小数点第10位を満たすことは難しくなります。 私は小数点以下の数字ではなく、重要な数字のために行くだろうし、それほど正確である必要はないと思う。 5人の有効数字で十分です。 99999999999.9999999999ではなく9.9999E10
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-indexed。

説明:

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

shooqie 05/28/2017.

Python 3,27バイト

h=lambda n:n and 1/n+h(n-1) 
4 comments
Arjun 05/28/2017
0索引付けまたは1索引付け?
2 sagiksp 05/28/2017
デフォルトで再帰制限1000を超える入力を処理するときにRuntimeErrorします。
cat 05/29/2017
あなたはsys.setrecursionlimit(473755252663)行うことができますが、スタックは最終的に非常に簡単にオーバーフローします
shooqie 05/29/2017
@Arjunは1-indexedです

Cows quack 05/28/2017.

JavaScript、 19 18バイト

1 byte saved thanks to @RickHitchcock

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

これは1-indexedです。

 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(--a)自体を参照するため、 f=削除できません。 しかし、これが再帰的な解決策ではない場合、私はそれを行うことができただろう
Rick Hitchcock 05/28/2017
ああ、意味がある! 1バイトを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
>最初の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は5つのシグネチャをdisplayすることがありdisplayが、この関数returns機械精度の数値をreturns (52バイナリ・ビットまたは精度の16進数の直下にあります)

Cows quack 05/28/2017.

APL(ダイログ) 、5バイト

 +/÷∘⍳ 

オンラインで試してみてください!

ヘッダーに⎕PP←NOを追加して、精度をNOに変更することができます。

これは1-indexedです。

説明

 +/÷∘⍳                     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バイト

1インデックス作成

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

オンラインで試してみてください!


alephalpha 05/28/2017.

パリ/ GP 、18バイト

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

1索引付け。

オンラインで試してみてください!


Erik the Outgolfer 05/29/2017.

CJam 、11バイト

1.ri,:)f/:+ 

オンラインで試してみてください!

1-indexed。


Shaggy 06/01/2017.

Japt8 6 5 3 + 1 = 4バイト

-xフラグの場合は+1バイト。

õpJ 

ETHproductionsのおかげで

オンラインで試してみてください

5 comments
Arjun 05/28/2017
0索引付けまたは1索引付け?
ETHproductions 05/28/2017
私はあなたがバイトをõ x@1/X保存できると思います
ETHproductions 05/28/2017
...と1/X代わりにXpJを使用して別のカップルバイト:-)
Shaggy 05/28/2017
ありがとう、@ETHproductions :)私は離れて歩いてすぐにそれらをつまんだ。
ETHproductions 05/28/2017
実際には私はあなたが自動機能のために_必要とするとは思わない。 私は本当にそのヒントを書くべきです:P(私は今日または明日、それがメモリアルデーのために時間があるべきです)

Luis Mendo 05/28/2017.

CJam11 10バイト

Erik the outgolferのおかげで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
-1代わりにWを使用できます。
Luis Mendo 05/28/2017
@EriktheOutgolferは自分自身を圧倒しました:-)
Erik the Outgolfer 05/28/2017
@ルイスメンド私は私の名前が好きです、それはちょうど名前です。 そして、はい、私はもっと仲間のゴルファーのゴルフをさらに手助けする過程で自信を失った。
Luis Mendo 05/28/2017
@エリックそれは冗談として意味されていた。 助けてくれてありがとう

Ryan McCleary 05/28/2017.

ハスケル、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.

R 、15バイト

 sum(1/1:scan()) 

オンラインで試してみてください!


avl42 05/28/2017.

Tcl 38バイト

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

これは非常に汚いハックです。再帰呼び出しは0と評価されるまで "5-1-1-1 ..."のようなリテラル文字列を渡します。

2 comments
avl42 05/28/2017
書式設定のための@Christopherに感謝します。 これにより、バックスラッシュの複製はもはや必要なくなった。
Christopher 2EZ 4RTZ 05/28/2017
問題ない! それは良く見える

Suever 05/28/2017.

MATL、5バイト

:l_^s 

このソリューションでは、1ベースのインデックスを使用します。

MATLオンライン試しください

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.

公理、 45 34バイト

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

1-インデックスされた。 それは、引数が1つの正の整数(PI)を持ち、sysが次の関数argに有益な型に変換する(または変換しない) "Any"を返します(最後は以下の例を参照)

(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バイト

scL1S 

ここで試してみてください。

1-indexed。


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-indexedです。

説明

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

ハスケル、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&+ 

これは実際にはブリンゴルフが浮動小数点で動作することができないため動作しませんが、ロジックは正しいです。

説明:

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