L'écriture d'un programme de force brute semble indiquer que la différence est minime.
J'ai additionné les six attributs et compté le nombre de fois où ce total apparaît.
La méthode 3d6 six fois se regroupe autour d'un total de 72, la méthode 4d6 drop low se regroupe autour d'un total de 74.
Un jet direct de 3d6 donne un total de 63.
Le temps 6 de 3d6 est plus étroitement groupé et s'étend de 56 à 95 tandis que le temps 6 de 4d6 s'étend de 40 à 100.
Voici le code source pour Visual Basic
Option Explicit
Dim Result1(1 To 18 * 6) As Long
Dim Result2(1 To 18 * 6) As Long
Dim Result3(1 To 18 * 6) As Long
Private Sub Command1_Click()
Dim I As Long
Dim R1 As Long
Dim R2 As Long
Dim R3 As Long
Cls
For I = 1 To 100000
R1 = RollStat6TimesTakeBest
R2 = RollStat4
R3 = RollStat
Result1(R1) = Result1(R1) + 1
Result2(R2) = Result2(R2) + 1
Result3(R3) = Result3(R3) + 1
Next I
Dim F As FileSystemObject
Set F = New FileSystemObject
Dim T As TextStream
Set T = F.CreateTextFile("C:\test.csv", True)
T.WriteLine "Total,3d6 6 times , 4d6 drop one , straight 3d6"
For I = 1 To 18 * 6
T.WriteLine CStr(I) & "," & CStr(Result1(I)) & "," & CStr(Result2(I)) & "," & CStr(Result3(I))
Next I
T.Close
MsgBox "Done"
End Sub
Private Function D(Roll As Integer) As Integer
Dim Result As Long
Dim Test As Double
Result = Rnd * 1000000000
D = Result Mod Roll + 1
End Function
Private Function Roll3D6() As Integer
Roll3D6 = D(6) + D(6) + D(6)
End Function
Private Function RollStat() As Integer
Dim Total As Integer
Dim I As Long
For I = 1 To 6
Total = Total + Roll3D6
Next I
RollStat = Total
End Function
Private Function RollStat6TimesTakeBest() As Integer
Dim Best As Integer
Dim I As Long
Dim Roll(1 To 6) As Integer
For I = 1 To 6
Roll(I) = RollStat
Next I
Best = Roll(1)
For I = 2 To 6
If Best < Roll(I) Then Best = Roll(I)
Next I
RollStat6TimesTakeBest = Best
End Function
Private Function Roll4D6DropLow() As Integer
Dim Roll(1 To 4) As Integer
Dim Low As Integer
Dim I As Integer
Dim Total As Integer
Roll(1) = D(6)
Roll(2) = D(6)
Roll(3) = D(6)
Roll(4) = D(6)
Low = 1
For I = 2 To 4
If Roll(I) < Roll(Low) Then Low = I
Next I
For I = 1 To 4
If I <> Low Then Total = Total + Roll(I)
Next I
Roll4D6DropLow = Total
End Function
Private Function RollStat4() As Integer
Dim Total As Integer
Dim I As Long
For I = 1 To 6
Total = Total + Roll4D6DropLow
Next I
RollStat4 = Total
End Function