Re: Dice generator - the non-conspiracy take
Posted: 27 February 2026, 18:16
I answer you in this thread since the discussion is spread between two threads otherwise. Since I do not know the game, could you confirm that it is a 10-sided die that is rolled, i.e. all values from 1 to 10 are possible and should be equally likely?Deckeon wrote: ↑27 February 2026, 17:26ok thank you - i've never looked through game logs before. This helps I will track doubles too (11 22 33 44 55 etc) as I think this is actually issue with that.Romain672 wrote: ↑27 February 2026, 15:46 The logs are enough, in that game: https://boardgamearena.com/gamereview?table=789679655 , you don't have to open the replay, just search for the word 'roll' and it seem you see all the rolls done.
That game:
doubles 7 times (side note and i don't think relevant: 3 times with 11 -in game a 1 is always a hit so this really gets noticed)
no triples this game.
52 rolls.
Seems high no?
I will fire up a bunch of games for march and post results... here? or maybe other thread...maybe both. hahaha
Code: Select all
number of bin
doubles height
0 46
1 263
2 730
3 1325
4 1767
5 1845
6 1572
7 1123
8 686
9 364
10 170
11 71
12 26
>= 13 12Code: Select all
julia> before,after = zeros(BigInt,53),zeros(BigInt,53);
julia> after[1] = BigInt(1)
1
julia> for _ in 2:52
for i in 1:53
before[i] = after[i]
after[i] = BigInt(0)
end
for i in 1:52
after[i] += BigInt(9)*before[i]
after[i+1] += before[i]
end
if before[53] != BigInt(0)
error("arrays were not long-enough")
end
end
julia> (after[52],after[53]) == (BigInt(1),BigInt(0))
true
julia> sum(after) == BigInt(10)^BigInt(51)
true
julia> sum(after[i] for i in 14:53) < after[13] < sum(after[i] for i in 13:53) < after[1] < after[12]
true
julia> freqofcappedcount = [after[i] for i in 1:14];
julia> freqofcappedcount[14] = sum(after[i] for i in 14:53)
1226149989198688350756375922675756793966172479740
julia> flooredquotients = [div(freq,BigInt(10)^BigInt(47),RoundDown) for freq in freqofcappedcount];
julia> sum(flooredquotients)
9994
julia> remainders = [rem(freq,BigInt(10)^BigInt(47)) for freq in freqofcappedcount];
julia> sort!(remainders);
julia> cutoff = div(remainders[8]+remainders[9],BigInt(2),RoundNearest)
38971752295788042315123905555939794094376993490
julia> remainders[8] < cutoff < remainders[9]
true
julia> histogramentries = [div(freq,BigInt(10)^BigInt(47),RoundDown)+BigInt(cutoff < rem(freq,BigInt(10)^BigInt(47))) for freq in freqofcappedcount];
julia> sum(histogramentries)
10000
julia> histogramentries
14-element Vector{BigInt}:
46
263
730
1325
1767
1845
1572
1123
686
364
170
71
26
12
julia> Thank you, Gulchen, for the data. I was too lazy to calculate the 95% confidence interval, but my guess of 2 to 10 doubles per game was almost spot on. I should have said, that you should not be surprised if you get a result between 2 and 9 doubles in such a game (meaning that in 95% of all games you land in this interval). 7 doubles is a very likely outcome in a random 52-roll game.Gulchen wrote: ↑27 February 2026, 19:16 histogram entries for doubles from 52 d10 rolls:
Code: Select all
number of bin doubles height 0 46 1 263 2 730 3 1325 4 1767 5 1845 6 1572 7 1123 8 686 9 364 10 170 11 71 12 26 >= 13 12
Julia code to get those numbers:
Code: Select all
julia> before,after = zeros(BigInt,53),zeros(BigInt,53); julia> after[1] = BigInt(1) 1 julia> for _ in 2:52 for i in 1:53 before[i] = after[i] after[i] = BigInt(0) end for i in 1:52 after[i] += BigInt(9)*before[i] after[i+1] += before[i] end if before[53] != BigInt(0) error("arrays were not long-enough") end end julia> (after[52],after[53]) == (BigInt(1),BigInt(0)) true julia> sum(after) == BigInt(10)^BigInt(51) true julia> sum(after[i] for i in 14:53) < after[13] < sum(after[i] for i in 13:53) < after[1] < after[12] true julia> freqofcappedcount = [after[i] for i in 1:14]; julia> freqofcappedcount[14] = sum(after[i] for i in 14:53) 1226149989198688350756375922675756793966172479740 julia> flooredquotients = [div(freq,BigInt(10)^BigInt(47),RoundDown) for freq in freqofcappedcount]; julia> sum(flooredquotients) 9994 julia> remainders = [rem(freq,BigInt(10)^BigInt(47)) for freq in freqofcappedcount]; julia> sort!(remainders); julia> cutoff = div(remainders[8]+remainders[9],BigInt(2),RoundNearest) 38971752295788042315123905555939794094376993490 julia> remainders[8] < cutoff < remainders[9] true julia> histogramentries = [div(freq,BigInt(10)^BigInt(47),RoundDown)+BigInt(cutoff < rem(freq,BigInt(10)^BigInt(47))) for freq in freqofcappedcount]; julia> sum(histogramentries) 10000 julia> histogramentries 14-element Vector{BigInt}: 46 263 730 1325 1767 1845 1572 1123 686 364 170 71 26 12 julia>
Code: Select all
number of occurrences
triples out of 100000
0 63050
1 26808
2 7814
3 1856
4 385
5 72
6 13
7 2
>= 8 0Code: Select all
julia> "right coordinate = 1+8 represents _at least_ 8 triples .";
julia> before,after = zeros(BigInt,2,9),zeros(BigInt,2,9);
julia> "The left coordinate is 2 when the previous two rolls are equal and 1 when they are not equal.";
julia> after[1,1],after[2,1] = BigInt(9),BigInt(1)
(9, 1)
julia> for _ in 3:52
for i in eachindex(before,after)
before[i] = after[i]
after[i] = BigInt(0)
end
for i in 1:9
after[1,i] += BigInt(9)*before[1,i]
after[2,i] += before[1,i]
after[1,i] += BigInt(9)*before[2,i]
after[2,min(9,i+1)] += before[2,i]
end
end
julia> sum(after) == BigInt(10)^BigInt(51)
true
julia> exactcounts = [after[1,i]+after[2,i] for i in 1:9];
julia> flooredquotients = [div(freq,BigInt(10)^BigInt(46),RoundDown) for freq in exactcounts];
julia> sum(flooredquotients)
99996
julia> remainders = [rem(freq,BigInt(10)^BigInt(46)) for freq in exactcounts];
julia> sort!(remainders);
julia> cutoff = div(remainders[5]+remainders[6],BigInt(2),RoundNearest)
5216167804100385420887956005587272694173431082
julia> remainders[5] < cutoff < remainders[6]
true
julia> histogramentries = [div(freq,BigInt(10)^BigInt(46),RoundDown)+BigInt(cutoff < rem(freq,BigInt(10)^BigInt(46))) for freq in exactcounts];
julia> sum(histogramentries)
100000
julia> histogramentries
9-element Vector{BigInt}:
63050
26808
7814
1856
385
72
13
2
0
julia> I am only going to track combat rolls for simplicity, and because i suspect the problem is "quick" dice rolls. While there are pauses in combat like when turn passes to other player, I suspect this issue is happening when dice are rolled in quick succession. there is no way to parse "slow" rolls for combat really to prove my point, but there should still be a slight aberration even including "slow" combat rolls. Environment rolls and events I will not track, only combat.