private static void RunAlgorithm(DataEncoder b)
        {
            string         buffer = "";
            ConsoleKeyInfo key    = new ConsoleKeyInfo();

            Console.WriteLine("Begin typing!");
            bool mode = true;

            do
            {
                Console.WriteLine("Mode: {0}", mode ? "encode" : "decode");
                key = Console.ReadKey();
                Console.Clear();
                if (key.Key == ConsoleKey.PageUp)
                {
                    mode = !mode;
                    continue;
                }
                if (key.Key == ConsoleKey.Backspace && buffer.Length > 0)
                {
                    buffer = buffer.Substring(0, buffer.Length - 1);
                }
                else
                {
                    buffer += key.KeyChar;
                }

                string buHex = string.Join("", Encoding.UTF8.GetBytes(buffer).Select(x => x.ToString("X2")));

                if (mode)
                {
                    var    encBytes = b.Encode(Encoding.UTF8.GetBytes(buffer));
                    string encoded  = Encoding.ASCII.GetString(encBytes);
                    string enHex    = string.Join("", encBytes.Select(x => x.ToString("X2")));

                    var    decBytes = b.Decode(encBytes);
                    string decoded  = Encoding.UTF8.GetString(decBytes);
                    string deHex    = string.Join("", decBytes.Select(x => x.ToString("X2")));
                    Console.WriteLine("Algorithm: {7}\nInput: {0}\n -> Hex: {5}\n\nEncoded: {1}\n -> Hex: {3}\nDecoded: {2}\n -> Hex: {4}\n\n--> Success: {6}",
                                      buffer,
                                      encoded,
                                      decoded,
                                      enHex,
                                      deHex,
                                      buHex,
                                      buffer.Equals(decoded),
                                      b.GetType().Name
                                      );
                }
                else
                {
                    var    buBytes  = Encoding.ASCII.GetBytes(buffer);
                    var    decBytes = b.Decode(buBytes);
                    string decoded  = Encoding.UTF8.GetString(decBytes);
                    string deHex    = string.Join("", decBytes.Select(x => x.ToString("X2")));

                    var    encBytes = b.Encode(decBytes);
                    string encoded  = Encoding.ASCII.GetString(encBytes);
                    string enHex    = string.Join("", encBytes.Select(x => x.ToString("X2")));
                    Console.WriteLine("Algorithm: {7}\nInput: {0}\n -> Hex: {5}\n\nDecoded: {2}\n -> Hex: {4}\nEncoded: {1}\n -> Hex: {3}\n\n--> Success: {6}",
                                      buffer,
                                      encoded,
                                      decoded,
                                      enHex,
                                      deHex,
                                      buHex,
                                      buffer.Equals(decoded),
                                      b.GetType().Name
                                      );
                }
            } while (key.Key != ConsoleKey.Escape);
        }