バックグラウンド
卓上ロールプレイングゲームでのennuiのソースの1つは、多くのサイコロを含むロールを扱うことです。崩壊呪文を唱えることは瞬間的かもしれませんが、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の(M個の D K * + N D L * B + C = A ²。M .Var(1D K)+ B ²。N .Var(1D L)
仕事
3つの整数n、k、およびrが与えられた場合、プログラムは、以下の制約で、最大でrロールでn d kを近似する方法を出力する必要があります。
- 解の平均と分散はn d kと同じでなければなりません。
- 解決策は、より多くのロールがよりスムーズな分布を生成するため、r以下の可能な最大数のロールを含む必要があります。
- ボーナスを目指している場合を除き、ソリューションをkサイドダイスのみに制限する必要があります(以下を参照)。
- 解決策がない場合(rが小さすぎるため)、プログラムは文字列 "I AM A SEXY SHOELESS GOD OF WAR!"を出力する必要があります。
- パラメータは、スペースで区切られた単一の文字列として渡されます。
- あなたは1≤と仮定することができるN ≤100、1≤ R ≤ Nとそのkが 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