给定输入,按操作顺序将其计算为一个数学方程。
但是,我们不使用PEMDAS,而是去掉括号和指数,引入空格- SMDAS -空间,然后是乘法和除法,然后加和减。
每一个在它周围有更多空格的操作符都会得到更多的优先权--但这可能会从一边变化到另一边。通常的优先级测试-- 2+2*2仍然被计算为6-- 2 + 2*2也是这样--它的拼写类似于two .. plus .. two-times-two,但是2+2 *2或2+2 * 2将等于8- twoPlusTwo .. times two。
因此,从任何一个运算符到任何一边,每一个空格较少的运算符和数字都可以按括号中的形式分组,然后按正常方式计算。
或者,您可以将其视为运算符周围的空格,将运算符的优先级降低到较低的位置,或者如果两边的空格不同,则以不同的方式将优先级放在每一侧。
input = output
2+2*2 = 6
2+2-2 = 2
2+12/6 = 4
228+456/228 = 230
2+0*42 = 2
73-37-96+200 = 140
2+2 * 2 = 8
5*6 + 7*8 -3 *5 = 415
4+4*4+ 4*4-4*2 / 4*4-2 = 2
228+456 /228 = 3
2+2 * 3-6 * 4/2 + 4*3 + 1000 / 5*5 / 5-3 + 1 = 9
2+0 * 42 = 84
5*5 *7-1 = 174-+/* (您可以使用∙或÷))。-4*-6。发布于 2017-07-14 15:06:18
OvUr" +%d"_rS'(在线测试!
这一挑战实际上是对杰弗提出的。我将试图解释如何:
Japt基本上是JavaScript的简写版本。实际上,在对代码进行了一些更改("transpiling“到JS)之后,它被直接计算为JavaScript。这里有用的是,Japt中的一个空格变成了) in JavaScript (我偶尔会后悔添加了这个特性,因为编写"ungolfed“Japt代码很难),并且会自动添加缺少的括号。
这一切对于这个挑战的意义是,我们只需将运算符之后的所有空格(在一个数字之前)更改为左括号,就可以得到正确的结果:
5*6 + 7*8 -3 *5 Original string
5*6 +((7*8 -3 *5 Japt code that evaluates to the correct number在转移到JS时,进行了上述更改,结果如下:
5*6 +((7*8 -3 *5 Japt code
(((((5*6))+((7*8)))-3))*5 transpiled JS code然后计算JS代码,这将给出预期的结果。
OvUr" +%d"_rS'( Implicit: U = input string
Ur" +%d" Replace each match of / +\d/ in U with
_rS'( the match with each Space replaced with a '('.
Ov Evaluate the result as Japt.
Implicit: output result of last expression发布于 2017-07-14 15:48:19
发布于 2017-07-16 14:00:55
f=
s=>(s=s.replace(/./g,c=>c>` `?(b=1/c?`)`:`(`,c):b),g=c=>s.split(c).length,eval(`(`.repeat(g`)`)+s+`)`.repeat(g`(`)))<input><input type=button value=Evaluate onclick=o.textContent=``,o.textContent=f(this.previousSibling.value)><pre id=o>将空格更改为适当的括号,然后在两边添加匹配的括号(其中至少一对将是多余的,这并不重要)并对结果进行评估。
https://codegolf.stackexchange.com/questions/132417
复制相似问题