Dice Notation
Completed Jan. 7, 2010
In roleplaying games, there is often a need to resolve the outcome of actions using random numbers. In tabletop games, this is usually accomplished by using a variety of dice. The number and type of dice are often specified by using a type of "dice notation".
The basic syntax for this notation is "XdY" where X is the number of dice and Y is the faces on each die. These rolls can be futher modified using basic arithmetic operators such as "+" and "*" for addition an multiplication, respecively. Here are some examples:
 "1d20" means roll one 20sided die
 "3d6+10" means roll 3 6sided dice (summing the totals) and add 10 to the result
 "4*d100" means roll a 100sided die and multiply the result by 4
Your task to create a program that can example a dice notation expression as an input, and generate a usable result.
It should at least accept the following syntaxes:
 "3d6" roll 3 6sided die (summing the total)
 "2d4+10" roll 2 4sided die and add 10
 "d20" roll 1 20sided die (the 1 is implied if not provided)
 "3*4d6" roll 4 sixsided die and multiply the result by 3
 "d10 * d10" roll 2 10sided dice and multiply the result
Extra credit:

Also accept subtraction "" and division "/" operators

Support "keep" syntax as well. This will allow you to specify whether to keep or discard certain dice rolls. This takes the form XdYkZ, where X is number of dice to roll, Y is the number of faces, and Z is how many dice to keep. If this notation is used, you should keep the "best" dice, which means you get rid of the lowest rolls first. For example: "4d6k3" means roll 4 sixsided dice, keeping the best 3. If the rolls turned up as 1,3,4,5 you would discard the 1, and the total would be 12.

Also accept parenthes "()" for operator precedence. Example: "(1d20+3)*5"

Allow the result of die rolls to be used as parameters in subsequent rolls For instance: "(d20)d6" means to roll a d20, and use the result to specify how many sixsided die to roll.

Write an analyzer to determine the probability of each result from a given dice notation experession :)
This challenge is now closed.
Scoreboard
None yet! 
Come Chat!
Join channel ##proggit on freenode.
Bugs
Having issues with the the site? Let us know.