Ragbaby密码【难度:2级】:
答案1:
using System;
using System.Linq;
using System.Collections.Generic;
public class Kata {
public static string Encode(string text, string key)
{
string finalstring = "";
var keyArray = key.ToCharArray().ToArray();
char[] alpha = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
var cipher = new List<string>();
foreach (var keys in keyArray)
{
if (cipher.Contains(keys.ToString()))
{
continue;
}
cipher.Add(keys.ToString());
}
foreach (var keyChar in alpha)
{
if (cipher.Contains(keyChar.ToString()))
{
continue;
}
cipher.Add(keyChar.ToString());
}
var textArray = text.ToCharArray().ToArray();
int textIndex = 1;
for (int i = 0; i < text.Length; i++)
{
var characterIndexInCipher = 0;
var encryptedCharacter = string.Empty;
var character = textArray[i];
if (!char.IsLetter(character))
{
textIndex = 1;
finalstring += character;
continue;
}
if (char.IsUpper(character))
{
var characterLower = character.ToString().ToLower();
character = Convert.ToChar(characterLower);
characterIndexInCipher = cipher.IndexOf(character.ToString());
var encryptedCharacterIndex = characterIndexInCipher + textIndex;
if (encryptedCharacterIndex > cipher.Count)
{
var temp = encryptedCharacterIndex - cipher.Count;
encryptedCharacterIndex = 0 + temp;
}
encryptedCharacter = cipher[encryptedCharacterIndex];
finalstring += encryptedCharacter.ToUpper();
textIndex++;
}
else
{
characterIndexInCipher = cipher.IndexOf(character.ToString());
var encryptedCharacterIndex = characterIndexInCipher + textIndex;
if (encryptedCharacterIndex >= cipher.Count)
{
var temp = encryptedCharacterIndex - cipher.Count;
encryptedCharacterIndex = 0 + temp;
}
encryptedCharacter = cipher[encryptedCharacterIndex];
finalstring += encryptedCharacter;
textIndex++;
}
}
return finalstring;
}
public static string Decode(string text, string key)
{
string finalstring = "";
var keyArray = key.ToCharArray().ToArray();
char[] alpha = "abcdefghijklmnopqrstuvwxyz".ToCharArray();
var cipher = new List<string>();
foreach (var keys in keyArray)
{
if (cipher.Contains(keys.ToString()))
{
continue;
}
cipher.Add(keys.ToString());
}
foreach (var keyChar in alpha)
{
if (cipher.Contains(keyChar.ToString()))
{
continue;
}
cipher.Add(keyChar.ToString());
}
var textArray = text.ToCharArray().ToArray();
int textIndex = 1;
for (int i = 0; i < text.Length; i++)
{
var characterIndexInCipher = 0;
var decryptedCharacter = string.Empty;
var character = textArray[i];
if (!char.IsLetter(character))
{
textIndex = 1;
finalstring += character;
continue;
}
if (char.IsUpper(character))
{
var characterLower = character.ToString().ToLower();
character = Convert.ToChar(characterLower);
characterIndexInCipher = cipher.IndexOf(character.ToString());
var decryptedCharacterIndex = characterIndexInCipher - textIndex;
if (decryptedCharacterIndex <= 0)
{
decryptedCharacterIndex = cipher.Count + decryptedCharacterIndex;
}
decryptedCharacter = cipher[decryptedCharacterIndex];
finalstring += decryptedCharacter.ToUpper();
textIndex++;
}
else
{
characterIndexInCipher = cipher.IndexOf(character.ToString());
var decryptedCharacterIndex = characterIndexInCipher - textIndex;
if (decryptedCharacterIndex < 0)
{
decryptedCharacterIndex = cipher.Count + decryptedCharacterIndex;
}
decryptedCharacter = cipher[decryptedCharacterIndex];
finalstring += decryptedCharacter;
textIndex++;
}
}
return finalstring;
}
}
答案2:
using System;
using System.Linq;
public class Kata
{
public static string Encode(string text, string key) => Cipher(text, key, 1);
public static string Decode(string text, string key) => Cipher(text