code-neon

C# Anagram Bulma Programı

Kullanıcının girdiği metindeki harflerin tüm anagramlarını bulan C# programı. Dikkat ! uzun bir metin girmemeniz tavsiye edilir.

using System;
using System.Collections.Generic;
class Program
{
    static void Main(string[] args)
    {
        Console.Write("Metni girin: ");
        string metin = Console.ReadLine();

        List< string > anagramlar = new List< string >();

        bool[] kullanilanHarfler = new bool[metin.Length];

        FindAnagrams(metin, "", kullanilanHarfler, anagramlar);

        Console.WriteLine("Tüm anagramlar:");
        foreach (var anagram in anagramlar)
        {
            Console.WriteLine(anagram);
        }
    }

    private static void FindAnagrams(
        string metin,
        string anagram,
        bool[] kullanilanHarfler,
        List< string > anagramlar
    )
    {
        if (anagram.Length == metin.Length)
        {
            anagramlar.Add(anagram);
            return;
        }

        for (int i = 0; i < metin.Length; i++)
        {
            if (!kullanilanHarfler[i])
            {
                kullanilanHarfler[i] = true; 
                FindAnagrams(metin, anagram + metin[i], kullanilanHarfler, anagramlar);
                kullanilanHarfler[i] = false; 
            }
        }
    }
}

C# ile Kullanıcıdan metni alarak bir string değişkenine atıyoruz.

        Console.Write("Metni girin: ");
        string metin = Console.ReadLine();

C# ile Anagramları saklamak için bir liste oluşturuyoruz.

        List< string > anagramlar = new List< string >();

C# ile Kullanılan harfleri takip etmek için bir bool dizisi oluşturuyoruz.

        // Başlangıçta tüm değerler false olarak ayarlanır.
        bool[] kullanilanHarfler = new bool[metin.Length];

FindAnagrams metodu ile metindeki tüm anagramları buluyoruz.

        FindAnagrams(metin, "", kullanilanHarfler, anagramlar);

C# ile Bulunan tüm anagramları ekrana yazdırıyoruz.

        Console.WriteLine("Tüm anagramlar:");
        foreach (var anagram in anagramlar)
        {
            Console.WriteLine(anagram);
        }
    }

C# ile Metindeki tüm anagramları bulmak için geri izlemeli (backtracking) metot.

    private static void FindAnagrams(
        string metin,
        string anagram,
        bool[] kullanilanHarfler,
        List< string > anagramlar
    )
    {
        // Anagramın boyutu metinden büyük olduğunda, tüm harfleri kullanmışız demektir.
        // Bu durumda anagramı sonuç listesine ekliyoruz ve metotu bitiriyoruz.
        if (anagram.Length == metin.Length)
        {
            anagramlar.Add(anagram);
            return;
        }

C# ile Metindeki her harfi denemek için döngü kullanıyoruz.

        for (int i = 0; i < metin.Length; i++)
        {
            // Eğer harf daha önce kullanılmamışsa, onu anagrama ekleyip işleme devam ediyoruz.
            if (!kullanilanHarfler[i])
            {
                kullanilanHarfler[i] = true; // Harfi kullanılmış olarak işaretliyoruz.
                // Yeni bir harf ekleyerek yeni bir anagram oluşturuyoruz.
                // Recursive olarak devam ediyoruz ve tüm olası düzenlemeleri deniyoruz.
                FindAnagrams(metin, anagram + metin[i], kullanilanHarfler, anagramlar);
                kullanilanHarfler[i] = false; // Harfi kullanılmamış olarak işaretliyoruz (geri izleme).
            }
        }