8人トーナメントでの全ての組み合わせを出力したいのですが、いいアイデアが思いつきません。順列から徐々に減らしていこうとも思いましたが、非効率だなと思いました。総数は315であることはわかっています。pythonかc言語で回答してくださると嬉しいです。よろしくお願いします。
追記
python
1import itertools 2i=0 3list2=[] 4list3=[] 5list4=[] 6list5=[] 7list6=[] 8l = [1,2,3,4] 9list1=list(itertools.permutations(l,4)) 10#print(list1) 11print() 12 13for i in range(24): 14 list2+=[[list1[i][:2],list1[i][2:4]]] 15#print(list2) 16print() 17 18for k in range(24): 19 for l in range(2): 20 list3+=sorted(list2[k][l]) 21#print(list3) 22print() 23 24for n in range(0,24*4-3,4): 25 list4+=[((list3[n],list3[n+1]),(list3[n+2],list3[n+3]))] 26#print(list4) 27print() 28 29for m in range(24): 30 list5+=sorted(list4[m]) 31#print(list5) 32print() 33 34for o in range(0,45,2): 35 list6+=[(list5[o],list5[o+1])] 36#print(list6) 37set(list6)
python
1import itertools 2list2=[] 3list3=[] 4list4=[] 5list5=[] 6list6=[] 7list7=[] 8list8=[] 9list9=[] 10list10=[] 11list11=[] 12list12=[] 13a = [1,2,3,4,5,6,7,8] 14list1=list(itertools.permutations(a,8)) 15#print(list1) 16print() 17 18for i in range(40320): 19 list2+=[[list1[i][:4],list1[i][4:8]]] 20#print(list2) 21print() 22 23for k in range(40320): 24 for l in range(2): 25 list3+=[[list2[k][l][:2],list2[k][l][2:4]]] 26#print(list3) 27 28for s in range(80640): 29 for t in range(2): 30 list4+=sorted(list3[s][t]) 31#print(list4) 32 33for x in range(0,40320*8-7,8): 34 list5+=[([(list4[x],list4[x+1]),(list4[x+2],list4[x+3])],[(list4[x+4],list4[x+5]),(list4[x+6],list4[x+7])])] 35#print(list5) 36 37for p in range(40320): 38 for q in range(2): 39 list6+=sorted(list5[p][q]) 40#print(list6) 41 42for g in range(0,40320*4-3,4): 43 list7+=[(list6[g],list6[g+1]),(list6[g+2],list6[g+3])] 44#print(list7) 45 46for s in range(40320*2): 47 for t in range(2): 48 for u in range(2): 49 list8+=[list7[s][t][u]] 50#print(list8) 51 52for y in range(0,40320*8-7,8): 53 list9+=[((list8[y],list8[y+1],list8[y+2],list8[y+3]),(list8[y+4],list8[y+5],list8[y+6],list8[y+7]))] 54#print(list9) 55 56for h in range(40320): 57 list10+=sorted(list9[h]) 58#print(list10) 59 60for s in range(40320*2): 61 for t in range(4): 62 list11+=[list10[s][t]] 63#print(list11) 64 65for z in range(0,40320*8-7,8): 66 list12+=[((list11[z],list11[z+1]),(list11[z+2],list11[z+3]),(list11[z+4],list11[z+5]),(list11[z+6],list11[z+7]))] 67#print(list12) 68set(list12)
一応プログラムとしては4人の場合を考えて、無理やり8人に変えたのを製作しています。しかし、あまりにも無理やりで汚すぎたので、投稿してみました。
回答3件
あなたの回答
tips
プレビュー