首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >逻辑操作顺序

逻辑操作顺序
EN

Code Golf用户
提问于 2017-07-14 14:39:23
回答 3查看 576关注 0票数 7

任务

给定输入,按操作顺序将其计算为一个数学方程。

但是,我们不使用PEMDAS,而是去掉括号和指数,引入空格- SMDAS -空间,然后是乘法和除法,然后加和减。

这是怎么回事?

每一个在它周围有更多空格的操作符都会得到更多的优先权--但这可能会从一边变化到另一边。通常的优先级测试-- 2+2*2仍然被计算为6-- 2 + 2*2也是这样--它的拼写类似于two .. plus .. two-times-two,但是2+2 *22+2 * 2将等于8- twoPlusTwo .. times two

因此,从任何一个运算符到任何一边,每一个空格较少的运算符和数字都可以按括号中的形式分组,然后按正常方式计算。

或者,您可以将其视为运算符周围的空格,将运算符的优先级降低到较低的位置,或者如果两边的空格不同,则以不同的方式将优先级放在每一侧。

示例

代码语言:javascript
复制
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

Notes

  • 输入总是有效的-它总是包含至少两个数字,用一个符号分隔(-+/* (您可以使用÷))。
  • 输入永远不会以空格结束或开始。
  • 永远不会有一元减法- -4*-6
  • 永远不会被除以零。
  • 过程中可能存在负整数,但输出中却没有负数。
  • 除法只要求对整数工作。
  • 浮点不准确在任何一步的过程都是很好的。
  • 这是密码-高尔夫,每种语言的最短答案获胜!
EN

回答 3

Code Golf用户

发布于 2017-07-14 15:06:18

杰夫特,15字节

代码语言:javascript
复制
OvUr" +%d"_rS'(

在线测试!

是如何工作的

这一挑战实际上是对杰弗提出的。我将试图解释如何:

Japt基本上是JavaScript的简写版本。实际上,在对代码进行了一些更改("transpiling“到JS)之后,它被直接计算为JavaScript。这里有用的是,Japt中的一个空格变成了) in JavaScript (我偶尔会后悔添加了这个特性,因为编写"ungolfed“Japt代码很难),并且会自动添加缺少的括号。

这一切对于这个挑战的意义是,我们只需将运算符之后的所有空格(在一个数字之前)更改为左括号,就可以得到正确的结果:

代码语言:javascript
复制
5*6  +  7*8   -3  *5    Original string
5*6  +((7*8   -3  *5    Japt code that evaluates to the correct number

在转移到JS时,进行了上述更改,结果如下:

代码语言:javascript
复制
     5*6  +((7*8   -3  *5    Japt code
(((((5*6))+((7*8)))-3))*5    transpiled JS code

然后计算JS代码,这将给出预期的结果。

代码语言:javascript
复制
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
票数 16
EN

Code Golf用户

发布于 2017-07-14 15:48:19

V,59字节

代码语言:javascript
复制
òÍ ¨Ä*[+*¯-]©/)±
ͨ[+*¯-]Ä*© /±(ò
Ïò])|é(kòJïò[(Á)jòHDi="

在网上试试!

我想以后再打高尔夫球。其思想是将运算符左侧的空间转换为右边的)(,包围适当的(),使所有家长匹配,并计算行。主要是我的雷克斯需要工作:

代码语言:javascript
复制
 \(\D*[+*\/-]\)/)\1
\([+*\/-]\D*\) /\1(
票数 3
EN

Code Golf用户

发布于 2017-07-16 14:00:55

JavaScript (ES6),116个字节

代码语言:javascript
复制
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`(`)))
代码语言:javascript
复制
<input><input type=button value=Evaluate onclick=o.textContent=``,o.textContent=f(this.previousSibling.value)><pre id=o>

将空格更改为适当的括号,然后在两边添加匹配的括号(其中至少一对将是多余的,这并不重要)并对结果进行评估。

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/132417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档