Обновил версию

This commit is contained in:
miks1965 2015-08-28 21:36:53 +03:00
parent d65ad0e2ff
commit c4374a3d62
12 changed files with 3 additions and 377 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "2";
public const string Minor = "2";
public const string Build = "0";
public const string Revision = "1022";
public const string Revision = "1026";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=2
%REVISION%=1022
%REVISION%=1026
%MAJOR%=2
%COREVERSION%=0

View file

@ -1 +1 @@
!define VERSION '2.2.0.1022'
!define VERSION '2.2.0.1026'

View file

@ -1,29 +0,0 @@
uses PT4, PT4Linq;
(*
При решении задач группы LinqObj доступны следующие
дополнительные методы, определенные в модуле PT4Linq:
ReadSeqInteger() - ввод числовой последовательности;
ReadSeqString() - ввод строковой последовательности;
Write() (метод расширения) - вывод последовательности;
Show() и Show(cmt) (методы расширения) - отладочная печать
последовательности, cmt - строковый комментарий;
Show(e -> str) и Show(cmt, e -> str) (методы расширения) -
отладочная печать строковых значений str, полученных
из элементов e последовательности, cmt - строковый комментарий.
*)
// Абрамян М.Э. ТЕХНОЛОГИЯ LINQ НА ПРИМЕРАХ. М.: ДМК-Пресс, 2014.
// Глава 5. Примеры решения задач из группы LinqBegin
// 5.6. Группировка
// LinqBegin60: правильное решение - 1 вариант (с.175, внизу)
begin
// ===ОШИБКА КОМПИЛЯЦИИ===
Task('LinqBegin60');
ReadSeqString().GroupBy(e -> e[1])
.OrderByDescending(e -> e.Sum(s -> s.Length)).ThenBy(e -> e.Key)
.Select(e -> e.Sum(s -> s.Length) + '-' + e.Key)
.Write;
end.

View file

@ -1,43 +0,0 @@
uses
PT4, PT4Linq;
begin
Task('LinqObj36');
System.Threading.Thread.CurrentThread.CurrentCulture :=
new System.Globalization.CultureInfo('en-US');
var res := ReadAllLines(ReadString)
.Select(s ->
begin
var ss := s.Split();
result := new class
(
N := integer.Parse(ss[0]),
D := double.Parse(ss[2]),
F := ss[1]
);
end)
.GroupBy(s -> (s.N - 1) mod 36 div 4 + 1, (k, ss) -> new class
(
P := k,
Info := ss.Where(s -> s.D <= ss.Average(s1 -> s1.D))
))
// òàê íå êîìïèëèðóåòñÿ
.SelectMany(s -> s.Info.Select(s1 -> new class
(
P := s.P,
F := s1.F,
N := s1.N,
D := s1.D
)))
.OrderBy(s -> s.P).ThenBy(s -> s.D)
.Select(e -> e.P + ' ' + e.D.ToString('F2') + ' ' + e.F + ' ' + e.N);
WriteAllLines(ReadString, res);
(* // òàê òîæå íå êîìïèëèðóåòñÿ
.SelectMany(e -> e.Info)
.OrderBy(e -> (e.N - 1) mod 36 div 4 + 1).ThenBy(e -> e.D)
.Select(e -> ((e.N - 1) mod 36 div 4 + 1) + ' ' + e.D.ToString('F2') + ' ' + e.F + ' ' + e.N);
WriteAllLines(ReadString, res);
*)
end.

View file

@ -1,42 +0,0 @@
uses PT4, PT4Linq;
(*
При решении задач группы LinqObj доступны следующие
дополнительные методы, определенные в модуле PT4Linq:
ReadAllLines(name) - функция, которая возвращает последовательность строк,
содержащихся в текстовом файле с имененм name;
WriteAllLines(name, seq) - процедура, которая записывает в текстовый файл
с именем name последотвальеность строк seq;
Show() и Show(cmt) (методы расширения) - отладочная печать
последовательности, cmt - строковый комментарий;
Show(e -> str) и Show(cmt, e -> str) (методы расширения) -
отладочная печать строковых значений str, полученных
из элементов e последовательности, cmt - строковый комментарий.
*)
begin
Task('LinqObj40');
var res := ReadAllLines(ReadString)
.Select(s ->
begin
var ss := s.Split();
result := new class
(
C := ss[0],
M := integer.Parse(ss[2]),
P := integer.Parse(ss[3]),
S := ss[1]
);
end)
.GroupBy(s -> s.S, (k, ss) -> new class
(
S := k,
C := Range(0,2).Select(i -> ss.Count(s -> s.M = 92+i*3))
))
.OrderBy(e -> e.S)
.Select(e -> e.S + e.C.Aggregate('', (seed, s) -> seed + ' ' + s));
WriteAllLines(ReadString, res);
end.

View file

@ -1,46 +0,0 @@
uses PT4, PT4Linq;
(*
При решении задач группы LinqObj доступны следующие
дополнительные методы, определенные в модуле PT4Linq:
ReadAllLines(name) - функция, которая возвращает последовательность строк,
содержащихся в текстовом файле с имененм name;
WriteAllLines(name, seq) - процедура, которая записывает в текстовый файл
с именем name последотвальеность строк seq;
Show() и Show(cmt) (методы расширения) - отладочная печать
последовательности, cmt - строковый комментарий;
Show(e -> str) и Show(cmt, e -> str) (методы расширения) -
отладочная печать строковых значений str, полученных
из элементов e последовательности, cmt - строковый комментарий.
*)
// Абрамян М.Э. ТЕХНОЛОГИЯ LINQ НА ПРИМЕРАХ. М.: ДМК-Пресс, 2014.
// Глава 6. Примеры решения задач из группы LinqObj
// 6.2. Более сложные задания на обработку отдельных последовательностей
// LinqObj41: правильное решение (с.196)
begin
// === ОШИБКА КОМПИЛЯЦЫЫ ===
Task('LinqObj41');
var m := ReadInteger;
var r := ReadAllLines(ReadString)
.Select(e ->
begin
var s := e.Split(' ');
result := new class (
brand := StrToInt(s[0]),
street := s[1],
price := StrToInt(s[3])
);
end)
.Where(e -> e.brand = m)
.GroupBy(e -> e.street,
(k, ee) -> new class ( street := k, max := ee.Max(e -> e.price) ))
.OrderBy(e -> e.max).ThenBy(e -> e.street)
.Select(e -> IntToStr(e.max) + ' ' + e.street)
.DefaultIfEmpty('Нет');
WriteAllLines(ReadString, r);
end.

View file

@ -1,25 +0,0 @@
uses PT4, PT4Linq;
begin
Task('LinqObj43');
var m := ReadInteger;
var res := ReadAllLines(ReadString)
.Select(s ->
begin
var ss := s.Split();
result := new class
(
C := ss[3],
M := integer.Parse(ss[1]),
P := integer.Parse(ss[0]),
S := ss[2]
)
end)
.GroupBy(s1 -> s1.C, (k, ss) -> new class
(
Comp := k,
C := ss.Where(s2 -> s2.M = m)
))
end.

View file

@ -1,51 +0,0 @@
uses PT4, PT4Linq;
(*
При решении задач группы LinqObj доступны следующие
дополнительные методы, определенные в модуле PT4Linq:
ReadAllLines(name) - функция, которая возвращает последовательность строк,
содержащихся в текстовом файле с имененм name;
WriteAllLines(name, seq) - процедура, которая записывает в текстовый файл
с именем name последотвальеность строк seq;
Show() и Show(cmt) (методы расширения) - отладочная печать
последовательности, cmt - строковый комментарий;
Show(e -> str) и Show(cmt, e -> str) (методы расширения) -
отладочная печать строковых значений str, полученных
из элементов e последовательности, cmt - строковый комментарий.
*)
// Абрамян М.Э. ТЕХНОЛОГИЯ LINQ НА ПРИМЕРАХ. М.: ДМК-Пресс, 2014.
// Глава 6. Примеры решения задач из группы LinqObj
// 6.2. Более сложные задания на обработку отдельных последовательностей
// LinqObj61: правильное решение (с.199-200)
begin
// === ОШИБКА ВРЕМЕНИ ВЫПОЛНЕНИЯ ===
Task('LinqObj61');
var subjects : array of string := ( 'Алгебра', 'Геометрия', 'Информатика' );
var culture := new System.Globalization.CultureInfo('en-US');
var r := ReadAllLines(ReadString)
.Select(e ->
begin
var s := e.Split(' ');
result := new class
(
name := s[0] + ' ' + s[1],
subj := s[3],
mark := StrToInt(s[4])
);
end)
.GroupBy(e -> e.name, (k, ee) -> new class
(
name := k,
avrs := subjects
.GroupJoin(ee, s -> s, e -> e.subj,
(s1, ee1) -> ee1.Select(e1 -> e1.mark)
.DefaultIfEmpty().Average())
))
.OrderBy(e -> e.name)
.Select(e -> e.name + e.avrs.Aggregate('',
(a, d) -> a + ' ' + d.ToString('f2', culture)));
WriteAllLines(ReadString, r);
end.

View file

@ -1,89 +0,0 @@
uses PT4, PT4Linq;
(*
Ïðè ðåøåíèè çàäà÷ ãðóïïû LinqObj äîñòóïíû ñëåäóþùèå
äîïîëíèòåëüíûå ìåòîäû, îïðåäåëåííûå â ìîäóëå PT4Linq:
ReadAllLines(name) - ôóíêöèÿ, êîòîðàÿ âîçâðàùàåò ïîñëåäîâàòåëüíîñòü ñòðîê,
ñîäåðæàùèõñÿ â òåêñòîâîì ôàéëå ñ èìåíåíì name;
WriteAllLines(name, seq) - ïðîöåäóðà, êîòîðàÿ çàïèñûâàåò â òåêñòîâûé ôàéë
ñ èìåíåì name ïîñëåäîòâàëüåíîñòü ñòðîê seq;
Show() è Show(cmt) (ìåòîäû ðàñøèðåíèÿ) - îòëàäî÷íàÿ ïå÷àòü
ïîñëåäîâàòåëüíîñòè, cmt - ñòðîêîâûé êîììåíòàðèé;
Show(e -> str) è Show(cmt, e -> str) (ìåòîäû ðàñøèðåíèÿ) -
îòëàäî÷íàÿ ïå÷àòü ñòðîêîâûõ çíà÷åíèé str, ïîëó÷åííûõ
èç ýëåìåíòîâ e ïîñëåäîâàòåëüíîñòè, cmt - ñòðîêîâûé êîììåíòàðèé.
*)
// Àáðàìÿí Ì.Ý. ÒÅÕÍÎËÎÃÈß LINQ ÍÀ ÏÐÈÌÅÐÀÕ. Ì.: ÄÌÊ-Ïðåññ, 2014.
// Ãëàâà 6. Ïðèìåðû ðåøåíèÿ çàäà÷ èç ãðóïïû LinqObj
// 6.3. Îáðàáîòêà âçàèìîñâÿçàííûõ ïîñëåäîâàòåëüíîñòåé
// LinqObj98: ïðàâèëüíîå ðåøåíèå (ñ.215, ââåðõó)
begin
//ÎØÈÁÊÀ ÊÎÌÏÈËßÖÈÈ
Task('LinqObj98');
var B := ReadAllLines(ReadString)
.Select(e ->
begin
var s := e.Split(' ');
result := new class
(
art := s[1],
cat := s[2]
);
end);
var C := ReadAllLines(ReadString)
.Select(e ->
begin
var s := e.Split(' ');
result := new class
(
discount := StrToInt(s[0]),
code := s[1],
shop := s[2]
);
end);
var D := ReadAllLines(ReadString)
.Select(e ->
begin
var s := e.Split(' ');
result := new class
(
art := s[0],
price := StrToInt(s[1]),
shop := s[2]
);
end);
var E := ReadAllLines(ReadString)
.Select(e ->
begin
var s := e.Split(' ');
result := new class
(
code := s[0],
art := s[1],
shop := s[2]
);
end);
var discounts := E.Join(B, e1 -> e1.art, e2 -> e2.art,
(e1, e2) -> new class ( e1.code, e1.art, e1.shop, e2.cat ))
.Join(D, e1 -> e1.art + e1.shop, e2 -> e2.art + e2.shop,
(e1, e2) -> new class ( e1.code, e1.shop, e1.cat, e2.price ))
.GroupJoin(C, e1 -> e1.code + e1.shop, e2 -> e2.code + e2.shop,
(e1, ee2) -> new class
(
cat_shop := e1.cat + ' ' + e1.shop,
discount := ee2.Select(e -> e.discount)
.FirstOrDefault() * e1.price div 100
));
var cats := B.GroupBy(e -> e.cat, (k, ee) -> k);
var shops := E.GroupBy(e -> e.shop, (k, ee) -> k);
var r := cats
.SelectMany(e1 -> shops.Select(e2 -> e1 + ' ' + e2))
.OrderBy(e -> e)
.GroupJoin(discounts, e1 -> e1, e2 -> e2.cat_shop,
(e1, ee2) -> e1 + ' ' +
IntToStr(ee2.Select(e -> e.discount).DefaultIfEmpty(-1).Sum()));
WriteAllLines(ReadString, r);
end.

View file

@ -1,49 +0,0 @@
{$reference System.Xml.Linq.dll}
uses PT4, PT4Linq, System, System.Xml.Linq;
(*
При решении задач группы LinqObj доступны следующие
дополнительные методы, определенные в модуле PT4Linq:
ReadAllLines(name) - функция, которая возвращает последовательность строк,
содержащихся в текстовом файле с имененм name;
Show() и Show(cmt) (методы расширения) - отладочная печать
последовательности, cmt - строковый комментарий;
Show(e -> str) и Show(cmt, e -> str) (методы расширения) -
отладочная печать строковых значений str, полученных
из элементов e последовательности, cmt - строковый комментарий.
*)
// Абрамян М.Э. ТЕХНОЛОГИЯ LINQ НА ПРИМЕРАХ. М.: ДМК-Пресс, 2014.
// Глава 7. Примеры решения задач из группы LinqXml
// 7.6. Дополнительные задания на обработку XML-документов
// LinqXml82: правильное решение (с.276)
begin
// ОШИБКА КОМПИЛЯЦИИ
Task('LinqXml82');
var name := ReadString;
var d := XDocument.Load(name);
var ns := d.Root.Name.Namespace;
var a := d.Root.Elements()
.Select(e ->
begin
var s := e.Name.LocalName.Substring(4).Split('-');
result := new class
(
house := StrToInt(s[0]),
floor := (StrToInt(s[1]) - 1) mod 36 div 4 + 1,
debt := double(e)
);
end);
var floors := Range(1, 9);
d.Root.ReplaceNodes(a.OrderBy(e -> e.house)
.GroupBy(e -> e.house,
(k, ee) -> new XElement(ns + ('house' + k),
floors.GroupJoin(ee, e1 -> e1, e2 -> e2.floor,
(e1, ee2) -> new XElement(ns + ('floor' + e1),
new XAttribute('count', ee2.Count()),
new XAttribute('total-debt',
Math.Round(ee2.Sum(e -> e.debt), 2)))))));
d.Save(name);
end.

Binary file not shown.