OU blog

Personal Blogs

Richard Walker

Who Will Win: A, B or C?

Visible to anyone in the world
Edited by Richard Walker, Saturday 1 November 2025 at 17:22

Imagine three fair spinners.

sketch%20%281%29.png

If we compare A and B there are 9 equally likely outcomes. The ones where A wins are highlighted.

2-1  2-6  2-8  4-1  4-6  4-8  9-1  9-6  9-8

A beats B 5/9 or about 56% of the time.

if we compare B with C there are 9 equally likely outcomes. The ones where B wins are highlighted.

1-3  1-5  1-7  6-3  6-5  6-7  8-3  8-5  8-7

B beats C 5/9 or about 56% of the the time.

So A beats B most of the time and B beats C most of the time. How will A fare against C? Intuitively we might reason A beats B and B beats C, so A will beat C most of the time too. But not so! C beats A the majority (56% again) of the time. Here's C versus A, C's wins highlighted.

3-2  3-4  3-9  5-2  5-4  5-9  7-2  7-4  7-9

This is a simplified version I made up of something called intransitive dice (Wikipedia), where three dice are numbered in such a way that A will beat B the majority of the time, B will beat C the majority of the time, but when A is pitted against C it is C that has the greater chance of winning. It's also possible to have a longer chain, of four or more dice.

Interesting

If we arrange the numbers 1 through 9 into a 3x3 square and note which numbers are on spinners A, B and C, we find we hey a "Latin square"; each letter appears in each row and each column,

sketch%20%282%29.png

Also note the three numbers on any spinner always sum to 15.

Just for fun I wrote and ran a Python simulation that spins the three spinners a million times and prints out the percentage of the time A beats B, that B beat C and that C beats A, and sure enough I got

A>B 55 %
B>C 56 %
C>A 56 %

Program below

import random

A = [2, 4, 9]
B = [1, 6, 8]
C = [3, 5, 7]

abeatsb = 0
bbeatsc = 0
cbeatsa = 0

trials = 1000000

for go in range(trials):
    a = random.choices(A,k=1)[0]
    b = random.choices(B,k=1)[0]
    c = random.choices(C,k=1)[0]
    if a > b:
        abeatsb = abeatsb + 1
    if b > c:
        bbeatsc = bbeatsc + 1
    if c > a:
        cbeatsa = cbeatsa + 1
    
print('A>B',round(abeatsb/10000),'%')
print('B>C',round(bbeatsc/10000),'%')
print('C>A',round(cbeatsa/10000),'%')

Permalink
Share post

This blog might contain posts that are only visible to logged-in users, or where only logged-in users can comment. If you have an account on the system, please log in for full access.

Total visits to this blog: 3332344