2. В одной из кодировок Windows-1251 каждый символ кодируется 8 битами.
Ученик хотел написать текст (в нём нет лишних пробелов):
Опора милая стареющих отцов,
Младые сыновья, товарищи трудов,
Из хижины родной идут собой умножить
Дворовые толпы измученных рабов.
Одно из слов ученик написал два раза подряд, поставив между
одинаковыми словами один пробел. При этом размер написанного
предложения в данной кодировке оказался на 5 байт больше, чем размер
нужного предложения. Напишите в ответе лишнее слово.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var w:=ReadlnString.ToWords;
var St:=new Stack <integer>;
var r:=0;
foreach var t in w do
if t[1].IsDigit then St.Push(t.ToInteger)
else begin
var a:=St.Pop;
var b:=St.Pop;
case t[1] of
'+':St.Push(a+b);
'-':St.Push(b-a);
'*':St.Push(a*b)
end;
end;
Writeln(St.Pop)
end.
Контрольный пример
8 9 + 1 7 - *
-102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString('').
MatchValue('(.)\1{2,}').Length);
end.
Контрольный пример
5 2 3 3 3 1
3
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
var w:=ReadlnString.ToWords;
var St:=new Stack <integer>;
var r:=0;
foreach var t in w do
if t[1].IsDigit then St.Push(t.ToInteger)
else begin
var a:=St.Pop;
var b:=St.Pop;
case t[1] of
'+':St.Push(a+b);
'-':St.Push(b-a);
'*':St.Push(a*b)
end;
end;
Writeln(St.Pop)
end.
Контрольный пример
8 9 + 1 7 - *
-102
2. Задача крайне просто решается при регулярного выражения с рекурсией. Фактически вводить количество шаров не нужно, поэтому после ввода оно отбрасывается.
// PascalABC.NET 3.3, сборка 1555 от 21.10.2017
// Внимание! Если программа не работает, обновите версию!
begin
Writeln(ReadlnString.ToWords.Skip(1).JoinIntoString('').
MatchValue('(.)\1{2,}').Length);
end.
Контрольный пример
5 2 3 3 3 1
3