这项挑战对PPCG用户Dennis赢得了The Programming Language Quiz的强盗部分表示敬意。
查看Dennis的PPCG个人资料页面,我们可以看到一些令人印象深刻的内容:
目前,他的声誉超过6.8 万,使他在销售代表中排名第二,以近3万的成绩超过了第三名。他最近赢得了我们的新主持人选举,并在他的名字旁边得到了一颗闪亮的新钻石。但我个人认为,丹尼斯最有趣的部分是他的PPCG用户ID号:12012。
乍一看12012
几乎像回文,反转时的数字相同,但差一点。它可以成为回文21012
如果我们交换了第一的位置1
,并2
,它可以成为回文12021
如果我们换最后1
和2
。同样,遵循不写数字前导零的约定,交换第一个1
和0
结果,02112
或者2112
换句话说,这是另一个回文。
让我们将Dennis数定义为一个正整数,它本身不是回文的,但是可以通过交换任意两个数字中的至少一对的位置而成为回文。丹尼斯数的顺序是可以交换以组成(不一定是不同的)回文数的不同数字对的数量。
这样的顺序12012
是3,因为3个不同的对其位数(12012
,,)可围绕交换以产生回文。碰巧是最小的3丹尼斯数。12012
12012
12012
10
是最小的丹尼斯数目和具有顺序1,因为绕切换1
和0
给出01
又名1
其是回文。
虚数前导零不算作可切换数字。例如,更改8908
为08908
并交换前两位以获得回文80908
是无效的。8908
不是丹尼斯数字。
非丹尼斯数字可以说是0阶。
挑战
编写一个程序或函数,该程序或函数采用正整数N并以某种合理的格式(例如或)打印或返回第N个最小的Dennis数及其顺序。12012 3
(12012, 3)
例如,12012
第774个丹尼斯数774
是,因此如果是程序的输入,则输出应类似于12012 3
。(奇怪的是,774是另一个丹尼斯数字。)
以字节为单位的最短代码获胜。
以下是丹尼斯的前20个数字及其参考顺序:
N Dennis Order
1 10 1
2 20 1
3 30 1
4 40 1
5 50 1
6 60 1
7 70 1
8 80 1
9 90 1
10 100 1
11 110 2
12 112 1
13 113 1
14 114 1
15 115 1
16 116 1
17 117 1
18 118 1
19 119 1
20 122 1