Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace Vizhener
- {
- class MainClass
- {
- public static void Main(string[] args)
- {//wxmgomrk
- var alphabet = " abcdefghijklmnopqrstuvwxyz0123456789'";
- var text = "first longest word=sticking|wxmgomrkmrxo5kyoeoky1f5qyf5iyxrl4yen5yfw3rkywqob3o5pyxowyxrfkyqxen8pxyqxrymef5bxrwy5fxyovcyfllyeopxq";
- var keyWord = text.Split('|', '=')[1];
- var parsedText = text.Split('|')[1];
- var charArr = new char[alphabet.Length];
- for (int i = 0; i < alphabet.Length; i++)
- charArr[i] = alphabet[i];
- var charDict = new Dictionary<char, int>();
- for (int i = 0; i < charArr.Length; i++)
- charDict.Add(charArr[i], i);
- var stepKeyArr = new int[keyWord.Length - 1];
- var stepTextArr = new int[parsedText.Length -1];
- for (int i = 1; i <= stepKeyArr.Length; i++)
- {
- var firstLetter = charDict[keyWord[i - 1]];
- var secondLetter = charDict[keyWord[i]];
- if (firstLetter < secondLetter) firstLetter += charArr.Length;
- stepKeyArr[i - 1] = firstLetter - secondLetter;
- }
- for (int i = 1; i <= stepTextArr.Length; i++)
- {
- var firstLetter = charDict[parsedText[i - 1]];
- var secondLetter = charDict[parsedText[i]];
- if (firstLetter < secondLetter) firstLetter += charArr.Length;
- stepTextArr[i - 1] = firstLetter - secondLetter;
- }
- var startIndex = FindSubarrayStartIndex(stepTextArr, stepKeyArr);
- var cypherWord = new StringBuilder();
- for (int i = 0; i < keyWord.Length; i++)
- {
- cypherWord.Append(parsedText[startIndex]);
- startIndex++;
- }
- Console.WriteLine(cypherWord.ToString());
- var step = charDict[keyWord[0]] - charDict[cypherWord[0]];
- var result = new StringBuilder();
- for (int i = 0; i < parsedText.Length; i++)
- result.Append(charArr[(charDict[parsedText[i]] + alphabet.Length + step) % alphabet.Length]);
- Console.WriteLine(result.ToString());
- }
- public static int FindSubarrayStartIndex(int[] array, int[] subArray)
- {
- for (var i = 0; i < array.Length - subArray.Length + 1; i++)
- if (ContainsAtIndex(array, subArray, i))
- return i;
- return -1;
- }
- public static bool ContainsAtIndex(int[] array, int[] subArray, int index)
- {
- foreach (int element in subArray)
- if (array[index] != element) return false;
- else index++;
- return true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement