KnowledgeHub
Questions
Tags
Users
Search
Alex Rivera
|
Logout
Edit Question
Title
Body
Rules Write a function that accepts string as a parameter, returning evaluated value of expression in dice notation , including addition and multiplication. To clear the things up, here comes EBNF definition of legal expressions: roll ::= [positive integer], "d", positive integer entity ::= roll | positive number expression ::= entity { [, whitespace], "+"|"*"[, whitespace], entity } Example inputs: "3d6 + 12" "4*d12 + 3" "d100" Using eval functions, or similar, is not forbidden, but I encourage to solving without using these. Re-entrancy is welcome. I cannot provide test-cases, as output should be random ;). Format your answers' titles: language, n characters (important notes — no eval, etc.) My ruby solution, 92 81 characters, using eval: def f s eval s.gsub(/(\d+)?d(\d+)/i){eval"a+=rand $2.to_i;"*a=($1||1).to_i} end Another ruby solution, not shorter (92 characters), but I find it interesting — it still uses eval but this time in quite creative way. class Fixnum def**b eval"a+=rand b;"*a=self end end def f s eval s.gsub(/d/,'**') end
Tags (comma-separated)
Save Edits
Cancel