背景
桌上型角色扮演游戏中ennui的一种来源是处理涉及许多骰子的掷骰。施放解散咒语可能是瞬间的,但滚动并加在一起40个骰子肯定不是!
rpg.stackexchange.com上讨论了许多处理此问题的建议。但是,其中一些(例如使用滚轴程序或平均骰子)会剥夺玩家的一些乐趣和控制感。其他方法,例如滚动4个骰子并将总数乘以10,会使结果波动更大(平均骰子作用相反)。
这个问题涉及减少骰子掷骰数而不改变平均结果(均值)或其摆动(方差)的方法。
记数法和数学
在这个问题中,我们将使用以下表示法来表示骰子掷骰:
- n d k(例如40d6)是指k面模具的n卷总和。
- n d k * c(例如4d6 * 10)描述将结果乘以常数c。
- 我们还可以添加滚动(例如4d6 * 10 + 40d6)和常数(例如4d6 + 10)。
对于单模辊,我们可以证明:
- 均值:E [1d k ] =(k + 1)/ 2
- 方差:Var(1d k)=(k-1)(k + 1)/ 12
利用均值和方差的基本属性,我们可以进一步推断出:
- 均值:E [ m d k * a + n d l * b + c ] = am .E [1d k ] + bn。[1d l ] + c
- 方差:VAR(米 d ķ * 一个 + Ñ d 升 * b + c ^ ] = 一个。² 中号 .VAR(1D ķ)+ b ²。Ñ .VAR(1D 升)
任务
给定三个整数n,k和r,您的程序最多应输出一种在最多r个滚动中近似n d k的方式,并具有以下约束:
- 解应具有与n d k相同的均值和方差。
- 该解决方案应包含最大数量的小于或等于r的卷,因为更多的卷会产生更平滑的分布。
- 您应该将解决方案限制为仅使用k边骰子,除非您的目标是奖金(请参阅下文)。
- 如果没有解决方案(因为r太小),则程序应输出字符串“ I AM A SEXY SHOELESS GOD OF WAR!”。
- 参数以单个用空格分隔的字符串形式传入。
- 你可以假设1≤ Ñ ≤100,1≤ [R ≤ Ñ和ķ是4,6,8,10,12和20(标准骰子在桌面使用)之一。
- 输出应采用注释中描述的格式(例如4d6 * 10 + 5),并在+ s左右带有可选空格,而在其他地方则没有其他空格。单位乘数也是可选的:4d6 * 1和4d6均有效。
您可以编写程序或函数,通过STDIN(或最接近的替代方案),命令行参数或函数参数获取输入。结果应打印到STDOUT(或最接近的结果)或作为字符串返回。
例子
>> "10 6 10"
10d6
>> "10 6 4"
2d6*2+2d6+14
>> "10 6 3"
1d6*3+1d6+21
>> "10 6 2"
1d6*3+1d6+21
>> "10 6 1"
I AM A SEXY SHOELESS GOD OF WAR!
计分
最短的代码胜出。适用标准规则。
奖金
-33%(在减法前四舍五入),如果您的程序还返回包含除k以外的有效骰子的解决方案(如上所述,其中有效值为4、6、8、10、12和20)。如果选择这样做,则应始终在适当时返回此类解决方案,并处理使用多种类型的芯片的解决方案。例:
>> "7 4 3"
3d6+7