Szyfr Cezara, review

0

Witam,

Dostałem zadanie z kryptografii do wykonania, i chciałbym poprosić o mały review, co zmienić, co poprawić.
Wytyczne do zadania:

  1. Pyta użytkownika czy chce zakodować czy odkodować wiadomość
  2. Pyta o klucz
  3. Pobiera tekst do zakodowania/odkodowania
  4. Zwraca wynik w postaci szyfrogram/tekst jawny to:...
using System;
using System.Linq;

namespace Cezar
{
    class Program
    {
        public const int Alphabet = 'z' - 'a' + 1;

        public static string Encode(string message, int key)
        {
            return string.Concat(message.Select(x => (char)('a' + (x - 'a' + key) % Alphabet)));
        }

        public static string Decode(string message, int key)
        {
            return Encode(message, Alphabet - key);
        }

        static void Main(string[] args)
        {
            Console.Write("Wprowadź tekst: ");
            string input = Console.ReadLine();
            Console.Write("Wprowadź klucz: ");
            int key = Convert.ToInt32(Console.ReadLine());
            
            Console.WriteLine("\nCo chcesz zrobić");
            Console.WriteLine("\n1 - Szyfrować");
            Console.WriteLine("2 - Deszyfrować\n");
            
            int operation = Convert.ToInt32(Console.ReadLine());
            switch (operation)
            {
                case 1:
                string encodeInput = Encode(input, key);
                Console.WriteLine("Tekst po zaszyfrowaniu: " + encodeInput);
                break;
                
                case 2:
                string decodeInput = Decode(input, key);
                Console.WriteLine("Tekst po odszyfrowaniu: " + decodeInput);
                break;
            }

            Console.ReadKey();
        }
    }
}
2
return string.Concat(message.Select(...);

Ciekawe ile to będzie trwało przy długim tekście :P

Jeżeli nic nie skopałem, to kilka razy wolniej niż jakbyś użył StringBuildera.

Spróbuj tak:

public static string Encode(string message, int key)
{
    var sb = new StringBuilder();

    foreach (var x in message)
    {
        sb.Append((char)('a' + (x - 'a' + key) % Alphabet));
    }

    return sb.ToString();
}
2

string.Concat pod spodem używa StringBuildera, więc akurat powinno trwać tyle samo

1 użytkowników online, w tym zalogowanych: 0, gości: 1