魔方分割数
Posted feedbacks - Groovy
理論的にはこれで解けるはずなんですが・・・ レスポンスが帰ってきません。 1.全組み合わせを作成 2.重複数がない かつ 合計が1~n^2の合計/n となる組み合わせを列挙 3.その組み合わせの中からさらに妥当な組み合わせを という感じです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | import static groovy.util.GroovyCollections.combinations
def outputMagic( n ){
def max = n**2
def avarage = (1..max).sum()/n
def createLists = { list, x -> (1..x).collect{ list } }
def pairs = combinations(createLists(1..max, n)).findAll{
it.unique().size() == n && it.sum() == avarage
}.collect{ it.sort() }.unique()
combinations(createLists(pairs, n)).collect{ it.sort() }.unique().findAll{ lists ->
def nums = []
lists.each{ list ->
list.each{ nums << it }
}
nums.unique().size() == max
}.each{ lists ->
println lists
}
}
//outputMagic(3)
outputMagic(4)
|


xsd
#4702()
Rating8/8=1.00
たとえば、N=3のときは、
(1) { 1, 5, 9 }, { 2, 6, 7 }, { 3, 4, 8 }
(2) { 1, 6, 8 }, { 2, 4, 9 }, { 3, 5, 7 }
の2通りの方法があります。
ここで指定されたNに対して、何通りのグループ分けの方法があるかを数えるプログラムを作ってください。
(何通りかという値だけが出力されればよいのですが、予め計算してある結果を返すのはダメですよ。)
また、N=5を指定したときの実行時間もあわせて教えてください。
なお、数え上げるときの注意として、
・{ 1, 5, 9 } と { 1, 9, 5 }は同じもの
・{ 1, 5, 9 }, { 2, 6, 7 }, { 3, 4, 8 }と
{ 1, 5, 9 }, { 3, 4, 8 }, { 2, 6, 7 }は同じもの
とすることに注意してください。
[ reply ]