1

我对编码比较陌生,我想制作一个可以接受输入并将其输出为字谜的测试程序。但是字谜不能只是一堆乱七八糟的字母,它需要是某种可以理解的“词”(即,如果我输入“恐龙”,我想得到一些类似于“nisadoru”的东西作为回报,而不是一些东西像'dsrunsia')。如果更进一步并不太费力,我也有兴趣让程序在输出中添加一个额外的字母(即,如果我输入'dinosaur',我可以收到'nisadorux')。

我不是在寻找要添加到单词中的额外字母的选择,我希望添加我选择的字母。如果重要的话,字母是 x。所以所有的字谜都会包含一个额外的 x。

我努力寻找,但没有找到任何有用的帮助。我没有任何代码可以关闭,但是对于那些说我不会从简单地给出代码中学习的人,我更喜欢查看一个完整的部分并解构它或弄清楚一切是如何工作的,而不是试图把各种各样的东西放在一起作为测试。

4

2 回答 2

1

这是一个可以满足您所有需求的解决方案:

static class Program
{
    static readonly char[] Vowels = new []{'a', 'e', 'i', 'o', 'u', 'y'};
    static readonly Random r = new Random();

    static bool IsVowel(char c) { return Vowels.Contains(c); }
    static bool IsConsonant(char c) { return !IsVowel(c); }

    static string Scramble(string inpt)
    {
        string input = inpt + "x";
        List<char> vowelList = input.Where(IsVowel).ToList();
        List<char> consonantList = input.Where(IsConsonant).ToList();
        StringBuilder output = new StringBuilder();
        bool needVowel = false; // Start with a consonant, if possible.

        while (vowelList.Count > 0 || consonantList.Count > 0)
        {
            IList<char> charList = consonantList;
            if (consonantList.Count == 0 || (needVowel && vowelList.Count > 0))
            {
                charList = vowelList;
            }
            int randomIndex = r.Next(0, charList.Count);
            output.Append(charList.ElementAt(randomIndex));
            charList.RemoveAt(randomIndex);
            needVowel = !needVowel;
        }

        return output.ToString();
    }

    static void Main(string[] args)
    {
        foreach (var s in Enumerable.Repeat("dinosaur", 20).Select(Scramble))
        {
            Debug.WriteLine(s);
        }
    }
}
于 2013-03-19T04:20:32.140 回答
1

将你的字母数组分成两个数组,一个只有元音,另一个只有元音[a,e,i,o,u,y],因为dinosaur你会收到[d,n,r,s] - [a,i,o,u],将其添加到构造中的字谜中,然后从数组中删除。假设您的随机抛出 6(从 0 开始),第一个数组的长度为 4,取自位置 2 (=6-4) -> 'o' 的第二个数组。下一个 random(7) 抛出 2,从第一个数组中取 'r',现在我们的 anagram 有or并且数组有[d,n,s] - [a,i,u]. 关于元音与辅音互换,跟踪你的字母最后被唤醒的数组,如果从一个数组中连续取两个字母,从另一个(随机)取一个字母,而不是从一组完整的剩余的字母。

现在,您必须自己将其编码到您的程序中。

于 2013-03-19T04:16:04.193 回答