Задачи
September 4, 2023

Шифр Цезаря

Шифр Цезаря - это древний алгоритм шифрования, использовавшийся Юлием Цезарем. Он шифрует буквы, сдвигая их на определенное число мест в алфавите. Длину сдвига мы называем ключом. Например, если ключ равен 3, то A становится D, B - E, C - F и так далее.

Чтобы расшифровать сообщение, необходимо сдвинуть зашифрованные буквы в противоположном направлении. Данная программа позволяет пользователю шифровать и расшифровывать сообщения в соответствии с этим алгоритмом.

Реализация

public void Play()
{
    Console.WriteLine(Name);
    Console.WriteLine(Description);

    while(true)
    {
        Console.WriteLine("\nLet's play !");
        CeasarParams? input = getParams();
        if (input != null)
        {
            Console.WriteLine(processCeasarCipher(input.Message, input.Key, input.Mode));
        }

        Console.WriteLine("Wanna play again?!");
        var answer = Console.ReadLine();
        if (answer == null || !answer.Contains("y", StringComparison.OrdinalIgnoreCase))
        {
            break;
        }
    }

    Console.WriteLine("Thanks for this game!");
}

private string processCeasarCipher(string input, int key, string mode)
{
    var result = new StringBuilder();
    foreach (char sym in input)
    {
        if (SYMBOLS.Contains(sym))
        {
            int num = SYMBOLS.IndexOf(sym);
            num = mode == "encrypt" ? num + key : num - key;

            if (num >= SYMBOLS.Length)
            {
                num -= SYMBOLS.Length;
            }
            else if (num < 0)
            {
                num += SYMBOLS.Length;
            }

            result.Append(SYMBOLS[num]);
        }
        else
        {
            result.Append(sym);
        }
    }

    return result.ToString();
}

Полный код проекта

https://github.com/unilecs/ugames/blob/main/games/CeasarCipher.cs

Play-test

https://dotnetfiddle.net/uF4wc0