Every permutation of the alphabet up to 29 characters?

后端 未结 13 1312
攒了一身酷
攒了一身酷 2021-02-11 01:23

I\'m attempting to write a program that will generate a text file with every possible permutation of the alphabet from one character up to twenty-nine characters. I\'ve chosen 2

13条回答
  •  孤街浪徒
    2021-02-11 02:14

    Here is a simple untested program in C++ that creates the words by counting in Base 26:

    #include 
    #include 
    
    int main(void)
    {
        //----------------------------------------------------------
        //  Print permuations of strings of letters up to length 5.
        //  Use base 26 arithmetic.
        //----------------------------------------------------------
        const unsigned int MAX_ITERATIONS = 26 * 26 * 26 * 26 * 26;
    
        std::string word = "A";
        for (unsigned int i = 0; i < MAX_ITERATIONS; ++i)
        {
            //------------------------------------------------------
            //  Print the word
            //------------------------------------------------------
            std::cout << word << std::endl;
    
            //------------------------------------------------------
            //  Increment the word, using base 26 arithmetic.
            //  A, B, C, ..., Z.
            //  AA, BA, CA, ..., ZA, AB, BB, CB, DB, ..., ZZ.
            //  AAA, BAA, CAA, ..., ZAA, ABA, BBA, CBA, DBA, ..., ZZZ.
            //------------------------------------------------------
            bool            carry_generated = false;
            unsigned int    digit = 0;
            do
            {
                carry_generated = false;
                if (word[digit] < 'Z')
                {
                    ++word[digit];
                    break;
                }
                word[digit++] = 'A';
                if (word.length() == digit)
                {
                    word += "A";
                    break;
                }
                carry_generated = true;
            } while (carry_generated && (digit < 5));
        }
    
        return 0;
    }
    

    The number of words printed can be reduced by checking a word list (a.k.a. dictionary) before printing. If the word is in the word list, print it.

    The biggest issue with a word length of 29 is representing the quantity. The quantity overflows the range of the standard C++ unsigned integers. A Big Int library would need to be used. The next issue is the time required to process every combination. Multiply the quantity by 1 microsecond per iteration (a kind of worse case) and reduce down to days, hours, minutes and seconds. Perhaps years may be required.

提交回复
热议问题