Обновил версию
This commit is contained in:
parent
d65ad0e2ff
commit
c4374a3d62
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
%MINOR%=2
|
||||
%REVISION%=1022
|
||||
%REVISION%=1026
|
||||
%MAJOR%=2
|
||||
%COREVERSION%=0
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
!define VERSION '2.2.0.1022'
|
||||
!define VERSION '2.2.0.1026'
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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.
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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.
|
||||
|
||||
|
||||
|
|
@ -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.
Loading…
Reference in a new issue