Arka fon
Masa üstü rol yapma oyunlarındaki ennui kaynaklarından biri çok sayıda zar içeren rulolarla uğraşmaktır. Bir Ayrışma büyüsü yapmak anlık olabilir, ancak 40 zar atmak ve bir araya getirmek kesinlikle değildir!
Bu konuyla ilgili bir dizi öneri rpg.stackexchange.com adresinde tartışılmaktadır . Ancak, bir roller programı kullanma veya ortalama bir zar kullanma gibi bazıları, oyuncuların eğlence ve kontrol hissinin bir kısmını uzaklaştırır. 4 zar atmak ve toplamı 10 ile çarpmak gibi diğerleri, sonuçları çok daha çekingen hale getirmektedir (ortalama zar ters yönde etki ederken).
Bu soru, zar döngü sayısını azaltmak için bir yöntem ile ilgilidir olmayan ortalama sonucu (ortalama) ya da onun swinginess (varyans) ya da değiştirilmesi.
Gösterim ve matematik
Bu soruda, zar rulolarını göstermek için aşağıdaki gösterimi kullanacağız:
- n, d k (örneğin 40d6) k taraflı kalıbın n döngü toplamına değinmektedir.
- n, d k * c (örneğin, 4D6 * 10) sabit bir c çarpılması açıklanmaktadır.
- Ayrıca rulolar (örneğin 4d6 * 10 + 40d6) ve sabitler (örneğin 4d6 + 10) ekleyebiliriz.
Tek bir kalıp rulosu için şunu gösterebiliriz:
- Ortalama : E [1d k ] = (k + 1) / 2
- Varyans : Var (1d k ) = (k-1) (k + 1) / 12
Ortalama ve varyansın temel özelliklerini kullanarak, şunu da çıkartabiliriz:
- Ortalama E [ m, D K * bir + n d L * b + c ] = değilim .e [1d k ] + milyar [1d. L ] + C
- Varyans : Var ( m, D K * bir + n d L * b + c ] = bir . ² m .Var (1d k ) + b ². N .Var (1d l )
Görev
Üç sayı göz önüne alındığında n , k ve r , program çıktı yaklaşan bir yolu olmalı n d k en fazla içinde r aşağıdaki kısıtlamalarla, rulo:
- Solüsyon aynı ortalama ve varyans sahip olmalıdır n d k .
- Daha fazla rulo daha yumuşak bir dağılım ürettiğinden, çözelti, r'ye eşit veya daha az mümkün olan en fazla sayıda rulo içermelidir .
- Çözümlerinizi , Bonus'u hedeflemediğiniz sürece, sadece k taraflı zar kullanmayla sınırlandırmalısınız (aşağıya bakınız).
- Eğer bir çözüm yoksa ( r çok küçük olduğu gibi), program "Ben SEKSİ AYAKKABI BİR GOD OF WAR!" Dizesini çıkarmalıdır.
- Parametreler boşlukla ayrılmış tek bir dize olarak iletilir.
- 1 ≤ n ≤ 100, 1 ≤ olduğunu varsayalım. r ≤ n ve k , 4, 6, 8, 10, 12 ve 20 (masa kullanılan standart zar) biridir.
- Çıktı, Notasyonda açıklanan şekilde (örn. 4d6 * 10 + 5), + s etrafında isteğe bağlı boşluklarla fakat başka hiçbir yerde olmamalıdır. Birim çarpanları da isteğe bağlıdır: 4d6 * 1 ve 4d6'nın her ikisi de geçerlidir.
STDIN (veya en yakın alternatif), komut satırı argümanı veya işlev argümanı üzerinden girdi alarak bir program veya işlev yazabilirsiniz. Sonuçlar STDOUT'a (ya da en yakın alternatife) basılmalı ya da string olarak döndürülmelidir.
Örnekler
>> "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!
puanlama
En kısa kod kazanır. Standart kurallar geçerlidir.
Bonus
-33% (çıkarma işleminden önce yuvarlanır), eğer programınız ayrıca k dışında bir geçerli zar içeren çözümler de getirirse (yukarıda belirtilen geçerli değerler 4, 6, 8, 10, 12 ve 20'dir). Bunu yapmayı seçerseniz, uygun olduğunda daima bu gibi çözümleri iade etmeli ve çok sayıda kalıp kullanan çözümleri kullanmalısınız. Örnek:
>> "7 4 3"
3d6+7