C# ile kombinasyon hesaplama – 1

Bu yazımda C# ile kombinasyon hesaplamak için küçük bir kod parçası paylaşmıştım ve bu metodun bir sınıf içerisinde gerçekleştirilebileceğini söylemiştim. Bu metodu bir sınıf içerisinde kullandım ve sizinle paylaşmak istedim, çok fazla bekleyemedim 🙂

İşte C# ile kombinasyon hasabı yapabileceğimiz sınıfımız.

public class Combination
{
    List<string> innerArray_ = new List<string>();
 
    public Combination()
    {
        this.DigitCount = 0;
        this.Combinations = 0;
    }
 
    public int DigitCount { get; set; }
 
    public int Combinations { get; set; }
 
    public List<string> GetCombinations()
    {
        if (DigitCount > 0)
        {
            //for (int i = 0; i < this.DigitCount; i++)
            //    GetCombinations(i.ToString(), i);
 
            GetCombinations("", -1);
        }
 
        return this.innerArray_;
    }
 
    public List<string> GetCombinations(int digitcount, int combinations)
    {
        this.DigitCount = digitcount;
        this.Combinations = combinations;
 
        return this.GetCombinations();
    }
 
    /// <summary>
    /// Kombinasyon hesaplamasını yapar
    /// </summary>
    /// <param name="current">Şu anki işlenen veri</param>
    /// <param name="index">İşlenen veri indexi</param>
    private void GetCombinations(string current, int index)
    {
        string tmpcurrent = "";
 
        for (int i = index + 1; i < this.DigitCount; i++)
        {
            tmpcurrent = current + i.ToString();
 
            GetCombinations(tmpcurrent, i);
        }
 
        if (current.Length == this.Combinations)
            this.innerArray_.Add(current);
    }
}

Şimdi bu sınıfımızı, 5 basamaklı bir sayının 2’li kombinasyonunu hesaplamak üzere şu şekilde kullanabilirsiniz.

 
Combination com = new Combination();
 
List<string> result = com.GetCombinations(5, 2);

Burada dikkat etmeniz gereken nokta, List olarak geri dönen değerler kombinasyonların index değerleri. Örneğin 5’in 2’li kombinasyonlarını bulmak istiyorsunuz (sayımız da 12345 olsun mesela), geri dönen değerlerden birisi de “01”. Bu kombinasyonun değeri aslında “12”, diğer bir kombinasyon değerimiz “13” ise, asıl değerimiz “24” olmalı. Bu eşleştirmeyi kendiniz yapmanız gerekecek. Belki MasterMind oyununu bitirdiğimde, bütün kodları paylaşırım sizinle. Böylece Combination sınıfının eksiksiz bir kopyasını siz de kullanabilirsiniz -ben de henüz yazmadım:)-

, ,

No comments yet.

Bir Cevap Yazın

Font Resize