对于那些不熟悉的人,柯克曼的女学生问题如下:
一所学校的15位年轻女士连续三天并排走出家门,连续7天:要求每天安排她们,以便没有两个人能并排走两次。
我们可以将其视为嵌套的3 x 5列表(或矩阵):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
本质上,原始问题的目标是找出安排上述矩阵的7种不同方式,以使两个字母永远不会共享同一行。从MathWorld(上面链接)中,我们找到了以下解决方案:
[[a,b,c] [[a,d,h] [[a,e,m] [[a,f,i] [[a,g,l] [[a,j,n] [[a,k,o]
[d,e,f] [b,e,k] [b,h,n] [b,l,o] [b,d,j] [b,i,m] [b,f,g]
[g,h,i] [c,i,o] [c,g,k] [c,h,j] [c,f,m] [c,e,l] [c,d,n]
[j,k,l] [f,l,n] [d,i,l] [d,k,m] [e,h,o] [d,o,g] [e,i,j]
[m,n,o]] [g,j,m]] [f,j,o]] [e,g,n]] [i,k,n]] [f,h,k]] [h,l,m]]
现在,如果有不同数量的女学生怎么办?可能会有第八天吗?†这是我们的挑战。
†在这种情况下,没有††,但不一定是其他数组尺寸
††我们可以很容易地显示出来,因为它a
与其他字母排成一行。
挑战:
鉴于女生(即阵列的尺寸的输入(行,列比)3 x 5
,4 x 4
或[7,6]
,[10,10]
等),输出最大可能组“天”适合上述规定的要求。
输入:
女生数组的尺寸(您希望的任何合理的输入形式)。
输出:
满足以上要求的最大可能数组系列(任何合理形式)。
测试用例:
Input: [1,1]
Output: [[a]]
Input: [1,2]
Output: [[a,b]]
Input:* [2,1]
Output: [[a]
[b]]
Input: [2,2]
Output: [[a,b] [[a,c] [[a,d]
[c,d]] [b,d]] [b,c]]
Input: [3,3]
Output: [[a,b,c] [[a,d,g] [[a,e,i] [[a,f,h]
[d,e,f] [b,e,h] [b,f,g] [b,d,i]
[g,h,i]] [c,f,i]] [c,d,h]] [c,e,g]]
Input: [5,3]
Output: [[a,b,c] [[a,d,h] [[a,e,m] [[a,f,i] [[a,g,l] [[a,j,n] [[a,k,o]
[d,e,f] [b,e,k] [b,h,n] [b,l,o] [b,d,j] [b,i,m] [b,f,g]
[g,h,i] [c,i,o] [c,g,k] [c,h,j] [c,f,m] [c,e,l] [c,d,n]
[j,k,l] [f,l,n] [d,i,l] [d,k,m] [e,h,o] [d,o,g] [e,i,j]
[m,n,o]] [g,j,m]] [f,j,o]] [e,g,n]] [i,k,n]] [f,h,k]] [h,l,m]]
There may be more than one correct answer.
*感谢@Frozenfrank纠正测试用例3:如果只有一列,则只能有一天,因为行顺序无关紧要。
这是代码高尔夫竞赛-最短答案胜出。
这是否以任何方式与有限的射影平面有关,还是我在考虑其他问题?
—
尼尔
@尼尔,我不知道。恐怕我没有资格回答。;-)
—
斯科特·米尔纳
有时间限制吗?
—
Artyer
@Artyer不行,但我希望能够测试代码...
—
Scott Milner
@Neil是有趣的维基百科阅读。
—
魔术章鱼缸