e
This commit is contained in:
parent
05f80f6486
commit
fadb078b01
43
TestSuite/LinqObj36.pas
Normal file
43
TestSuite/LinqObj36.pas
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
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.
|
||||
42
TestSuite/LinqObj40.pas
Normal file
42
TestSuite/LinqObj40.pas
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
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.
|
||||
|
||||
|
||||
25
TestSuite/LinqObj43.pas
Normal file
25
TestSuite/LinqObj43.pas
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
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.
|
||||
|
||||
|
||||
51
TestSuite/LinqObj61.pas
Normal file
51
TestSuite/LinqObj61.pas
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
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.
|
||||
|
||||
|
||||
Loading…
Reference in a new issue