En Dungeons & Dragons , casi todo se decide tirando un dado. Por lo general, si la tirada es mayor o igual que un valor específico, su intento de hacer lo que quisiera tiene éxito y, de lo contrario, falla. Más comúnmente, un dado de 20 lados (también conocido como d20) se usa para tirar.
Otras veces, se utiliza el sistema de desafío de habilidad. Es similar al sistema simple descrito anteriormente, pero el éxito está determinado por si el jugador (s) tiene éxito o no tira una determinada cantidad de veces antes de fallar una determinada cantidad de veces. Por ejemplo, los jugadores pueden estar intentando abrir múltiples cerraduras en una puerta con un número limitado de cerraduras. Los lanzamientos exitosos individuales representan la elección exitosa de una de las cerraduras, y los lanzamientos fallidos individuales representan romper una cerradura. El éxito general significaría seleccionar con éxito todas las cerraduras antes de romper todas las cerraduras.
Además, ciertos rollos pueden ser rollos críticos. En un d20, sacar un 1 es una falla crítica, lo que resulta en la falla inmediata de todo el desafío (en el ejemplo anterior, los jugadores pueden alertar accidentalmente a un guardia). Lanzar un 20 es un éxito crítico, lo que resulta en el éxito inmediato de todo el desafío (en el ejemplo anterior, los jugadores pueden encontrar un conjunto de llaves para las cerraduras, eliminando la necesidad de elegirlas). En el caso de una tirada crítica, el desafío termina inmediatamente y se decide el resultado, independientemente del número anterior de éxitos y fracasos.
En este desafío, se le dará una dificultad, el número de éxitos necesarios y el número de fracasos en los que se falla el desafío. Debes simular a un jugador que intenta el desafío y generar el resultado.
Entrada
3 enteros, que representan el valor que debe cumplirse o superarse para tener éxito en una tirada individual, la cantidad de éxitos necesarios para tener éxito en el desafío y la cantidad de fallas en las que el desafío falla. El orden y el formato de las entradas no importan, siempre que especifique el orden que utilizará. La dificultad estará entre 1 y 20, inclusive, y el número de éxitos y fracasos estará entre 1 y 100, inclusive.
Salida
Los resultados de cada una de las tiradas de d20 (enteros, en orden), y el resultado general del desafío (un valor verdadero / falso). El formato no importa, siempre y cuando los resultados individuales estén en orden, el resultado general viene antes o después de todos los rollos individuales (por ejemplo, no puede generar el resultado general en el medio de los rollos), y usted especifica qué formato de salida usa y lo usa de manera consistente.
Ejemplos (los valores entre paréntesis son para explicación y no necesitan ser incluidos):
Entrada:
12 5 3 (difficulty successes failures)
Salida:
15 (success, 1-0)
10 (failure, 1-1)
5 (failure, 1-2)
16 (success, 2-2)
12 (success, 3-2)
15 (success, 4-2)
19 (success, 5-2)
True (overall success)
Entrada:
15 2 3 (difficulty failures successes)
Salida:
0 (overall failure)
15 (success, 1-0)
12 (failure, 1-1)
13 (failure, 1-2)
Entrada:
5 5 10 (successes failures difficulty)
Salida:
11 (success, 1-0)
5 (failure, 1-1)
20 (critical success)
1 (overall success)
Entrada:
3 10 3 (failures difficulty successes)
Salida:
12 (success, 1-0)
11 (success, 2-0)
1 (critical failure)
False (overall failure)
Reglas
- Este es el código de golf , por lo que gana el código más corto en bytes
- Debe elegir aleatoriamente un valor entero entre 1 y 20 (inclusive) para cada rollo. Cada valor debe tener la misma probabilidad de ser elegido (o lo más parecido posible a igual).
the number of successes and failures will both be between 1 and 100, inclusive.
Entonces, sí, existe la posibilidad de que una sola falla resulte en el fracaso de todo el desafío.Respuestas:
JavaScript,
83787675 bytesEste código cuenta recursivamente los éxitos y fracasos a medida que ocurren. Cuando los éxitos (
s
) o los fracasos (f
) han regresado0
, terminamos con eltrue
valor!s
whens
is0
o con el valor falso def
whenf
is0
.La salida es de la forma de expresión regular
/^(-\d{1,2})+(0|true)$/
(o, más estrictamente/^(-[1-9]|-1[0-9]|-20)+(0|true)$/
). Es decir, la entrada tiene un guión inicial, luego los valores del rollo delineados por guiones, y finalmente el resultado final (0
otrue
), que no está delineado del rollo final. Sin embargo, esto sigue siendo una gramática inequívoca porque el resultado de utilmate y la tirada final siempre se pueden distinguir: el último carácter de la salida (ya sea0
oe
) siempre es indicativo del resultado, y una final0
siempre se lee por separado del número (s) del rollo final.Resultados de muestra para
F(11,3,4)
:Explicación:
Este código funciona rodando un d20 negativo y (ab) usando los signos negativos como delimitadores.
Las expresiones booleanas de número menos funcionan porque
true
yfalse
se convierten en1
y0
en un contexto numérico. En este caso,d>-r
será1
si el lanzamiento es un fracaso y0
si fue un éxito.fuente
Python, 134 bytes
Gracias Pietu1998 por los bytes guardados
Bastante simple, probablemente se pueda jugar un poco más, pero necesitábamos algo para comenzar. Pruébalo en línea .
fuente
from random import*
y suelterandom.
, use enrandint(1,20)
lugar derandrange(20)+1
, reemplaceand
con*
. También puede poner el resultado final al comienzo de la salida, ahorrando espacio.Python 2,
123121 bytes(Esta respuesta mezcla espacios y pestañas , por lo que el primer nivel de sangría es un solo espacio, mientras que el segundo es una sola pestaña).
La función
f
toma los siguientes argumentos:a
, el umbral para que una tirada de dado individual cuente como un éxito,b
, la cantidad de éxitos necesarios para el éxito general,c
, la cantidad de fallas necesarias para la falla general.En cada tirada del dado,
b
oc
se disminuye (pero no ambos). Mientras ambos sean positivos, se repite nuevamente, excepto en el caso de falla crítica o éxito crítico.Suponiendo que no haya éxitos o fracasos críticos, cuando el ciclo finalice
b
oc
sea cero, pero no ambos. En ese caso, la función solo devuelve el valor actual dec
, que es cero (Falsey) si agotamos todas nuestras fallas, y positivo (Verdad) si lo logramos.Como beneficio adicional, la salida le indica cuántas fallas le quedan, lo cual es bueno en caso de que (digamos) más cerraduras para elegir más tarde. (A menos que termine en una falla crítica o éxito, en cuyo caso el resultado será un booleano en lugar de un int.)
fuente
Pip , 39 bytes
Alguien dijo que quería ver una solución en un lenguaje de golf.
Estoy bastante seguro de que esto no usa ninguna función de idioma más nueva que la pregunta. Toma datos como argumentos de línea de comandos en este orden: dificultad, se requieren éxitos, se requieren fallas. Salidas 0 para falla general o no cero para éxito general.Pruébalo en línea!
El enfoque es una estrategia bastante sencilla de bucle while, con un truco o dos tomados de otras soluciones. Aquí hay una versión con comentarios, espacios en blanco y algunos resultados adicionales:
fuente
Ruby 2.2, 75 bytes
Solución iterativa básica. Ejemplo de ejecución:
Podría salida:
Puedes verlo ejecutándose en IDEONE aquí .
fuente
VBA 180 bytes
Salida de ejemplo
El último dígito de salida será un
0
paraFalse
o un1
paraTrue
. Cada rollo está separado por una nueva línea. Esto utiliza VBA integrado en RNG,rnd()
que es conocido por no ser tan aleatorio , pero esto debe cumplir los requisitos lo mejor posible.fuente
SpecBAS - 165 bytes
La entrada debe ingresarse en orden de dificultad, éxitos, fracasos.
La nueva versión de SpecBAS ahora permite "?" en lugar de
PRINT
y elimina la necesidad de hacerLET
frente a las asignaciones variables, por lo que esta fue una buena manera de probarlas.Como las matrices están basadas en 1 de manera predeterminada, la línea 6 devuelve 0/1 si la tirada supera la dificultad y agrega 1 para actualizar el índice correcto.
fuente
Perl 6 ,
10199 bytesLa entrada es una matriz mutable que contiene dificultades, éxitos y fracasos.
La salida es una lista de dos elementos, el primer elemento es una lista de los valores acumulados, el segundo elemento es el número de fallas restantes.
Uso:
fuente