运算顺序PEMDAS是数学中的基本规则,它告诉我们应该执行哪些顺序运算:
“括号,指数,乘法和除法以及加法和减法”
问题是,PEMDAS不是很通用!如果您想以其他顺序执行该怎么办?我们不会把括号弄乱,所以我们将它们放在第一个位置。
创建一个带有两个参数的程序:
- 一个字符串,告诉操作应该遵循的顺序。一些例子是
"DAMES"
,"SAD, ME"
,"ME SAD"
,"MEADS"
。是的,空格和逗号都可以,因为这样可使顺序更容易记住。- 在聊天中遵循以下建议:支持空格和逗号现在是可选的。
- 如果其中一个字母丢失,或者还有其他不应该出现的字母,则可以认为输入无效,并根据需要对其进行处理。
- 字符串或包含应求值的表达式的表达式。
以十进制数或整数形式返回表达式的结果。如果答案不是整数,则必须以十进制数形式返回。
规则:
- 如果您的语言更简单,可以将两个输入参数合并为一个。
- 它不必是字符串,但必须有字母。您不能将Addition替换为1,Division替换为2,依此类推。
- 您可以选择第一个输入。
- 该表达式
从右到左从左到右求值。(规则的更改。在开始的12小时内,具有相反方向的所有提交者将被接受)。 - 这些操作使用以下符号:
( ) ^ * / + -
。例如,您不能使用¤
代替+
添加。 - 输入表达式中的空格无效作为输入
- 如果一元+/-直接在+或-后面,则该输入无效。考虑
3+-2
为无效的输入。可以按照您喜欢的方式对待它(不必产生错误)。如果+
或-
跟随除加号或减号之外的任何其他运算符,则按通常的方式处理:3*-3 = -9
,sin(-2)=-0.909
- 该程序必须严格遵循字母,so
"EMDAS", 1-3+4 => -6
和"EMDSA", 1-3+4 => 2
。
例子:
Input: "EMDAS", "3+6*2/4-1" // -> 3+12/4-1 -> 3+3-1 -> 6-1 -> 5
Output: 5
Input: "DAMES", "3+6*2/4-1" // -> 3+6*0.5-1 -> 9*0.5-1 -> 4.5-1 -> 3.5
Output: 3.5
Input: "SAD, ME", "3+6*2/4-1" // -> 3+6*2/3 -> 9*2/3 -> 9*0.66667 -> 6
Output: 6
Input: "ME ADS", "3+5^4/2-3*2 // -> 3+5^4/2-6 -> 3+625/2-6 -> 628/2-6 -> 314-6 -> 308
Output: 308
Input: "AM EDS", "4*3-sin(0.5^2)*3+1" // -> 4*3-sin(0.5^2)*4 -> 12-sin(0.5^2)*4 -> 4*3-(4*sin(0.5^2)) -> 12-(4*sin(0.5^2)) -> 12-(4*sin(0.25)) -> 12-(4*0.24740) -> 12-0.98961 -> 11.01038
Output: 11.01038
Input: "DAMES", "4-5-6" // -> (4-5)-6 -> = -7
Output: -7 // NOT: -> 4-(5-6) -> 4-(-1) -> 5
请注意,在括号中添加的内容表示乘法4*sin(0.5^2)
是在取幂之前求值的。
这是代码高尔夫球,因此以字节为单位的最短代码获胜。
2
根本不完全相同,但是这个挑战是关于改变另一种操作顺序的,并且启发了我,使我喜欢做类似事情的想法。我认为可以重新设计Haskell的答案来回答这个问题……不确定是否有严格重复的要求,我非常喜欢在没有直接改变运营商本能的情况下进行此挑战的想法!
—
唐·黑斯廷斯
取消了函数的奖励,但是示例中仍然存在sin()。
—
edc65
比前面提到的挑战要邪恶的多,而且我不会将它作为重复的挑战(尽管应该感谢与原始链接)。但是,每个人都清楚地看到《 2560》的邪恶导演就是@Stewie Griffin。我不得不说,我并不感到惊讶。
—
2015年
在英国,我们经常在学校
—
BadHorsie 2015年
BODMAS
或BIDMAS
学校里教它。B
=括号,O
或I
=订单或指数。
是否
—
ev3commander
p
需要?它不在示例中