I dadi di Fate ⬀ sono semplici dadi a sei facce con due segni +, due segni - e due facce bianche ( + ─ ). Il risultato delle azioni in Fate può dipendere dal lancio contemporaneo di 4 dadi i cui risultati vengono sommati: dopo un tiro potremo avere un risultato da -4 a +4.
Esempio: ─ + + = +1
Facendo il punto, abbiamo:
- 4 dadi
- 3 modi per ciascun dado, cioè 3 risultati possibili: -1, 0, +1
- 9 risultati finali possibili: -4, -3, -2, -1, 0, +1, +2, +3, +4
- 81 casi totali; 34, cioè 3 risultati per ciascun dado
Le permutazioni con ripetizioni che danno i risultati possibili sono:
Risultato | Descrizione | Permutazioni |
---|---|---|
+4 | possibile solo con quattro "+1", + + + + cioè un modo ripetuto quattro volte | 4!/4! = 1 |
+3 | possibile con tre "+1" e uno "0", + + + o + + + o + + + o + + + , spostando il nullo nelle varie posizioni. | 4!/3!1! = 4 |
+2 | due "+1" e due "0"; oppure tre "+1" e un "-1" | 4!/2!2! + 4!/3!1! = 6 + 4 = 10 |
+1 | un "+1" e tre "0"; oppure due "+1", un "-1" e un "0" | 4!/1!3! + 4!/2!1!1! = 4 + 12 = 16 |
0 | quattro "0"; oppure un "+1", un "-1" e due "0"; oppure due "+1" e due "-1" | 4!/4! + 4!/1!1!2! + 4!/2!2! = 1 + 12 + 6 = 19 |
Ovviamente le soluzioni per i risultati negativi sono simmetriche ai positivi corrispondenti.
Dunque si ottiene la seguente casistica:
Risultato | Probabilità | Percentuale |
---|---|---|
-4 | 1/81 | 1.23% |
-3 | 4/81 | 4.94% |
-2 | 10/81 | 12.35% |
-1 | 16/81 | 19.75% |
0 | 19/81 | 23.46% |
+1 | 16/81 | 19.75% |
+2 | 10/81 | 12.35% |
+3 | 4/81 | 4.94% |
+4 | 1/81 | 1.23% |
Sperimentalmente, in Perl:
sim@rame:/tmp$ perl t.pl 1000000
-4 12394 0.0124
-3 49100 0.0491
-2 122794 0.1228
-1 197992 0.1980
0 234807 0.2348
1 197596 0.1976
2 123408 0.1234
3 49609 0.0496
4 12300 0.0123
sim@rame:/tmp$ cat -n t.pl
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 my ($NUM) = @ARGV;
6 my @VALUES = (-1, 0, +1);
7 my %STATS = ();
8 $STATS{ r(4) }++ for 1 .. $NUM;
9
10 for my $v (sort { $a <=> $b } keys %STATS) {
11 printf("%3s %10d %10.4f\n", $v, $STATS{$v}, $STATS{$v} / $NUM);
12 }
13
14 sub r {
15 my ($n) = @_;
16 die "n must be > 0" if $n < 1;
17 my $tot = 0;
18 $tot += d() for 1 .. $n;
19 return $tot;
20 }
21
22 sub d { $VALUES[ int(rand(scalar(@VALUES))) ]; }
Conclusi i conti si nota una distribuzione interessante, con le code a probabilità decisamente ridotta e i valori centrali (-1, 0, +1) compatti e vicini: uno sbilanciamento del genere non si riesce ad ottenere con un semplice d20 che ha la granularità del 5%.