这是挑战(我自己的发明,但如果以前出现在网络的其他地方,我不会感到惊讶).
编写一个函数,该函数采用单个参数,该参数是简单数学表达式的字符串表示形式,并将其作为浮点值进行计算."简单表达"可以包括以下任何一种:正十进制数或负十进制数,+,-,*,/,(,).表达式使用(正常)中缀表示法.操作员应按其出现的顺序进行评估,即不像在BODMAS中那样进行 评估,但当然应该正确观察括号.该函数应该为此表单的任何可能表达式返回正确的结果.但是,该函数不必处理格式错误的表达式(即语法错误的表达式).
表达的例子:
Run Code Online (Sandbox Code Playgroud)1 + 3 / -8 = -0.5 (No BODMAS) 2*3*4*5+99 = 219 4 * (9 - 4) / (2 * 6 - 2) + 8 = 10 1 + ((123 * 3 - 69) / 100) = 4 2.45/8.5*9.27+(5*0.0023) = 2.68...
我预计会有某种形式的"作弊"/狡猾,所以请让我预先反对它!通过作弊,我指的是eval在动态语言(如JavaScript或PHP)中使用或等效函数,或者同时编译和执行代码.(我认为我的"没有BODMAS"的规格几乎可以保证这一点.)除此之外,没有任何限制.我在这里预计会有一些Regex解决方案,但不仅仅是这样,我们会感到很高兴.
现在,我主要对C#/ .NET解决方案感兴趣,但是任何其他语言都是完全可以接受的(特别是F#和Python用于功能/混合方法).我还没有决定我是否会接受最短或最巧妙的解决方案(至少对于语言而言)作为答案,但我欢迎任何语言的任何形式的解决方案,除了我刚才禁止的!
我现在在这里发布了我的C#解决方案(403个字符).更新: …
多年前,我听说有人要证明每个计算机程序只需要三个指令即可解决:
我想听听你的意见.我的意思是将任何算法表示为计算机程序.你同意吗?
我听说过,如果程序员有足够的时间和技能,使用任何特定的语言和足够的代码行,那么任何程序都可以使用任何给定的语言创建.我知道它肯定不会具有成本效益,例如,在BASIC中重写Adobe Photoshop,但是一个足够好且耐心的程序员可能会用任何语言创建任何程序吗?
如果一种语言具有控制结构和变量,但不支持数组,列表,内存访问和分配等,那么它是否可以完成Turing?
也许,如果没有限制,你可以创建变量的量,可以通过像创建变量模拟数组array_1,array_2...... array_6000通过他们和手动循环,并以某种方式创建复杂的数据结构和递归?
编辑:即使您不能通过名称操作访问变量(array_10+i不允许)?