非传递性骰子是违反概率论直觉的漂亮小玩具。对于此挑战,我们需要一些定义:
考虑两个骰子一个和乙这是在同一时间抛出。我们说,一个 节拍 乙,如果概率一个显示出比数量较多乙严格小于的概率大于乙出比大数量的一个。
现在考虑一组三个带有标签A,B,C的骰子。这样的一组骰子被称为非传递,如果
- 任一甲节拍乙,乙节拍Ç和Ç节拍甲
- 或Ç节拍乙,乙节拍甲和甲节拍Ç。
作为我最喜欢的示例之一,请考虑Grime骰子,它具有以下方面:
A: 3 3 3 3 3 6
B: 2 2 2 5 5 5
C: 1 4 4 4 4 4
有趣的是,每个骰子的平均值是3.5,就像常规骰子一样。
可以证明:
- A以7/12的概率击败B。
- B以7/12的概率击败C。
- C以25/36的概率击败A。
现在这些特定的骰子甚至变得更奇怪了。如果我们将每个骰子掷两次,然后将结果相加,那么拍子的顺序就会颠倒:
- B击败A的可能性为85/144。
- C以85/144的概率击败B。
- A击败C的可能性为671/1296。
让我们用此属性Grime-nontransitive调用一组骰子。
另一方面,如果骰子在使用两次抛出时仍保持其原始循环,则将它们称为非传递性强。(如果两次抛出都没有循环,我们可以简单地将它们称为非传递式。)
挑战
给出三个六面的骰子,确定哪些上述性能这组具有,和下面的字符串输出的一个:none
,nontransitive
,Grime-nontransitive
,strongly nontransitive
。
您可以编写程序或函数,通过STDIN,命令行参数,提示或函数参数接受输入,然后将结果写入STDOUT或以字符串形式返回。
您可以假设所有边都是非负整数。您不能假定边或骰子的顺序特殊。您可以采用任何方便的列表或字符串格式输入。
这是代码高尔夫球,因此最短的答案(以字节为单位)获胜。
测试用例
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
如果您想更彻底地测试您的代码,彼得·泰勒(Peter Taylor)很友好,可以编写一个参考实现,该实现将所有〜5000套骰子分类为1到6面,平均值为3.5。粘贴链接
1 2 2 4 6 6, 1 2 3 5 5 5, 2 3 4 4 4 4
我得到A <B 17/36,B> C 19/36,C <A 16/36。