是否有可能操纵排列的结果

时间:2019-07-12 14:05:25

标签: c# performance optimization

我刚刚开始使用C#进行编码,并给自己做了一个创建代码的练习,该代码可以帮助用户找到一组输入字符的可能组合以练习“密码”(这不是模仿蛮力的代码)强制代码,而不是密码猜测者,尽管我猜它们是相似的)。 目前,我的代码最多可以包含5个字符,并且可以锻炼所有可能的排列,但是一旦用户完成了许多操作,这就不是很有用了。我想添加一个依赖于用户知识的复杂程度,可以说用户知道“密码”的某些顺序,例如第一个字母是某个字符,而第三个字母是另一个字符。

例如。假设用户输入了5个字符:a,b,c,d,e,并且实际密码已被“敲除”,则代码将输出a,b,c,d,e的每种可能性。但是可以说用户知道第一个字母是“ b”,第三个字母是“ c”。因此,代码会将产生的可能性缩小到符合此条件的可能性。

我不知道如何实现将首先读取排列的所有组合的东西。其次,确定哪些排列与用户知道的顺序匹配。第三)列出符合标准的排列结果。

using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;

namespace cracker
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Please enter your first character");
            var firstCharacter = Console.ReadLine();

            Console.WriteLine("Please enter your second character");
            var secondCharacter = Console.ReadLine();

            Console.WriteLine("Please enter your third character");
            var thirdCharacter = Console.ReadLine();

            Console.WriteLine("Please enter your fourth character");
            var fourthCharacter = Console.ReadLine();

            Console.WriteLine("Please enter your fifth character");
            var fifthCharacter = Console.ReadLine();

            if (fifthCharacter == "na")
            {
                var combo = firstCharacter + secondCharacter + thirdCharacter + fourthCharacter ;
                var q = combo.Select(x => x.ToString());
                int size = 4;
                for (int i = 0; i < size - 1; i++)
                    q = q.SelectMany(x => combo, (x, y) => x + y);

                foreach (var item in q)
                    Console.WriteLine(item);
            }
            else
            {
                var alphabet = firstCharacter + secondCharacter + thirdCharacter + fourthCharacter + fifthCharacter;
                var q = alphabet.Select(x => x.ToString());
                int size = 5;
                for (int i = 0; i < size - 1; i++)
                    q = q.SelectMany(x => alphabet, (x, y) => x + y);

                foreach (var item in q)
                    Console.WriteLine(item);


            }

        }
    }
}

请输入您的第一个字符 一种 请输入第二个字符 b 请输入您的第三个字符 C 请输入您的第四个字符 d 请输入您的第五个字符 Ë aa aa aa aa aa 阿阿巴 亚伯 aaabc a aa 阿阿卡 ac 协会 ac Aaace 阿阿达 aaadb aadc 阿阿德 aaade

为简便起见,我没有复制其余的可能性,但是您可以想象列表很长

我只编码了10天左右,所以请注意,如果我的代码不符合您的标准;)

0 个答案:

没有答案