İpucu

Lig Fikstürü Oluşturma

Lig tarzında her takımın her round'da bir kere karşılacağı şekilde bir lig veya turnuva fikstürü oluşturmak için aşağıdaki gibi bir algoritma kullanılabilir. 

Örneğin 8 takımlı bir turnuva-lig olur ise ilk round aşağıdaki gibi yapılır 

1.Round
1. 2. 3. 4.
8. 7. 6. 5.
2.Round
1. 8. 2. 3.
7. 6. 5. 4.
3.Round
1. 7. 8. 2.
6. 5. 4. 3.

Bu şekilde devam eder ve son round aşağıdaki gibi olur :

7.Round
1. 3. 4. 5.
2. 8. 7. 6.

Round'ların oluşturulması şu şekildedir : İlk round'da 1. takımdan 8. takıma kadar takım "saat yönüne" göre sıralanır. Saat yönüne göre sıralandığında alt-üst olarak gelen iki takım o round'da karşılaşacak demektir. Her yeni round'da 1. takım sabit tutulur ve diğer takımlar saat yönünde kaydırılır. Örneğin 2. raound'da 8. yukarı çıkar ve 1. yanına geçer. Kaydırma bu şekilde devam eder ve 1. takımın altında 2. takım olana kadar devam eder. Bu şekilde tüm takımlar sıra ile 1. takımın rakibi olmuş olur ve diğer karşılaşmalar ayarlanmış olur. 

Bu algoritma tüm çift sayı değerleri için uygulanabilir. Tek takım için ise tek sayı çift sayıya tamamlanır (son takım varmış gibi) sonra son takım ile oynayan takım o round'u pas geçer. 

Bu algoritma ile round'lar (Her hafta oynanan ligler için round hafta anlamına gelir) üretildikten sonra hangi takımın kaçıncı sıra olduğu kurası çekilir. Çekilen kura sonucu hangi takımın kiminle oynayacağı belirlenmiş olur.

Java ile istenilen sayıda takımdan oluşacak lig aşağıdaki gibi oluşturulabilir : 

 

private void generateFixture(int teamSize){
        
        // Kaç round sonrası lig tamamlanacak
        int roundCount=teamSize-1; 
        // Bir round'da ne kadar maç oynanır
        int matchCountPerRound=teamSize/2; 
        
        List<Integer> list=new ArrayList<Integer>();
        
        // Takim listesini oluşturuyoruz. 
	//0. takımdan (teamSize-1). takima kadar.
        for (int i = 0; i < teamSize; i++) {
                list.add(i);
        }
        
        for (int i = 0; i < roundCount; i++) {
                
                System.out.println(i+".nci Round:");
                
                for(int j=0;j<matchCountPerRound;j++){
                        
                        int firstIndex=j;
                        int secondIndex=(teamSize-1)-j;
                        
                        System.out.println(list.get(firstIndex)
+"-"+list.get(secondIndex));
                        
                }
                
                // İlk eleman sabit olacak şekilde elamanları kaydırıyoruz
                List<Integer> newList=new ArrayList<Integer>(); 
                
                // İlk eleman sabit
                newList.add(list.get(0)); 

                // Son eleman ikinci eleman yapıyoruz.
                newList.add(list.get(list.size()-1)); 
                
                for(int k=1;k<list.size()-1;k++){                            
                        newList.add(list.get(k));
                }
                
                // Keydırılan liste yeni liste oluyor.
                list=newList;                    
                 
        }
        
        System.out.println("Toplam Round Sayısı : "+roundCount);
        System.out.println("Bir Round'daki Maç Sayısı:  "+matchCountPerRound);
        
}

Yukarıda tanımlanmış generateFixture fonksiyonu verilen değer kadar round oluşturup , ekrana basmaktadır. Ekrana basmak yerine oluşan değerler bir listeye atanıp döndürülebilir. 

 

zafer.teker , 27.09.2014

Bu Sayfayı Paylaş:

Fibiler Üyelerinin Yorumları


Tüm üyeler içeriklere yorum ekleyerek katkıda bulunabilir : Yorum Gir

Misafir Yorumları




Bu Sayfayı Paylaş:

İletişim Bilgileri

Takip Et

Her Hakkı Saklıdır. Bu sitede yayınlanan tüm bilgi ve fikirlerin kullanımından fibiler.com sorumlu değildir. Bu sitede üretilmiş , derlenmiş içerikleri, fibiler.com'u kaynak göstermek koşuluyla kendi sitenizde kullanılabilirsiniz. Ancak telif hakkı olan içeriklerin hakları sahiplerine aittir