クールな無題のシーケンス


19

f n(k)を、各数値がn回繰り返される自然数[1、∞)の最初のk項の合計として定義しましょう。

k       | 0    1    2    3    4    5    6    7    8    9
--------+-------------------------------------------------
f_1(k)  | 0    1    3    6    10   15   21   28   36   45
deltas  |   +1   +2   +3   +4   +5   +6   +7   +8   +9
--------+-------------------------------------------------
f_2(k)  | 0    1    2    4    6    9    12   16   20   25
deltas  |   +1   +1   +2   +2   +3   +3   +4   +4   +5
--------+-------------------------------------------------
f_3(k)  | 0    1    2    3    5    7    9    12   15   18
deltas  |   +1   +1   +1   +2   +2   +2   +3   +3   +3

正方配列としてのこの対角線は、OEISシーケンスA134546に似ています。

チャレンジ

2つの非負の整数nおよびkを取り、f n(k)を出力するプログラム/関数を作成します。

仕様書

  • 標準のI / Oルールが 適用されます
  • 標準的な抜け穴禁止されています。
  • ソリューションには、nまたはkあるいはその両方に対して0インデックスまたは1インデックスのいずれかを指定できますが、どちらを指定してください。
  • この課題は、すべての言語で最短のアプローチを見つけることではなく、各言語で最短のアプローチを見つけることです
  • あなたのコードがされるバイト数で得点特に指定がない限り、通常はエンコーディングUTF-8で、。
  • このシーケンスを計算する組み込み関数は許可されますが、組み込みに依存しないソリューションを含めることをお勧めします。
  • 「実用的な」言語であっても説明が奨励されます。

テストケース

これらのテストケースでは、nは1から始まり、kは0から始まります。

n   k      fn(k)

1   2      3
2   11     36
11  14     17
14  21     28
21  24     27
24  31     38
31  0      0

いくつかのより良い形式で:

1 2
2 11
11 14
14 21
21 24
24 31
31 0

1, 2
2, 11
11, 14
14, 21
21, 24
24, 31
31, 0

リファレンス実装

これはHaskellで書かれています。

f n k = sum $ take k $ replicate n =<< [1..]

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

この課題はサンドボックス化されました。


私の編集は書式設定を改善すると思いますか、それともブラウザ上だけですか?
user202729

@ user202729へえ...私のブラウザでは見た目は変わりませんが、ほとんどのブラウザで書式​​設定が適切に見えるとは思えません...そのままにしておきますが、意味を失うことはありません。変に見えます。:P
完全に人間

私たちはケースに処理する必要がありますf_n(0) = 0のためのkインデックス0を?
シナスキ

9
かっこいい無題のシーケンス」笑、私が作ったシーケンスの名前を思いつくのに苦労しているのは私だけではありません..;)
ケビン・クルーイッセン

3
@Fabianいいえ、最初のk項ではなく、繰り返される自然数のリストから最初の項のみを合計しますn*k
マーティンエンダー

回答:


12

ルビー32 28 23バイト

->n,k{k.step(0,-n).sum}

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

説明

合計を三角形の面積として視覚化してみましょう。たとえば、n = 3とk = 10の場合:

*
*
*
**
**
**
***
***
***
****

次に、行ではなく列ごとに合計します。最初の列はk、次にk-nk-2nなどです。





5

Mathematica、40バイト

Tr@Sort[Join@@Range@#2~Table~#][[;;#2]]&

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

Tr[Range@(s=⌊#2/#⌋)]#+#2~Mod~#(s+1)&

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

Mathematica、18バイト

マーティン・エンダー

Tr@Range[#2,0,-#]&

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

n~Sum~{n,#2,0,-#}&

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


2
Tr@Range[#2,0,-#]&またはn~Sum~{n,#2,0,-#}&GBのRubyの答えからトリックを使用します。
マーティンエンダー


5

ゼリー、5バイト

Rxḣ³S

@ Mr.XcoderのJellyソリューションよりも1バイト多くなっていますが、これはJellyでの初めての提出であり、Jellyの暗黙がオペランドをどのように選択するかについてまだ混乱しています。入力の順序があることに注意してくださいk、その後n

説明

Rxḣ³S
R           Range: [1,2,...,k]
 x          Times: repeat each element n times: [1,1,1,2,2,2,...,n,n,n]
  ḣ³        Head: take the first k elements. ³ returns the first argument.
    S       Sum

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


4

ゼリー、4バイト

1インデックス付き

Ḷ:‘S

オンラインでお試しください!またはテストスイートをご覧ください。


私が思うので、あなたは0インデックス作成を行うことができますḶ:Sも動作します
dylnan

@dylnan実際、ここでは0インデックスが意味するものとは思いません。私はロールバックしました、そして、私たちは見るでしょう
Mr. Xcoder

@dylnanゼロによる除算はエラーです。
エリックアウトゴルファー

4

JavaScript(ES6)、 24  21バイト

カリー化構文の入力を受け取ります(n)(k)。のfalse代わりに0返します。

n=>g=k=>k>0&&k+g(k-n)

テストケース

どうやって?

n =>             // main unamed function taking n
  g = k =>       // g = recursive function taking k
    k > 0 &&     // if k is strictly positive:
      k +        //   add k to the final result
      g(k - n)   //   subtract n from k and do a recursive call

これは、@ GBのRubyの回答に似ています

課題では、「階段」を左から右に構築する方法を説明しますが、この再帰関数は下から上に構築します。N = 2及びK = 11

階段


3

バッチ、34バイト

@cmd/cset/a(%2+%2%%%1)*(%2/%1+1)/2

私が見つけた閉じた形式の式。最初の引数nは1から始まり、2番目の引数kは0から始まります。




3

C、38 34バイト

再帰的な定義。

Steadyboxのおかげで-4バイト。

f(n,k){return k--?1+f(n,k)+k/n:0;}

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


Xcoder氏による32バイト、GB

f(n,k){return(k+k%n)*(k/n+1)/2;}

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



1
、GBのアプローチを使用して32のバイトを
氏Xcoder

tio.run/... - > 28バイト
GB

1
34バイト(再帰バージョン):f(n,k){return k--?1+f(n,k)+k/n:0;} オンラインで試してみてください!
-Steadybox

3

R37 33 31バイト

ジュゼッペのおかげで-6バイト

function(n,k)sum(rep(1:k,,k,n))

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

派手なものは何もありません。ハンドルケースK = 0。[0:k]


1
ここで中括弧を取り除くことができます。あなたはインオーダーの引数を使用している場合rep.default、あなたはを取り除くことができます[0:k]使用しrep(1:k,,k,n)ますが、その後、あなたの答えは基本的にrturnbullのですが、ベースRよりもむしろでR + pryr
ジュゼッペ

1
あなたはまだ中括弧を取り除くことができます!{}
ジュゼッペ

[0:k]の置換により、ブレースを忘れてしまいました:)
NofP


2

J、13バイト

1#.]{.(#1+i.)

使い方:

左の引数はn、右の引数はkです。

i. リスト0..k-1を生成します

1+ リストの各番号に1を追加し、1,2、...、k

# 上記でフックを形成するため、リストの各要素のn個のコピーがコピーされます。

]{. それらの最初のnを取る

1#. ベース変換によって合計を見つけます。

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


私はフックが好きです。
コール

2

網膜29 26バイト

\d+
$*
(?=.*?(1+)$)\1
$'
1

オンラインでお試しください!リンクには、優先入力(k最初に0からインデックス付け、1からn2番目にインデックス付け)に再フォーマットするためのテストケースとヘッダーが含まれます。@GBのRubyの答えに触発されました。説明:

\d+
$*

単項に変換します。

(?=.*?(1+)$)\1
$'

nwithinのすべての文字列にk一致し、一致を一致後のすべてに置き換えます。これはk-nk-2nk-3n、しかしnまた試合後、あなたが得るようでkk-nk-2nなどこれも一致してn、単純に(それはもはや必要です)削除されています。

1

結果を合計し、10進数に変換します。



2

Perl 6、39バイト

->\n,\k{(0,{|($_+1 xx n)}...*)[^k].sum}

試して

n kは両方とも1ベースです

拡張:

-> \n, \k { # pointy block lambda with two parameters 「n」 and 「k」

  ( # generate the sequence

    0,         # seed the sequence (this is why 「k」 is 1-based)

    {          # bare block lambda with implicit parameter 「$_」
      |(       # slip this into outer sequence
        $_ + 1 # the next number
        xx n   # repeated 「n」 times (this is why 「n」 is 1-based)
      )
    }

    ...        # keep doing that until

    *          # never stop

  )[ ^k ]      # get the first 「k」 values from the sequence
  .sum         # sum them
}






1

Clojure、54バイト

#(nth(reductions +(for[i(rest(range))j(range %)]i))%2)

2番目の引数kは0から始まり、(f 14 20)28です。


1

APL + WIN、13バイト

+/⎕↑(⍳n)/⍳n←⎕

nを入力してからkを入力するように求めます。インデックスの起源= 1。




1

R、27バイト

取る無名関数knそのためです。through (に対する最初の引数)で構成される長さk(に対する3番目の引数rep)のリストを作成し、各要素の回数(に対する4番目の引数)を繰り返します。次に、そのリストの合計を取ります。1krepnrep

nインデックスは1で、インデックスkは0です。のエラーを返しますn<1

pryr::f(sum(rep(1:k,,k,n)))

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


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