MerricB said:Actually, 4d6 drop lowest, roll six times gives a point buy average of very close to 25.
(I've just created a little computer program to simulate it, and after 10,000 stat arrays, 25 was very closest to the average).
Alternatively, the average for 4d6 drop lowest is 12.25 (approximately). Call that 4 points; so the total is 24 points, plus an additional one for the .25 => 25 point buy.
Cheers!
There was a thread on this a while ago, where a lot of people wrote programs to figure out the average PB value of roling dice (some by trying to figure probabilities, some using "Monte Carlo" methods like you're suggesting), and everyone (including me) came up with an answer in the 29-31 range if you eliminated "hopeless" characters (at least one stat above 13, total modifier greater than zero). The variations mostly depended on how a hopeless character was defined, and whether stats of 7 or lower were given a negative PB value or just always counted as zero. Mine ended up with an average just under 31; the VB.NET 2.0 code is in the sblock...
[sblock]
Code:
Public Class Form1
Private Sub GoBtn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles GoBtn.Click
Dim iterationsCount As Integer
Dim totalPoints As Long = 0
Dim avgPoints As Double
If Integer.TryParse(Me.NumTb.Text, iterationsCount) Then
Dim rnd As New System.Random
For i As Integer = 0 To iterationsCount
totalPoints += RollCharacter(rnd)
Next
avgPoints = totalPoints / iterationsCount
RsltsLbl.Text = avgPoints.ToString
End If
End Sub
Private Function RollCharacter(ByVal rnd As Random) As Integer
Dim charPoints As Integer = 0
Dim diceRslts As New List(Of Integer)
Dim rollValue As Integer
Dim maxVal As Integer = 0
Dim totalMod As Integer = 0
Dim maxStat As Integer = 0
For i As Integer = 1 To 6
'roll 4d6, drop the lowest
rollValue = 0
diceRslts.Clear()
For d As Integer = 0 To 3
diceRslts.Add(rnd.Next(1, 7))
Next
diceRslts.Sort()
For d As Integer = 1 To 3
rollValue += diceRslts(d)
Next
'get point value, adjust total modifier
Select Case rollValue
Case 3
totalMod += -4
charPoints += 0
Case 4
totalMod += -3
charPoints += 0
Case 5
totalMod += -3
charPoints += 0
Case 6
totalMod += -2
charPoints += 0
Case 7
totalMod += -2
charPoints += 0
Case 8
totalMod += -1
charPoints += 0
Case 9
totalMod += -1
charPoints += 1
Case 10
totalMod += 0
charPoints += 2
Case 11
totalMod += 0
charPoints += 3
Case 12
totalMod += 1
charPoints += 4
Case 13
totalMod += 1
charPoints += 5
Case 14
charPoints += 6
totalMod += 2
Case 15
charPoints += 8
totalMod += 2
Case 16
charPoints += 10
totalMod += 3
Case 17
charPoints += 13
totalMod += 3
Case 18
charPoints += 16
totalMod += 4
End Select
maxStat = Math.Max(maxStat, rollValue)
Next
If totalMod > 0 AndAlso maxStat > 13 Then
Return charPoints
Else
Return RollCharacter(rnd)
End If
End Function
End Class