相关疑难解决方法(0)

评估骰子滚动符号字符串

规则

编写一个接受字符串作为参数的函数,以骰子表示法返回表达式的计算值,包括加法和乘法.

为了清楚起来,EBNF对法律表达的定义如下:

roll ::= [positive integer], "d", positive integer
entity ::= roll | positive number
expression ::= entity { [, whitespace], "+"|"*"[, whitespace], entity }
Run Code Online (Sandbox Code Playgroud)

示例输入:

  • "3d6 + 12"
  • "4*d12 + 3"
  • "D100"

不禁止使用eval函数或类似函数,但我鼓励在不使用这些函数的情况下求解.欢迎重新入门.

我无法提供测试用例,因为输出应该是随机的;).

格式化答案的标题:语言,n个字符(重要说明 - 没有评估等)


我的红宝石溶液,92 81个字符,使用eval:

def f s
eval s.gsub(/(\d+)?d(\d+)/i){eval"a+=rand $2.to_i;"*a=($1||1).to_i}
end
Run Code Online (Sandbox Code Playgroud)

另一种红宝石的解决方案,而不是更短(92个字符),但我觉得很有意思-它仍然使用eval但这次颇有创意的方式.

class Fixnum
def**b
eval"a+=rand b;"*a=self
end
end
def f s
eval s.gsub(/d/,'**')
end
Run Code Online (Sandbox Code Playgroud)

language-agnostic expression-evaluation dice

21
推荐指数
3
解决办法
4716
查看次数