C#练习题答案: Ragbaby密码【难度:2级】--景越C#经典编程题库,1000道C#基础练习题等你来挑战

这篇博客提供了C#编程练习,聚焦于Ragbaby密码的解密,包含10个不同的解答方案,旨在帮助提升C#编程和加密算法的理解。
摘要由CSDN通过智能技术生成

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]; // getting text individual character

                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()); // getting characters index
                    var encryptedCharacterIndex = characterIndexInCipher + textIndex;
                    if (encryptedCharacterIndex > cipher.Count)
                    {
   
                        var temp = encryptedCharacterIndex - cipher.Count;
                        encryptedCharacterIndex = 0 + temp;
                    }
                    encryptedCharacter = cipher[encryptedCharacterIndex]; // index in cipher + textIndex -> encrypted character
                    finalstring += encryptedCharacter.ToUpper();
                    textIndex++;
                }
                else
                {
   
                    characterIndexInCipher = cipher.IndexOf(character.ToString()); // getting characters index
                    var encryptedCharacterIndex = characterIndexInCipher + textIndex; // index in cipher + textIndex -> encrypted character
                    if (encryptedCharacterIndex >= cipher.Count)
                    {
   
                        // go round 28, 28-26 (difference), 0 + 2 (difference)
                        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]; // getting text individual character

                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()); // getting characters index
                    var decryptedCharacterIndex = characterIndexInCipher - textIndex;
                    if (decryptedCharacterIndex <= 0)
                    {
   
                        decryptedCharacterIndex = cipher.Count + decryptedCharacterIndex;
                    }
                    decryptedCharacter = cipher[decryptedCharacterIndex]; // index in cipher - textIndex -> encrypted character
                    finalstring += decryptedCharacter.ToUpper();
                    textIndex++;
                }
                else
                {
   
                    characterIndexInCipher = cipher.IndexOf(character.ToString()); // getting characters index
                    var decryptedCharacterIndex = characterIndexInCipher - textIndex;
                    if (decryptedCharacterIndex < 0)
                    {
   
                        // go round -2, 26 - 2.
                        decryptedCharacterIndex = cipher.Count + decryptedCharacterIndex;
                    }
                    decryptedCharacter = cipher[decryptedCharacterIndex]; // index in cipher + textIndex -> encrypted character
                    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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值