Quero jogar Dungeons and Dragons, mas não tenho dados! Seu desafio é rolar alguns dados de D&D.
A especificação do formato de entrada no formato Backus-Naur é:
<valid-input> ::= <opt-integer> "d" <integer> <opt-modifier>
<opt-integer> ::= | <integer>
<opt-modifier> ::= | "+" <integer>
<integer> ::= "0" | "1" | "2" | "3" | "4" | "5" |
"6" | "7" | "8" | "9" | <integer> <integer>
O número inteiro opcional antes de d
é o número de dados a serem lançados; deve ser pelo menos 1
e o padrão é 1
se não for fornecido.
O número inteiro necessário imediatamente após o d
é o número de lados que cada dado possui; deve ser pelo menos 1
. Os lados de cada dado são números inteiros positivos consecutivos distintos começando em 1
.
O modificador opcional pode ser +0
e o padrão é +0
se não for especificado.
Por exemplo, para a entrada 2d10+5
, você gera dois números aleatórios de 1 a 10 inclusive, os soma e adiciona 5. Em seguida, você produzirá o resultado.
Se você receber uma entrada inválida, como 2d
, d20+
, 0d4
, 2d5+1+2
, 2+2
, ou qualquer outra coisa que não se encaixa neste formato, você deve saída " Invalid input
". Caso contrário, você deve gerar apenas um único número inteiro aleatório, ponderado de acordo com a entrada. Por exemplo, 3d6
deve produzir mais 10
s do que4
s .
Casos de teste
Input Minimum possible output Maximum possible output
d1 1 1
d6 1 6
d1+3 4 4
d20+3 4 23
2d1 2 2
2d6+2 4 14
d01 1 1
d01+0 1 1
01d01+01 2 2
3d20+10 13 70
d Invalid input
d0 Invalid input
d+0 Invalid input
d0+0 Invalid input
0d1 Invalid input
0d1+1 Invalid input
d1+ Invalid input
1d Invalid input
1d1+ Invalid input
1d+1 Invalid input
2d+2d Invalid input
d2+d2 Invalid input
d2+2+2 Invalid input
d2-1 Invalid input
-d2 Invalid input
-2d2 Invalid input
4*3 Invalid input
4*d2 Invalid input
Isso é código-golfe , então o código mais curto em bytes vencerá!
n
e p
como opcional, mas a entrada que escolhe não incluí-los ( d20+
) como inválidos.
+
sinal só deve ser adicionado se o modificador p
for fornecido.
1d4+1d6
para uma invasão desonesta atacar com uma adaga) ou ter um resultado negativo p
(por exemplo, 1d20-1
para uma verificação de habilidades sem classificações / treinamento e um modificador de habilidades negativo).
2d8 + 1d6 + 4
? Você vai ter um mau tempo
02d05+073
uma entrada válida?