Dice generator - the non-conspiracy take

Forum rules
Please DO NOT POST BUGS on this forum. Please report (and vote) bugs on : https://boardgamearena.com/bugs
Gulchen
Posts: 220
Joined: 01 October 2017, 06:55

Re: Dice generator - the non-conspiracy take

Post by Gulchen »

Deckeon wrote: 27 February 2026, 17:26...

52 rolls.

...
There are also 5 instances of ​ ​ ​ " is rolled" ​ .
User avatar
euklid314
Posts: 679
Joined: 06 April 2020, 22:56

Re: Dice generator - the non-conspiracy take

Post by euklid314 »

Deckeon wrote: 27 February 2026, 17:26
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.
ok 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.

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
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?

If a game with 52 rolls is an usual one then you should expect 5 doubles per game. But note that this is the expected value and any value from 2 to 10 doubles should not bother you (unless it happens in *every* game that the doubles are more often than the expected value).

If a usual game has approx. 50 rolls per game then you should have 1 triple every second game you play - on average.

Please note that you have to analyze a series of consecutive games and it is completely worthless if you tell us only those games that support your theory. You have played approx. 50 games, thus you should be able to show us approx. 25 games where the number of doubles and triples are higher than the expected value. Only if you give a complete analysis (i.e., also of those games where the number of doubles and triples are less than expected) we can judge if there is a problem with the randomness.

If the game logs are not accessible for all games then you could analyze your next 20 games you play. I think we can continue the discussion here even if the topic is not related to Catan at all.
Gulchen
Posts: 220
Joined: 01 October 2017, 06:55

Re: Dice generator - the non-conspiracy take

Post by Gulchen »

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> 
User avatar
Deckeon
Posts: 17
Joined: 03 May 2024, 19:59

Re: Dice generator - the non-conspiracy take

Post by Deckeon »

Yea we can go with games from now till end of march (or sooner depending on if I'm convinced I'm wrong). I have not been playing much. It might be nice to play game where I don't care about them, will try to get big space battles on purpose with lots of dice rolling.

Many recent wins/losses for me are through some amazing subterfuge - for instance that one game where it looks like the log was truncated, my opponent fooled me with a double decoy and stealth ships - so there was no battles. Got to my home planet with no fight and smoked me with only that one fight. So the game has great value on BGA even if I am right about goofy rolling schemes.

10 sided dice are rolled. yes 10% chance any double, 1% any triple.

I'm going to track 1s separate for 11 is 1/100 and 111 1/1000 for my own interest really but if it is a noticeable outlier it will be worth noting.
User avatar
euklid314
Posts: 679
Joined: 06 April 2020, 22:56

Re: Dice generator - the non-conspiracy take

Post by euklid314 »

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> 
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.

Can you also give us the same data for triples? Without calculating I would guess that it could look something like:

number of triples: occurrences out of 10.000
0: 68.000
1: 22.000
2: 8.000
3: 1.000
4+: 1.000

I.e., my guess is that you have triples in approx. 30% of all games (of length 52 rolls). But since more than 1 triple can happen in a game the expected value of triples per game is close to 1 triple per game...
Gulchen
Posts: 220
Joined: 01 October 2017, 06:55

Re: Dice generator - the non-conspiracy take

Post by Gulchen »

for 52 d10 rolls:

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          0

Just like my above post, these are from applying the Largest Remainder Method

to the exact probabilities, rather than from Monte Carlo. ​ The Julia code is below.

Code: 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> 
User avatar
euklid314
Posts: 679
Joined: 06 April 2020, 22:56

Re: Dice generator - the non-conspiracy take

Post by euklid314 »

Unfortunately I dont know the programming language Julia. But I can interpret your results.

Thus we can tell Deckeon that he should find triples in 37% of his games - if they include 52 dice rolls. It seems that the specific game varies widely in number of dice rolled thus the 37% are only a rough estimate. Definitely triples are not rare in this game - even with 10-sided dice.

I like the approach of Deckeon that he is willing to check his gut feeling with data because most of the complainers about dice are satisfied that they "feel" something is wrong. Only with data one can have a valid discussion.

[edit]: I am quite proud about my guess of the number of triplets. It was a pure guess without any calculation at all. In my opinion I came pretty close to the actual true values. :-)
User avatar
Deckeon
Posts: 17
Joined: 03 May 2024, 19:59

Re: Dice generator - the non-conspiracy take

Post by Deckeon »

Gulchen wrote: 27 February 2026, 18:16
Deckeon wrote: 27 February 2026, 17:26...

52 rolls.

...
There are also 5 instances of ​ ​ ​ " is rolled" ​ .
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.
User avatar
Deckeon
Posts: 17
Joined: 03 May 2024, 19:59

Re: Dice generator - the non-conspiracy take

Post by Deckeon »

Noticing some of the games are just showing last turn:
https://boardgamearena.com/gamereview?table=814794584

Anyone know why?
Gulchen
Posts: 220
Joined: 01 October 2017, 06:55

Re: Dice generator - the non-conspiracy take

Post by Gulchen »

Was there at least one battle before the last turn?
Post Reply

Return to “Catan”