What's a good way for figuring out all possible words of a given length

后端 未结 12 1778
一生所求
一生所求 2021-02-04 17:27

I\'m trying to create an algorithm in C# which produces the following output strings:

AAAA
AAAB
AAAC
...and so on...
ZZZX
ZZZY
ZZZZ

What is the

12条回答
  •  挽巷
    挽巷 (楼主)
    2021-02-04 18:03

    There's always the obligatory LINQ implementation. Most likely rubbish performance, but since when did performance get in the way of using cool new features?

    var letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
    
    var sequence = from one in letters
                   from two in letters
                   from three in letters
                   from four in letters
                   orderby one, two, three, four
                   select new string(new[] { one, two, three, four });
    

    'sequence' will now be an IQueryable that contains AAAA to ZZZZ.

    Edit:

    Ok, so it was bugging me that it should be possible to make a sequence of configurable length with a configurable alphabet using LINQ. So here it is. Again, completely pointless but it was bugging me.

    public void Nonsense()
    {
        var letters = new[]{"A","B","C","D","E","F",
                            "G","H","I","J","K","L",
                            "M","N","O","P","Q","R","S",
                            "T","U","V","W","X","Y","Z"};
    
        foreach (var val in Sequence(letters, 4))
            Console.WriteLine(val);
    }
    
    private IQueryable Sequence(string[] alphabet, int size)
    {
        // create the first level
        var sequence = alphabet.AsQueryable();
    
        // add each subsequent level
        for (var i = 1; i < size; i++)
            sequence = AddLevel(sequence, alphabet);
    
        return from value in sequence
               orderby value
               select value;
    }
    
    private IQueryable AddLevel(IQueryable current, string[] characters)
    {
        return from one in current
               from character in characters
               select one + character;
    }
    

    The call to the Sequence method produces the same AAAA to ZZZZ list as before but now you can change the dictionary used and how long the produced words will be.

提交回复
热议问题