Генерация неповторяющихся строк в c# - PullRequest
0 голосов
/ 12 июля 2020

В настоящее время я пишу консольную программу на. net Core 3.1. Цель программы - заставить пользователя ввести строку, а затем консоль попытается ее угадать. Пример:

What shall I guess: string
Ok Guessing String...

Code Cracked :) Your code is: string

В любом случае, когда я создавал программу, я столкнулся с проблемой. Созданная мной случайно сгенерированная строка повторялась довольно часто, и если коды были длиннее, проблема экспоненциально увеличивалась.

Я использовал это для генерации случайной строки 1011 * цель? Я видел кое-что о списках и подобных вещах, но мне было интересно, есть ли лучший способ получить результат, который я ищу. Спасибо! Если нужно, могу уточнить все!

1 Ответ

3 голосов
/ 14 июля 2020

Вот демонстрация отгадывания слов, выполненная в голливудском стиле:

enter image description here

Final output:

введите описание изображения здесь

Потому что вы всегда должны показывать свой прогресс при «взломе» пароля ... и «взламывать» его, угадывая случайный отсортированный порядок букв?

Произведено:

static void Main(string[] args)
{
    string guess;
    char response;
    int tries = 0;            
    Random rnd = new Random();
    var chars = "abcdefghijklmnopqrstuvwxyz".ToCharArray();

    do
    {
        Console.Clear();
        Console.Write("Enter a word with no characters repeated in it: ");
        string wordToGuess = Console.ReadLine().ToLower();

        var letters = wordToGuess.ToCharArray().Distinct();
        if (letters.All(c => char.IsLetter(c)) && letters.Count() == wordToGuess.Length && wordToGuess.Length > 0)
        {
            Console.WriteLine("Trying to guess your word...");
            int row = Console.CursorTop;
            Console.CursorVisible = false;
            tries = 0;
            do
            {
                tries++;
                var shuffled = (chars.OrderBy(c => rnd.Next())).ToArray();
                guess = new String(shuffled.Take(wordToGuess.Length).ToArray());
                Console.SetCursorPosition(0, row);
                Console.WriteLine("chars = " + new string(shuffled));
                Console.Write("Guess: {0}, Tries: {1}", guess, tries.ToString("N0"));
            } while (guess != wordToGuess);
            Console.WriteLine();
            Console.WriteLine("It took me {0} tries to guess your word: {1}", tries.ToString("N0"), guess);
        }
        else
        {
            Console.WriteLine("Invalid word to guess!");
        }
       
        Console.CursorVisible = true;
        Console.Write("Play again? Y/N: ");
        response = Console.ReadKey().KeyChar;
        Console.WriteLine();
    } while (response == 'y' || response == 'Y');
                
    Console.Write("Press Enter to Quit");
    Console.ReadLine();
}
...