圆周率里的麻将

2 月的时候,群友看 VTB 直播雀魂,发现主播为了防止互动的时候窥屏看到手牌,PS 了一张看起来像手牌的图来挡住真实的手牌。

群友受此启发,纷纷讨论自己也要这么玩,PS 各种役种的牌扮老虎,比如大家都喜欢的国士无双:

国士无双

大家云集响应,因为之前正好写过生成器,趁此机会我就说群友要啥我就帮群友 PS,都可以做。后来群友觉得正经的役没意思,想搞点不一样的,说要搞个圆周率。这就有意思了。话题很自然的转到了那能不能胡牌的问题上,因为只有数字,先默认牌型是清一色,一试,发现小数点后最开始的 14 位数字就真的能凑成一副胡牌:

3.14159265358979 -> 234 678 555 999 11

我立刻兴致来了,马上就想看看位数再往后,还能有哪里能凑成胡牌,这就开始写脚本。

圆周率位数的迭代之前写飞花令的时候用过,Ctrl+V 过来,然后是判断是否和牌的算法。简单来说按照一般和牌的标准型n*AAA+m*ABC+DD=14,通过先取雀头DD,然后交换先取刻子AAA后顺子ABC或者先顺子后刻子的逻辑迭代完整副手牌,看残张是否为零就能确认这副手牌是否和牌。

写完代码,测试了几次,又另外加入了七对子牌型的判断,然后以一万位为目标执行了一遍。不出意料还真的有很多位置的数列能够凑成和牌。感觉这还是值得做个视频记录一下。

视频里只迭代了小数点后一万位的数字。在测试脚本的时候,其实试验过迭代到二十万位,已经相当耗时了,不过也因此遇到了一些比较值得一说的牌型:

比如遇到的第一个平和是在第 209 位小数,数列是7 5 6 6 5 9 3 3 4 4 6 1 2 8,牌型是66 123 345 456 789,还是一个一气贯通

断幺九在第 222 位小数,数列是8 4 7 5 6 4 8 2 3 3 7 8 6 7,牌型是66 777 888 234 345

四暗刻在第 5391 位小数,数列是8 8 2 8 1 6 1 3 3 2 3 1 6 6,牌型是22 111 333 666 888

二杯口在第 15912 位小数,数列是8 5 7 4 5 6 9 8 1 4 7 1 9 6,牌型是11 456 456 789 789,这也是第一个七对子牌型(但规则只计算二杯口),下一个七对子牌型在 16834 位,但同样也是二杯口,再下一个则是 21513 的一色双龙会,国标役种。真正的七对子要到 35441 位才能遇到,6 4 6 4 5 5 1 2 7 8 1 2 7 8,牌型11 22 44 55 66 77 88

一色双龙会在第 21513 位小数,数列是5 7 2 3 9 7 3 9 5 1 2 8 8 1,牌型是123 123 55 789 789

九莲宝灯在第 32452 位小数,数列是9 2 1 9 5 1 9 6 7 5 1 4 8 3,牌型是111 234 55 678 999,还是个最漂亮的九莲宝灯。

四暗刻绿一色在第 162552 位小数,数列是4 2 4 3 3 3 4 8 8 2 2 6 6 6,牌型是222 333 444 666 88,显然这还是个纯绿一色。

最后回顾下一切的开端:

开端

最后更新于 Mar 17, 2021 00:25 UTC
Built with Hugo
主题 StackJimmy 设计