using System.Collections.Generic;
using System.Diagnostics;
public static string PreProcess(string input)
byte[] r = Convert.FromBase64String(input);
return BitConverter.ToString(r);
public static string Original(string input)
string c = input.Replace("-", string.Empty);
string h = c.Replace("A", "K").Replace("B", "L").Replace("C", "M").Replace("D", "N").Replace("E", "O")
.Replace("F", "P").Replace("0", "A").Replace("1","B").Replace("2", "C").Replace("3", "D").Replace("4", "E")
.Replace("5", "F").Replace("6", "G").Replace("7", "H").Replace("8", "I")
private static Dictionary<char, char> map = new Dictionary<char, char> {
{'A', 'k'}, {'B', 'l'}, {'C', 'm'}, {'D', 'n'}, {'E', 'o'}, {'F', 'p'},
{'0', 'a'},{'1', 'b'}, {'2', 'c'}, {'3', 'd'},{'4', 'e'}, {'5', 'f'},
{'6', 'g'},{'7', 'h'},{'8', 'i'}, {'9', 'j'}
public static string NewOption1(string input)
return string.Create(2*(input.Length+1)/3 , input, (r, d) => {
public static string NewOption2(string input)
var result = new StringBuilder(2*(input.Length+1)/3);
return result.ToString();
public static void Main(string[] args)
string input = PreProcess("XFEWtnopccImhpHTzGeoeXBg4ws=");
string temp = "90-17-23-09-42-33";
string o0 = Original(temp);
string o1 = NewOption1(temp);
string o2 = NewOption2(temp);
var watcher = Stopwatch.StartNew();
var t0 = watcher.ElapsedTicks;
watcher = Stopwatch.StartNew();
var t1 = watcher.ElapsedTicks;
watcher = Stopwatch.StartNew();
var t2 = watcher.ElapsedTicks;
Console.WriteLine($"Original Time: {t0,5}\tResult: {o0}");
Console.WriteLine($"Option 1 Time: {t1,5}\tResult: {o1}");
Console.WriteLine($"Option 2 Time: {t2,5}\tResult: {o2}");