Rollos de talento en DSA

9

Algunos amigos y yo hemos jugado DSA (un juego de rol de mesa principalmente alemán muy parecido a D&D). Me preguntaba cuáles son las posibilidades de pasar las tiradas, por lo que tendrá que escribir un código para calcularlo.

Tu personaje está definido por estadísticas (de 8 a 14) y (TV) Valores de talento (0 a 21). Por ahora usaremos la escalada como ejemplo.

Pruebas de talento

Un talento (escalada) se ve así: (Coraje-Destreza-Fuerza) TV: 7. Para probar un personaje en un talento, tira estas estadísticas con un dado de 20 lados e intenta llegar por debajo o igual a la estadística, si lo haces bien De lo contrario, puede usar sus puntos de TV para reducir el rollo con una proporción de 1: 1.

Ejemplo

Un cazador con coraje 12, destreza 13 y fuerza 14 está tratando de trepar a un árbol, su televisor es 7.

Tira un 3, el valor está por debajo de 12, por lo que pasó esa tirada.

Luego saca un 17, 17 es 4 más que 13, por lo que 4 TV se acostumbran con 3 restantes.

Para la última tirada obtienes un 14, punto al pasar.

Se pasan todos los rollos y el cazador logró trepar al árbol, quedan 3 televisores.

Entrada

4 valores en cualquier formato que elija, tomados de la entrada estándar de su idioma. Sin embargo, tiene que estar en este orden.

Por ejemplo, 12 13 14 7or 12,13,14,7o como una matriz {12,13,14,7} o mixta[12, 14, 8], 3

Salida

La posibilidad de con qué frecuencia pasan los rollos.

Por ejemplo (para valores anteriores)0.803

12,14,8,3 = 0.322

11,11,12,11 = 0.840

Para la bonificación: nuevamente el formateo no es el problema aquí, envíalo como quieras pero en el siguiente orden:

failed/with 0/with 1/with 2/with 3/with 4/with 5/with 6/with 7 

y así sucesivamente hasta que no quede televisión.

12,13,14,7 = 0.197/0.075/0.089/0.084/0.078/0.073/0.068/0.063/0.273

12,14,8,3 = 0.678/0.056/0.051/0.047/0.168

Desafío y reglas y bonificación

  • Deberá descubrir, dada la entrada, la posibilidad de pasar las tiradas con una precisión de + - 0.5%.

  • -20% si su programa también genera posibilidades de pasar con nTV (ver salida).

  • Este es el , por lo que gana el código más corto en bytes.

Eumel
fuente
1
¿"4 valores en cualquier formato que elija" incluye tomarlos en un orden diferente?
Martin Ender
1
O algo asi [12, 14, 8], 3?
Martin Ender
Pensé que tenía el pedido incluido, ya está aquí. También se permiten entradas mixtas.
Eumel

Respuestas:

2

Pyth - 21 20 19 bytes

Guardado 1 bytes gracias a @ThomasKwa

.Omgvzsg#0-VdQ^SyT3

Test Suite .

Maltysen
fuente
Pyth es tan bueno ... Este es el tipo de pregunta de APL, y solo tengo 27 en APL.
lirtosiast el
se suponía que el orden de la entrada era stat,stat,stat,TVque solo especifiqué eso ahora. Sin embargo, si puede modificarlo fácilmente, sería bueno. ¿Podrías dar una explicación?
Eumel
@Eumel seguro, cambiar el orden no debería ser un problema, estoy en un teléfono en este momento, lo haré cuando llegue a casa.
Maltysen
1

Dyalog APL, 28 bytes

{(+/÷⍴)⍵≥∊+/¨0⌈(⊂⍺)-⍨¨⍳3⍴20}

Este enfoque es el mismo que el de @ Maltysen. No podemos estar seguros de una precisión del 0.5% si solo sacamos unos pocos miles de tiradas de dados al azar, por lo que en su lugar tomamos el promedio sobre todas las tiradas posibles. Esto toma las tres estadísticas como el argumento izquierdo y el valor del talento a la derecha.

Pruébalo aquí !

lirtosiast
fuente