なじみのない人のために、カークマンの女子高生問題は次のようになります。
学校の15人の若い女性は、連続して7日間、3人並んで歩きます。2人が2度並んで歩かないように、毎日手配する必要があります。
私たちは、ネストされたようにこれを見て可能性が3で5リスト(または行列):
[[a,b,c]
[d,e,f]
[g,h,i]
[j,k,l]
[m,n,o]]
基本的に、元の問題の目標は、2つの文字が1行を複数回共有しないように、上記のマトリックスを配置する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]]
さて、女子学生の数が異なる場合はどうなりますか?8日目がありますか?†これが私たちの挑戦です。
†ここでない††、必ずしもではないが、他の配列の次元のために
††我々は簡単にするため、これを表示することができ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.
* テストケース3を修正してくれた@Frozenfrankに感謝します。列が1つしかない場合、行の順序は重要ではないため、1日しかありません。
これはコードとゴルフの競争です。最短の回答が勝ちます。