उदाहरण के लिए उपयोग की जाने वाली एक सुंदर सीधी प्रणाली है राउंड-रॉबिन नामक शतरंज टूर्नामेंट।
विचार है कि खिलाड़ियों को तालिका के दोनों किनारों पर विभाजित करना है। खिलाड़ियों में से एक को "हब" (एक बेहतर शब्द की इच्छा के लिए) के रूप में नामित किया गया है। टूर्नामेंट एक-दूसरे के खिलाफ खेलने वाले खिलाड़ियों को एक दूसरे के साथ खेलकर शुरू होता है। पहले दौर के बाद हर कोई हब एक कुर्सी आगे बढ़ता है और सफेद/काला (घर/खेल में दूर) आदेश स्विच किया जाता है। जब खिलाड़ी अपने मूल स्थानों पर बैठते हैं तो पूरी राउंड-रॉबिन प्रतियोगिता समाप्त हो जाती है। यदि आप चाहते हैं कि हर कोई दो बार खेलें तो बस वही करें। कार्यान्वयन विवरण के साथ
Wikipedia article।
आपके विशेष मामले में मैं सभी टीमों सहित एक बार राउंड रॉबिन करने का प्रयास करूंगा। फिर आप प्रत्येक विभाजन के लिए एक ही करते हैं और यह सुनिश्चित करने के लिए कि डिवीजनों के भीतर टीम एक बार घर पर एक बार खेलते हैं और एक बार दूर हो जाते हैं, पहले राउंड रॉबिन से जांचें कि टीमों ने उस दौर में किस तरह खेला था।
इस बात का निचला पक्ष यह है कि टूर्नामेंट खत्म होने से पहले आप सभी इंटर-डिवीजन मैचों को अच्छी तरह से खेलेंगे (क्योंकि अंतिम एन -1 मैचों इंट्रा-डिवीजन टीमों के खिलाफ हैं [एन = टीमों की संख्या विभाजन])। यदि यह एक समस्या है तो आप बस थोड़ा सा मैचों को स्वैप कर सकते हैं।
मैंने वास्तव में एक साधारण पायथन लिपि लिखा है जो यह करता है। इसमें कोड की कई रेखाएं नहीं आईं और बहुत अच्छे नतीजे सामने आए। यह एक कार्यक्रम तैयार करेगा जहां प्रत्येक टीम प्रत्येक टीम को अपने विभाजन में दो बार और एक बार अन्य डिवीजनों में टीमों के खिलाफ खेलती है। यह सुनिश्चित करने के लिए कोई जांच नहीं है कि टीम एक दूसरे से दो बार मिलें इस तरह से कि एक ही टीम घर पर है। लेकिन इस कोड को अपना स्वयं का शेड्यूलिंग कोड बनाने के बारे में एक अच्छा विचार देना चाहिए।
#!/usr/bin/python
div1 = ["Lions", "Tigers", "Jaguars", "Cougars"]
div2 = ["Whales", "Sharks", "Piranhas", "Alligators"]
div3 = ["Cubs", "Kittens", "Puppies", "Calfs"]
def create_schedule(list):
""" Create a schedule for the teams in the list and return it"""
s = []
if len(list) % 2 == 1: list = list + ["BYE"]
for i in range(len(list)-1):
mid = int(len(list)/2)
l1 = list[:mid]
l2 = list[mid:]
l2.reverse()
# Switch sides after each round
if(i % 2 == 1):
s = s + [ zip(l1, l2) ]
else:
s = s + [ zip(l2, l1) ]
list.insert(1, list.pop())
return s
def main():
for round in create_schedule(div1):
for match in round:
print match[0] + " - " + match[1]
print
for round in create_schedule(div2):
for match in round:
print match[0] + " - " + match[1]
print
for round in create_schedule(div3):
for match in round:
print match[0] + " - " + match[1]
print
for round in create_schedule(div1+div2+div3):
for match in round:
print match[0] + " - " + match[1]
print
if __name__ == "__main__":
main()
हां यह उपर्युक्त कोड का इरादा है :) –
@Rune: उस स्थिति में, +1 !!!! –