Предмет: Информатика, автор: AsYaNgg

Однажды программист Вася решил послать своему другу письмо. Он подробно рассказал в нем, как у него дела. И, в конце концов, вышло большое послание. Но почта не позволяет пересылать такие большие письма. После долгих раздумий Вася решил его сжать и для этого придумал оригинальный метод. Если подряд идут несколько одинаковых символов, а точнее три и более, то он их заменяет на их

количество и символ, который повторяется. Но Вася был плохим программистом... Помогите ему сжать письмо.

Входные данные: s

Выходные данные:K

Где: S-письмо не более 255 символов, K-сжатое письмо

Пример ввода: GGHHHHGDDDDHHHKKKKKJJJ

Пример вывода: GG4HG4D3H5K3J

Ответы

Автор ответа: LRSM
2

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: Выводит последовательность символов на экран, не используя разделитель (при последовательность другого типа данных в качестве разделителя используется пробел).

Пример работы:

Приложения:
Похожие вопросы
Предмет: Математика, автор: veronikakylikova59
Предмет: Английский язык, автор: bts781adiyakim
Предмет: Математика, автор: совуха