Sigmafy表达


20

对于那些不知道的人,Sigma 是希腊字母,在数学中被大量用作求和符号。给定一个表示根据表达式的字符串,我们将表示È ķ ,计算结果之和为È ķ ,对于每个ķ { 1 2 3 4 5 }。简而言之,您应该找到S使得:kE(k)E(k)k{1,2,3,4,5}S

S=k=15E(k)

表达式的示例:E(k)=k2+k2


眼镜

  • 您可以保证:
    • 该表达式有效,因此不包含任何错误,并且取决于所选择的语法(例如:如果仅支持2*k,则不会存在2k
    • 只能在结果中定义值,因此不会出现1/0inf或之类的值nan
  • 您可以假定上面的表达式适合您选择的编程语言的限制,因此不会导致溢出或任何其他与限制有关的错误
  • k可以选择其他任何非空白ASCII字符代替
  • 您的程序必须支持以下操作:
    • 此外(+plus()add()sum()
    • 减法(-minus()subtract()
    • 幂(**^pow()或他人,应注明),与负基地和指数支持
    • 平方根的形式sqrt(k)k^0.5k**0.5,或者其他但是你想
    • 乘法与除法
  • 提交可以是完整程序,也可以是函数,同时提及其用法
  • 输出时允许任何尾随/前导空格
  • 最低精度:2位小数

测试案例(带有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 Griffin

@StewieGriffin是,plus()add()sum()和等价物都允许的。参见编辑。
Xcoder先生17年

不,您只能使用一次表达式,@ ComradeSparklePony
Xcoder先生17年

我们可以使用后缀表示法吗?例如,从顶部开始的测试用例3将类似于:N N2/+N2**+
同志SparklePony

这很奇怪,但是只要您明确声明E(x)@ComradeSparklePony 的“格式” 即可
允许

Answers:


3

果冻,5个字节

vЀ5S

在线尝试!

输入有效的果冻单链(我在链接中打高尔夫球了)。

怎么运行的

vЀ5S
 Ѐ     for each of ...
   5        5 (implicitly converted to [1,2,3,4,5]), ...
v           evaluate the input with the above as argument
    S   and find the sum

9

Mathematica,17 14 13字节

感谢Ian Miller节省了3个字节。

感谢LegionMammal978节省了1个字节。

#~NSum~{k,5}&

输入应为包含的实际表达式k,例如:

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

2
我应该猜到Mathematica内置了此功能
Xcoder先生

2
Mathematica 始终具有针对情况的内置函数。:P
完全人类的,

您不需要1,中的Sum
伊恩·米勒

实际上,它可以缩短为N@#~Sum~{k,5}&
伊恩·米勒

@IanMiller当然,哦。谢谢!
马丁·恩德


7

JavaScript(ES7),31个 30字节

用途k**0.5sqrt(k)

f=(e,k=6)=>--k&&f(e,k)+eval(e)

console.log(f("2*k"))
console.log(f("k**0.5"))
console.log(f("k+k/2+k**2"))
console.log(f("k**2"))

在线尝试!


再次忍者!做得很好。
粗野的

3

05AB1E8 7 6字节

6G¹.VO

在线尝试!

输入是在后缀表示法,和使用该变量N。05AB1E是基于堆栈的语言,因此仅后缀表示法有效。

格式E(N):写下您要用于执行该操作的数字,然后写下该操作的符号。例如,3+4将是3 4+3*4+2*3将是3 4* 2 3* +。另外请注意,这里使用t的,而不是sqrtm代替**,所以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

嗯,我想知道是否Ox直接进行转档eval(会对此有所帮助……
ETHproductions'Jul


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
    )
}

感谢@先生。Xcoder可节省15个字节!


2

TI基本(12字节)

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

用调用"string":prgmNAME,其中string是的任何有效TI基础表达式K


相同长度的有趣解决方案:Ans->u:sum(u(1,5
lirtosiast

1

堆叠,16字节

5~>[@k#~]2/"!sum

在线尝试!

5~>包含1到5的范围。2/使函数二进位,"成对!执行并执行。因此[1, 5],这将范围与输入映射,然后在将范围成员定义为时对其进行评估k。然后,将结果相加。


1

dc31 24字节

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

输入必须以反向波兰符号(也称为后缀符号)给出,并用方括号([])括起来:

  • K替换k为参数;
  • + 代表加法;
  • -代表减法,_后跟代表负数的任何数字;
  • * 代表乘法;
  • / 代表师;
  • ^ 代表幂
  • v 代表平方根。

例如,-2*k+k+3*k**2+k**0.5-k/2将输入为[_2K*K+K2^3*+Kv+K2/-]。这充分利用了以下事实:Kdc命令返回当前精度(最初设置为1)。因此,最后,它将返回精度为的输出6

在线尝试!



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.