2
阵列可以改组吗?
背景 非常熟练的卡处理人员能够运用这样的技术:将卡座完美地切成两半,然后完美地插入卡。如果他们从已排序的牌组开始并连续52次完美执行此技术,则牌组将恢复为已排序的顺序。您面临的挑战是将一副纸牌组成一个整数数组,并确定是否只能使用Faro随机排序对其进行排序。 定义 从数学上来说,法鲁混洗是对2 n个元素(对于任何正整数n)的置换,它将位置i(1索引)中的元素移到位置2 i(mod 2 n +1)。我们还希望能够处理奇数长度的列表,因此在这种情况下,只需将一个元素添加到列表的末尾(如果您有一个方便的话,一个小丑即可),然后Faro像上面那样洗净新列表,但是忽略检查列表顺序时添加的虚拟元素。 目标 编写程序或函数,该程序或函数接受整数列表,如果一定数量的Faro混洗会导致该列表以不降序排列(即使该数字为零-小列表也应显示真值),则返回或输出真值。否则,返回或输出错误。 例子 [1,1,2,3,5,8,13,21] => True [5,1,8,1,13,2,21,3] => True [9,36,5,34,2,10,1] => True [1,0] => True [0] => True [] => True [3,2,1] => True [3,1,2] => False [9,8,7,6,5,4,3,2,1,0] => True [9,8,7,6,5,4,3,2,0,1] => False [3,1,4,1,5,9,2,6,9] => False [-1,-1,-1,-2] => True 计分 这是代码高尔夫球,因此以字节为单位的最短源代码获胜。