表現をシグマ化する


20

知らなかった人のために、シグマ はギリシャ語の文字であり、数学で加算記号として頻繁に使用されます。を表す依存する式を表す文字列が与えられた場合、各について結果の合計を計算します。簡潔には、次のようなを見つける必要があります。kEkEkk{12345}S

S=k=15Ek

式の例:Ek=k2+k2


スペック

  • あなたは保証されています:
    • 式が有効であるため、エラーが含まれておらず、選択した構文に依存していること(例:サポートしている場合のみ2*k、なし2k
    • あなただけの結果の中で値が定義されているので、のように何の値に1/0infまたはがnan表示されません
  • 上記の式は、選択したプログラミング言語の制限に適合しているため、オーバーフローやその他の制限に関連するエラーは発生しません。
  • 代わりに他の非空白ASCII文字をk選択できます
  • プログラムは次の操作をサポートする必要があります。
    • さらに(+plus()add()sum()
    • 減算(-minus()subtract()
    • べき乗(**^pow()負塩基および指数に支持して、または他の指定されなければなりません)
    • 形で平方根sqrt(k)k^0.5k**0.5あなたが望む、またはしかし、他
    • 乗算と除算
  • 提出は、完全なプログラムまたは機能のいずれかであり、その使用法について言及しています
  • 出力時に、後続の/先頭の空白は許可されます
  • 最小精度:小数点以下2桁

テストケース(with k

+---------------+--------------+   
|  Input = E(k) |    Output    |
|---------------+--------------|
|2*k            | 30           |
|---------------+--------------|
|sqrt(k)        | 8.38         | (* with minimum decimal precision)
|---------------+--------------|
|k+k/2+k**2     | 77.5         |
|---------------+--------------|
|k**2           | 55           |
+---------------+--------------+

スコアは(ソース+コンパイラフラグの)バイト数になります。これらの抜け穴は厳密に禁止されていることに注意しながら、最も低いスコアの有効な提出が勝ちます。以下は、物事を明確にするためのPython擬似コードです。


plus()代わりに服用できます+か?(あまりにも他のすべての演算子のために同じ質問)
Stewieグリフィン

はい@StewieGriffin、 、、plus() および等価物は許可されています。編集をご覧ください。add()sum()
ミスターXcoder

いいえ、式は1回しか使用できません。@ ComradeSparklePony
Mr. Xcoder

後置記法を使用できますか?たとえば、上からのテストケース3は次のようになりますN N2/+N2**+
同志SparklePony

それは非常に奇妙ですが、E(x)@ ComradeSparklePonyの「フォーマット」を明確に述べている限り許可されています
Mr. Xcoder

回答:



9

Mathematica、17 14 13バイト

3バイトを節約してくれたIan Millerに感謝します。

1バイトを保存してくれたLegionMammal978に感謝します。

#~NSum~{k,5}&

入力は、を含む実際の式でなければなりませんk。例:

#~NSum~{k,5}&[Sqrt[k]^3+4]

2
私は、Mathematicaは、このためにインを作っていたことを推測している必要があります
ミスターXcoder

2
Mathematicaには常に状況に対応するビルトインがあります。:P
完全に人間の

あなたはそれを必要と1,しませんSum
イアンミラー

実際には、それを短くすることができますN@#~Sum~{k,5}&
イアンミラー

@IanMillerああ、もちろん。ありがとうございました!
マーティンエンダー



3

05AB1E8 7 6バイト

6G¹.VO

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

入力は後置記法であり、変数N使用します。05AB1Eはスタックベースの言語であるため、後置記法のみが機能します。

の形式E(N):操作を実行する番号を記述してから、操作の符号を記述します。例えば、3+4だろう3 4+3*4+2*3だろう3 4* 2 3* +。また、この使用することに注意してくださいt代わりにsqrt、とm代わりに**、そうsqrt(N)だろうNt

説明:

6G¹.VO
6G     For N in range(1,6). This includes [1,2,3,4,5].
  ¹.V  Read and eval input.
     O Sum results.


3

Japt、10バイト

6ÆK=XOxUÃx

入力文字列は変数を大文字にする必要がありますKsqrt(K)として入力する必要がありますK**0.5

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

説明

evalスコープは私の都合では機能しませんでした。カウント変数Xをグローバルとして再定義する必要がありましたK

6ÆK=XOxUÃx      // implicit: U = input string
6oXYZ{K=XOxU} x // expanded

6oXYZ{      }   // create array [0, 6) and map to function:
      K=X       //   redefine the array value to global K
         OxU    //   eval the input string
              x // sum the resulting array

transpiling場合うーん、私は不思議Oxに直接するeval(...それに役立つだろう
ETHproductions


2

APL(Dyalog)、9バイト

+/⍎⎕⊣k←⍳5

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

加算は+、減算は-、乗算は×、除算は÷べき乗であり*、実行は右から左であるため、()式をグループ化するために使用します。

入力はですk

説明

k←⍳5                    Set k to be equal to the vector 1 2 3 4 5
                       The left argument:
+/                      Sum of
⍎⎕                      The evaluated input (the eval returns an array because k is an array)

そして、ここに、入力として列車を取得するソリューションがあります(ゼリーの回答のように)+/(⍎⎕)¨⍳5


2

Common Lisp、55バイト

(defun f(x)#.(read))(print(+(f 1)(f 2)(f 3)(f 4)(f 5)))

オンラインで試す

Example input - output: 
(* x 2) - 30 
(sqrt x) - 8.382333 
(+ (/ x 2) x (expt x 2)) - 155/2 
(expt x 2) - 55

異なる、長い(58バイト)バージョン-1から7までの合計を行うと短くなります。

(print #.`(+,@(mapcar #'(lambda(x)#.(read))'(1 2 3 4 5))))

さらに別の長いメソッド(65 64バイト)-関数を定義せず、単に式をループに挿入します。金額が大きいほど短くなります。

(setf a(read)b 0)(loop as x from 1 to 5 do(incf b #.a))(print b)

2

Swift、202 184バイト

import Foundation;func s(i:String){print([1,2,3,4,5].map{NSExpression(format:i.replacingOccurrences(of:"k",with:"\($0).0")).expressionValue(with:nil,context:nil)as!Float}.reduce(0,+))}

何らかの理由で、これはローカルでのみ実行されます:(。

ここに私がやっていることの説明があります:

import Foundation // Import the Foundation module

func s(i:String){ // Create a function that takes in a String and returns a Float

    print( // Print the result of the follow algorithm to strdout

        [1,2,3,4,5].map{ //Conduct the follow code on numbers 1 - 5

            NSExpression(format: // Create an expression with the following String and return it 

            i.replacingOccurrences(of:"k",with:"\($0).0")) // Create a string replacing all ocurrances of 'k' in `i` with the current Float from the map

           .expressionValue(with:nil,context:nil)as!Float // Get the resulting value of the expression

       }.reduce(0,+) // Add the result of all the expressions together
    )
}

@Mrに感謝します。15バイトを節約するためのXcoder!


2

TI-Basic、12バイト

Σ(expr(Ans),K,1,5

で呼び出します"string":prgmNAME。ここstringで、有効なTI-Basic式はKです。


同じ長さの興味深いソリューション:Ans->u:sum(u(1,5
lirtosiast


1

dc31 24バイト

?sa1k[lax+Kd1+k5>p]dspxp

入力は、逆ポーランド記法(後置記法とも呼ばれます)で与えられ、角括弧([])で囲まれている必要があります。

  • Kkパラメータとして置換;
  • + 加算を表す;
  • -減算を表し、_その後に負の数を表す任意の数が続きます。
  • * 乗算を表す;
  • / 部門を表す;
  • ^ べき乗を表します。
  • v 平方根を表します。

たとえば、-2*k+k+3*k**2+k**0.5-k/2として入力され[_2K*K+K2^3*+Kv+K2/-]ます。これは、事実を十分活用しKているdc現在の精度(最初に設定を戻すコマンド1)。したがって、最後までに、これはの精度で出力を返します6

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



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