Вася придумал робота-шифратора, и сейчас пишет для него программы. шифратор работает со строками. до сегодняшнего дня робот умел выполнять только команду cut(x), она означает, что нужно взять поданную на вход роботу строку, разрезать ее пополам после символа с номером x, символы второй части записать в обратном порядке, затем две части переставить местами и склеить обратно в целую строку (символы строки нумеруются слева направо начиная с 1). например, если робот работает со строкой алгоритм и выполняет команду cut(4), то результатом его работы будет строка мтиралго. если после этого робот выполнит команду cut(1), то получится строка огларитм. сегодня вася написал новую команду mcut. например, mcut(4, 1, 3) означает, что робот сначала выполняет команду cut(4), затем для получившейся строки команду cut(1), затем для получившейся строки команду cut(3). на вход роботу подали строку абвгдежз, после чего он выполнил команду mcut(3, 7, 6, 5, 1) 2020 раз подряд (после первого выполнения команды mcut вторая выполняется для полученной строки и так далее). какая строка в итоге получилась?
Алфавит действительно зацикливается, то есть буквы в конце алфавита преобразуются в буквы начала алфавита. Например, обозначение ROT2 обозначает сдвиг на 2 позиции, то есть, «а» превращается в «в», «б» в «г», и так далее, и в конце «ю» превращается в «а» а «я» — в «б». Число разных преобразований конечно и зависит от длины алфавита. Для русского языка возможно 32 разных преобразования (преобразования ROT0 и ROT33 сохраняют исходный текст, а дальше начинаются уже повторения). В связи с этим шифр является крайне слабым и исходный текст можно восстановить просто проверив все возможные преобразования.
ROT1 ЛПВСБ
C#. Пример работы на изображении.
using System;
using System.Linq;
namespace Цифры_в_числе
{
class Program
{
static void Main(string[] args)
{
string numb; bool flag;
do
{
Console.Write("Введите любое целое число: ");
numb = Console.ReadLine();
if (flag = !int.TryParse(numb, out int some))
Console.WriteLine("Не число!");
} while (flag);
if (numb[0] == '-')
numb = numb.Substring(1, numb.Length - 1);
var q = from x in numb
group x by x into g
let count = g.Count()
orderby count descending
select new { Value = g.Key, Count = count };
Console.WriteLine("Правда ли, что все цифры в этом числе одинаковы?");
Console.WriteLine($"ответ: {(q.Count() == 1 ? "Да" : "Нет")}");
}
}
}