using System.Collections.Generic;
private const int ASCII_RANGE = 94;
private const int ASCII_START = 32;
private delegate string TransDelegate(string str);
private string Decrypt(string code)
Random rnd = new Random();
List<TransDelegate> funcList1 = new List<TransDelegate>();
funcList1.Add(new TransDelegate(TransJunkLetters));
funcList1.Add(new TransDelegate(TransCharByPos));
funcList1.Add(new TransDelegate(TransOppositeLetters));
funcList1.Add(new TransDelegate(TransPalindrome));
funcList1.Add(new TransDelegate(TransFibSwap));
funcList1.Add(new TransDelegate(TransJunkLetters));
funcList1.Add(new TransDelegate(TransCharByPos));
List<TransDelegate> funcList2 = funcList1;
int count = funcList2.Count;
str = RemoveSugar(code1);
for (int index = 0; index < count; ++index)
str = funcList2[count - (index + 1)].Invoke(str);
private string RemoveSugar(string code)
char[] charArray = code.ToCharArray();
return new string(((IEnumerable<char>) charArray).Skip<char>(1).Take<char>(charArray.Length - 2).ToArray<char>());
private string TransPalindrome(string code)
int length = code.Length;
for (int index = 0; index < length; ++index)
str += code[length - (index + 1)].ToString();
private string TransFibSwap(string code)
int length = code.Length;
char[] charArray = code.ToCharArray();
while (index2 < length - 1)
char ch = charArray[index1];
charArray[index1] = charArray[index2];
return new string(charArray);
private string TransOppositeLetters(string code)
int length = code.Length;
for (int index = 0; index < length; ++index)
int num = 32 + ((int) code[index] - 32 + 47) % 94;
str += ((char) num).ToString();
private string TransJunkLetters(string code)
Random random1 = new Random(code.Length > 0 ? (int) code[code.Length - 1] : 0);
for (int index = 0; index < str1.Length - 1; ++index)
int num = (int) str1[index] % random1.Next(1, 5);
str1 = str1.Substring(0, index + 1) + str1.Substring(((index + 1 + num) < str1.Length) ? (index + 1 + num) : str1.Length);
private string TransCharByPos(string code)
string str = code.Length > 0 ? code[0].ToString() ?? "" : "";
Random random = new Random(code.Length > 0 ? (int) code[0] : 0);
for (int index = 1; index < code.Length; ++index)
int num = (int) code[index];
char ch = (char) (32 + ((int) code[index] - 32 + 94 - random.Next(0, 94)) % 94);
public static void Main()
DripCipher dripCipher = new DripCipher();
ciphertext = Console.ReadLine();
string plaintext = dripCipher.Decrypt(ciphertext);
Console.WriteLine(plaintext);
Console.WriteLine("ERROR: Decryption failed.");