[9/30/2012] Challenge #102 [easy] (Dice roller) : dailyprogrammer
問題
ダイス表記(dice notation)とは"AdB(+/-)C"という形式の文字列(A,B,Cは数)を受け取って以下の計算を行う記法である。
- 1からBまでの乱数(B面ダイス)をA回ふって合計する。
- 1の結果にCを加減する。
ただしAとCは省略してもよい("d8+4", "4d6+2", "d3"など)。Aが省略された場合1として計算する。Cが省略された場合手順2の計算は行わない。
解答
import re import random def dice_roll(notation): r = re.compile(r"(\d*)d(\d+)([+-]?\d*)") a, b, c = r.search(notation).groups() a = int(a) if a != '' else 1 b = int(b) c = int(c) if c != '' else 0 result = sum(random.randint(1, b) for i in range(a)) + c return result
簡易な割に色々な分布の乱数を得られておもしろいと思います。