russstep
?>

Однажды программист вася решил послать своему другу письмо. он подробно рассказал в нем, как у него дела. и, в конце концов, вышло большое послание. но почта не позволяет пересылать такие большие письма. после долгих раздумий вася решил его сжать и для этого придумал оригинальный метод. если подряд идут несколько одинаковых символов, а точнее три и более, то он их заменяет на их количество и символ, который повторяется. но вася был плохим ему сжать письмо. входные данные: s выходные данные: k где: s-письмо не более 255 символов, k-сжатое письмо пример ввода: ggghhhjjj пример вывода: gg4hg4d3h5k3j

Информатика

Ответы

avanesss

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

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


Однажды программист вася решил послать своему другу письмо. он подробно рассказал в нем, как у него
Zashchitin Denis
// PascalABC.NET 3.1, сборка 1179 от 29.02.2016
procedure GetProdNeg(a:array of integer; var p:real);
// произведение отрицательных элементов
begin
  p:=a.Where(x->x<0).Aggregate(1.0,(p,e)->p*e)
end;

function IsPrime(n:integer):boolean:=
  Range(2,Round(sqrt(n))).All(i->n mod i<>0);

procedure ArrPrime(n:integer; var a:array of integer);
// массив простых чисел не больших n
begin
  a:=Range(2,n).Where(i->IsPrime(i)).ToArray
end;

begin
  var n:=ReadInteger('n=');
  var a:=ArrRandom(n,-50,50); a.Println;
  var r:real;
  GetProdNeg(a,r);
  Writeln('Произведение ',r);
  n:=ReadInteger('n=');
  var b:array of integer;
  ArrPrime(n,b);
  b.Println
end.

Тестовое решение:
n= 15
27 -7 -36 40 -15 -21 -47 -28 -12 45 3 -38 -15 1 -39
Произведение 27866837980800
n= 300
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293
Talikova164
// PascalABC.NET 3.1, сборка 1179 от 29.02.2016
procedure GetProdNeg(a:array of integer; var p:real);
// произведение отрицательных элементов
begin
  p:=a.Where(x->x<0).Aggregate(1.0,(p,e)->p*e)
end;

function IsPrime(n:integer):boolean:=
  Range(2,Round(sqrt(n))).All(i->n mod i<>0);

procedure ArrPrime(n:integer; var a:array of integer);
// массив простых чисел не больших n
begin
  a:=Range(2,n).Where(i->IsPrime(i)).ToArray
end;

begin
  var n:=ReadInteger('n=');
  var a:=ArrRandom(n,-50,50); a.Println;
  var r:real;
  GetProdNeg(a,r);
  Writeln('Произведение ',r);
  n:=ReadInteger('n=');
  var b:array of integer;
  ArrPrime(n,b);
  b.Println
end.

Тестовое решение:
n= 15
27 -7 -36 40 -15 -21 -47 -28 -12 45 3 -38 -15 1 -39
Произведение 27866837980800
n= 300
2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 257 263 269 271 277 281 283 293

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

Однажды программист вася решил послать своему другу письмо. он подробно рассказал в нем, как у него дела. и, в конце концов, вышло большое послание. но почта не позволяет пересылать такие большие письма. после долгих раздумий вася решил его сжать и для этого придумал оригинальный метод. если подряд идут несколько одинаковых символов, а точнее три и более, то он их заменяет на их количество и символ, который повторяется. но вася был плохим ему сжать письмо. входные данные: s выходные данные: k где: s-письмо не более 255 символов, k-сжатое письмо пример ввода: ggghhhjjj пример вывода: gg4hg4d3h5k3j
Ваше имя (никнейм)*
Email*
Комментарий*

Популярные вопросы в разделе

maxkuskov2485
bellenru
s9152992722344
baron
Seid-ZadeNadezhda1769
mos197653
slitex
agutty3
oooviktoria17
pedalplanet
elenabarskova7145
Powerbasses5521
naratnikova
zyf0066
ivanov568