31
5
Nontransitive dice are nice little toys that defy our intuition in probability theory. We'll need a few definitions for this challenge:
Consider two dice A and B which are thrown at the same time. We say that A beats B if the probability of A showing a larger number than B is strictly greater than the probability of B showing a larger number than A.
Now consider a set of three dice, with labels A, B, C. Such a set of dice is called nontransitive if
- either A beats B, B beats C and C beats A
- or C beats B, B beats A and A beats C.
As one of my favourite examples, consider the Grime dice, which have the following sides:
A: 3 3 3 3 3 6
B: 2 2 2 5 5 5
C: 1 4 4 4 4 4
Interestingly, the mean of each die is 3.5, just like a regular die.
One can show that:
- A beats B with a probability of 7/12.
- B beats C with a probability of 7/12.
- C beats A with a probability of 25/36.
Now these particular dice are even weirder. If we roll each die twice and add up the results, the order of which beats which gets reversed:
- B beats A with a probability of 85/144.
- C beats B with a probability of 85/144.
- A beats C with a probability of 671/1296.
Let's call a set of dice with this property Grime-nontransitive.
On the other hand, if the dice retain their original cycle when using two throws, we call them strongly nontransitive. (If there is no cycle at all for two throws, we simply call them nontransitive.)
The Challenge
Given three six-sided dice, determine which of the above properties this set has, and output one of the following strings: none
, nontransitive
, Grime-nontransitive
, strongly nontransitive
.
You may write a program or function, take input via STDIN, command-line argument, prompt or function argument, and write the result to STDOUT or return it as a string.
You may assume that all sides are non-negative integers. You cannot assume that the sides or the dice are in any particular order. You can take input in any convenient list or string format.
This is code golf, so the shortest answer (in bytes) wins.
Test Cases
none
1 2 3 4 5 6, 6 5 4 3 2 1, 1 3 5 2 4 6
1 1 1 6 6 6, 4 4 4 5 5 5, 5 5 5 5 5 5
1 1 2 5 6 6, 2 2 3 4 4 6, 2 3 3 4 4 5
0 1 2 3 4 5, 1 1 2 3 3 5, 1 2 2 2 3 5
3 13 5 7 13 7, 5 7 11 5 7 13, 5 9 13 5 7 9
nontransitive
1 2 2 4 6 6, 1 2 3 5 5 5, 2 3 4 4 4 4
1 4 4 4 4 4, 2 2 2 4 5 6, 2 3 3 3 5 5
1 2 1 6 5 6, 3 1 3 6 2 6, 2 4 2 4 4 5
3 4 6 6 7 7, 4 4 4 7 7 7, 5 5 5 5 6 7
2 5 11 11 14 14, 5 5 5 14 14 14, 8 8 8 8 8 17
Grime-nontransitive
3 3 3 3 3 6, 2 2 2 5 5 5, 1 4 4 4 4 4
1 1 4 5 5 5, 2 2 2 3 6 6, 3 3 3 4 4 4
2 1 4 6 4 4, 2 4 5 2 3 5, 3 3 6 3 3 3
11 11 13 15 15 16, 12 12 12 13 16 16, 13 13 13 14 14 14
4 4 7 16 19 19, 4 7 13 13 13 19, 4 10 10 10 16 19
strongly nontransitive
2 2 2 5 5 5, 2 3 3 3 5 5, 1 1 4 5 5 5
2 2 2 3 6 6, 2 2 2 5 5 5, 2 2 4 4 4 5
1 5 1 3 6 5, 6 6 4 2 2 1, 5 3 4 3 4 2
0 0 2 4 4 5, 0 1 1 3 5 5, 1 1 2 3 4 4
1 1 9 17 17 21, 1 5 5 13 21 21, 5 5 13 13 13 17
If you want to test your code even more thoroughly, Peter Taylor was kind enough to write a reference implementation, which classified all ~5000 sets of dice with sides 1 to 6 and a mean of 3.5. Pastebin link
I had totally forgotten about non-transitive dice. Thank you :) – npst – 2015-01-09T11:00:22.297
Is the first nontransitive example correct?
1 2 2 4 6 6, 1 2 3 5 5 5, 2 3 4 4 4 4
I'm getting A<B 17/36, B>C 19/36, C<A 16/36. – Tobia – 2015-01-13T00:14:07.577@Tobia You're forgetting that draws are possible. You also need to work out how often each dice loses against the others, and check if that's less than the winning probability: Yes A wins against B with 17/36, but A loses against B with only 16/36, so A beats B. Likewise, C wins against A with 16/36 as you said, but C loses against A with only 14/36, so C beats A. – Martin Ender – 2015-01-13T09:23:22.110