PascalABC.NET 3.7:
###RS.AdjacentGroup.SelectMany(x → x.Len >= 3 ? x.Len + x[0] : x.Str).PrПояснение:
RS - ReadString: Возвращает значение типа string, введенное с клавиатуры.
AdjacentGroup: Группирует одинаковые подряд идущие элементы, получая последовательность массивов.
SelectMany: Проецирует каждый элемент последовательности в новую последовательность и объединяет результирующие последовательности в одну последовательность.
.Len - .Length: Длина массива.
.Str - .JoinToString: Преобразует последовательность символов в строку, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
.Pr - .Print: Выводит последовательность символов на экран, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).
Пример работы:
2121
Объяснение:
ответ можно угадать:
(2) 1 + 1 = 2
(1) 2² = 4
(2) 4 + 1 = 5
(1) 5² = 25
Если нужны подробности (заодно мы поймем, что этот ответ единственный), читайте дальше.
Идем с конца.
Если последняя операция - прибавление 1, то на предыдущем шаге получится 24, это не квадрат, поэтому на предыдущем шаге тоже было 1, и на еще двух тоже. Итого, за 4 операции мы получим только 21, это слишком много.
Тогда последняя операция - возведение в квадрат, на предыдущем шаге получилось 5.
5 - не квадрат, так что на этом шаге прибавляли 1, было 4.
Если 4 получили прибавлением единицы, то на предыдущем шаге было получено 3, это не квадрат, поэтому и первый шаг был прибавлением 1, и исходное число - 2, не подходит. Значит, 4 получили возведением в квадрат двойки.
2 - не квадрат, так что на этом шаге прибавляли 1, было 1.