3. 解密碼演算法
好難...
# 解題祕訣: Console.WriteLine 比對順序
Console.WriteLine 比對順序const uint K = 0x5a82;
uint[] H = {
0xabcd, 0xcdef, 0x2266, 0xceed, 0xaccd
};
//{
// uint[] A = new uint[5];
// Array.Copy(H, A, 5);
// string word = Console.ReadLine();
// for (int i = 0; i < 5; i++)
// {
// uint tmp = 4 * A[0] + A[1] + A[2] + A[4] + K + word[i] - ' ';
// for (int j = 4; j > 0; j--)
// { // A[1] = A[0]
// A[j] = A[j - 1];
// }
// // A[1] => A[2]
// A[0] = tmp;
// Console.WriteLine(String.Join(" ", A.Select(e => $"{e:x}")));
// }
// for (int i = 0; i < 5; i++)
// {
// A[i] += H[i];
// Console.Write($"{A[i]:x} ");
// }
// Console.WriteLine("\n");
//}
while(true){
uint[] A = Console.ReadLine().Split(" ").Select((e, i) => Convert.ToUInt32(e, 16) - H[i]).ToArray();
//Console.WriteLine(String.Join(" ", A.Select(e => $"{e:x}")));
char[] word = new char[5];
for (int i = 4; i >= 0; i--)
{
uint tmp = A[0];
for (int j = 1; j < 5; j++)
{ // A[0] = A[1]
A[j - 1] = A[j];
}
word[i] = (char)(tmp - 4 * A[0] - A[1] - A[2] - H[4 - i] - K + ' ');
A[4] = H[4 - i];
}
Console.WriteLine(new string(word));
}Last updated