using System.Collections.Generic;
public static void Main()
Console.WriteLine("Task 3");
Console.WriteLine("Basic");
char[] input = "0123456789ABCDEF".ToCharArray();
char[] output = cyclicSort(input, 11);
Console.WriteLine(new String(output));
Console.WriteLine("Advanced");
output = "d nntobmeanhnld ftcitao.Laluw lyteuhtoohevet iGa rs llUnai coBn o oayg. p no .oddf .ityio gntire d. LoKrRiouyiG".ToCharArray();
input = revertCyclicSort(output, 13);
Console.WriteLine(new String(input));
public static char[] cyclicSort(char[] input, int ordering) {
List<char> inputList = input.ToList();
List<char> outputList = new List<char>();
int maxLength = input.Length;
while (inputList.Count > 0)
actualIndex = (lastIndex + ordering) % inputList.Count() - 1;
actualIndex = inputList.Count() - 1;
outputList.Add(inputList[actualIndex]);
inputList.RemoveAt(actualIndex);
return outputList.ToArray();
public static char[] revertCyclicSort(char[] output, int ordering) {
List<char> outputList = output.ToList();
List<char> outputListRunning = new List<char>();
outputListRunning.AddRange(outputList);
int outputListCount = outputList.Count();
List<char> inputList = new List<char>(new Char[outputListCount]);
List<int> indexArray = new List<int>();
for (int i = 0; i < outputList.Count; i++)
if (index >= outputListCount)
if (outputListRunning[index] != '\0')
outputListRunning[index] = '\0';
inputList.Add(inputList[0]);
inputList.Remove(inputList[0]);
return inputList.ToArray();