unit SF; type int = integer; bool = boolean; bi = BigInteger; FunI = () -> int; FunR = () -> real; FunS = () -> string; FunII = int -> int; FunIR = int -> real; FunIS = int -> string; FunRI = real -> int; FunRR = real -> real; FunRS = real -> string; FunSI = string -> int; FunSR = string -> real; FunSS = string -> string; Pred = () -> bool; PredI = int -> bool; PredR = real -> bool; PredS = string -> bool; Act = () -> (); ProcI = int -> (); ProcR = real -> (); ProcS = string -> (); procedure Pr(params a: array of object) := Print(a); procedure Pr(o: object) := Print(o); procedure Pr(s: string) := Print(s); procedure Prln(params a: array of object) := Println(a); function RI := ReadInteger; function RBI := ReadBigInteger; function RI64 := ReadInt64; function RR := ReadReal; function RC := ReadChar; function RS := ReadString; function RL := ReadLexem; function RlnI := ReadlnInteger; function RlnBI := ReadlnBigInteger; function RlnI64 := ReadlnInt64; function RlnR := ReadlnReal; function RlnC := ReadlnChar; function RlnS := ReadlnString; function RI2 := ReadInteger2; function RR2 := ReadReal2; function RC2 := ReadChar2; function RS2 := ReadString2; function RlnI2 := ReadlnInteger2; function RlnR2 := ReadlnReal2; function RlnC2 := ReadlnChar2; function RlnS2 := ReadlnString2; function RI3 := ReadInteger3; function RR3 := ReadReal3; function RC3 := ReadChar3; function RS3 := ReadString3; function RlnI3 := ReadInteger3; function RlnR3 := ReadlnReal3; function RlnC3 := ReadlnChar3; function RlnS3 := ReadlnString3; function RI4 := ReadInteger4; function RR4 := ReadReal4; function RC4 := ReadChar4; function RS4 := ReadString4; function RlnI4 := ReadInteger4; function RlnR4 := ReadlnReal4; function RlnC4 := ReadlnChar4; function RlnS4 := ReadlnString4; function RAI(n: integer) := ReadArrInteger(n); function RAR(n: integer) := ReadArrReal(n); function Pr(Self: integer): integer; extensionmethod := Self.Print; function Pr(Self: real): real; extensionmethod := Self.Print; function Pr(Self: Biginteger): Biginteger; extensionmethod := Self.Print; function Pr(Self: char): char; extensionmethod := Self.Print; function Pr(Self: boolean): boolean; extensionmethod := Self.Print; function Pr(Self: string): string; extensionmethod := Self.Print; function Pr(Self: array [,] of T; w: integer := 4): array [,] of T; extensionmethod := Self.Print(w); function Prln(Self: integer): integer; extensionmethod := Self.Println; function Prln(Self: real): real; extensionmethod := Self.Println; function Prln(Self: Biginteger): Biginteger; extensionmethod := Self.Println; function Prln(Self: char): char; extensionmethod := Self.Println; function Prln(Self: boolean): boolean; extensionmethod := Self.Println; function Prln(Self: string): string; extensionmethod := Self.Println; function D(Self,b: integer): boolean; extensionmethod := Self mod b = 0; function ND(Self,b: integer): boolean; extensionmethod := Self mod b <> 0; /// Записывает в min значение x если xmax procedure ReMax(var max: integer; x: integer); begin if x > max then max := x end; /// Записывает в min значение x если xmax procedure ReMax(var max: real; x: real); begin if x > max then max := x end; /// Возвращает все перестановки function Prm(Self: array of T): sequence of array of T; extensionmethod := Self.Permutations; /// Возвращает все сочетания по m элементов function Cmb(Self: array of T; m: integer): sequence of array of T; extensionmethod := Self.Combinations(m); /// Преобразует объект в строку function ToS(Self: Object): string; extensionmethod := Self.ToString; /// Преобразует строку в массив слов function ToW(Self: string): array of string; extensionmethod := Self.ToWords; /// Возвращает элементы последовательности без повторяющихся function Dst(Self: sequence of T): sequence of T; extensionmethod := Self.Distinct; /// Преобразует последовательность в строку function ToS(Self: sequence of T; delim: string): string; extensionmethod := Self.JoinToString(delim); /// Сливает последовательнсть строк в одну строку function Concat(Self: sequence of string): string; extensionmethod := Self.JoinToString(''); /// Преобразует строку в целое function ToI(Self: string); extensionmethod := Self.ToInteger; /// Преобразует строку в вещественное function ToR(Self: string); extensionmethod := Self.ToReal; /// Преобразует строку в массив целых function ToIs(Self: string); extensionmethod := Self.ToIntegers; /// Преобразует строку в массив вещественных function ToRs(Self: string); extensionmethod := Self.ToReals; function operator-(c,c1: char): integer; extensionmethod := Ord(c) - Ord(c1); /// Возвращает длину строки function Len(Self: string): integer; extensionmethod := Self.Length; /// Возвращает длину массива function Len(Self: array of T): integer; extensionmethod := Self.Length; /// Возвращает среднее элементов последовательности function Av(Self: sequence of integer): real; extensionmethod := Self.Average; /// Возвращает среднее элементов последовательности function Av(Self: sequence of real): real; extensionmethod := Self.Average; /// Возвращает количество элементов последовательности function Cnt(Self: sequence of T): integer; extensionmethod := Self.Count; function Ord(Self: sequence of T): sequence of T; extensionmethod := Self.Order; function OrdD(Self: sequence of T): sequence of T; extensionmethod := Self.OrderDescending; /// Преобразует последовательность в строку function Str(Self: sequence of T): string; extensionmethod := Self.JoinToString; /// Выводит последовательность, разделяя элементы пробелами function Pr(Self: sequence of T): sequence of T; extensionmethod := Self.Print; /// Выводит последовательность, разделяя элементы пробелами, и переходит на новую строку function Prln(Self: sequence of T): sequence of T; extensionmethod := Self.Println; /// Возвращает инвертированную последовательность function Rev(Self: sequence of T): sequence of T; extensionmethod := Self.Reverse; /// Преобразует каждый элемент последовательности в последовательность и сливает полученные последовательности в одну function SelM(Self: sequence of T; transform: T->sequence of T1): sequence of T1; extensionmethod := Self.SelectMany(transform); /// Преобразует последовательность, используя функцию transform function Sel(Self: sequence of T; transform: T->T1): sequence of T1; extensionmethod := Self.Select(transform); /// Создаёт словарь в ссответствии с заданными функциями проекции на ключ и значение function ToD(Self: sequence of T; keySelector: T->TKey; valueSelector: T->TValue): Dictionary; extensionmethod := Self.ToDictionary(keySelector,valueSelector); /// Создаёт словарь в ссответствии с заданной функцией проекции на ключ function ToD(Self: sequence of T; keySelector: T->TKey): Dictionary; extensionmethod := Self.ToDictionary(keySelector); /// Применяет к каждому элементы последовательности агрегатную функцию. Последнее значение агрегатной функции является результатом function Agr(Self: sequence of T; seed: TAcc; func: (TAcc,T)->TAcc): TAcc; extensionmethod := Self.Aggregate(seed,func); /// Фильтрует последовательность по условию cond function Wh(Self: sequence of T; cond: T->boolean): sequence of T; extensionmethod := Self.Where(cond); /// Преобразует последовательность в массив function ToA(Self: sequence of T): array of T; extensionmethod := Self.ToArray; /// Преобразует последовательность в список function ToL(Self: sequence of T): List; extensionmethod := Self.ToList; /// Преобразует последовательность в HashSet function ToHS(Self: sequence of T): HashSet; extensionmethod := Self.ToHashSet; /// Преобразует последовательность в SortedSet function ToSS(Self: sequence of T): SortedSet; extensionmethod := Self.ToSortedSet; /// Преобразует последовательность в HashSet function HS(s: sequence of T): HashSet := s.ToHashSet; /// Преобразует последовательность в SortedSet function SS(s: sequence of T): SortedSet := s.ToSortedSet; /// Инвертирует последовательность procedure Rev(a: array of T) := Reverse(a); /// Возвращает индекс минимального элемента function IMin(Self: array of T): integer; extensionmethod; where T: IComparable; begin Result := Self.IndexMin; end; /// Возвращает индекс максимального элемента function IMax(Self: array of T): integer; extensionmethod; where T: IComparable; begin Result := Self.IndexMax; end; /// Возвращает True если массивы равны function Eq(Self,b: array of T): boolean; extensionmethod := Self.ArrEqual(b); /// Возвращает в виде массива все элементы, удовлетворяющие cond function Filt(Self: array of T; cond: T->boolean): array of T; extensionmethod := Self.FindAll(cond); /// Возвращает массив с элементами, преобразованными по правилу transform function Tr(Self: array of T; transform: T->T): array of T; extensionmethod := Self.ConvertAll(transform); /// Преобразует массив по правилу transform procedure Tr(a: array of T; transform: T->T) := a.Transform(transform); /// Возвращает индекс последнего элемента массива function H(Self: array of T): integer; extensionmethod := Self.High; ///-- procedure __InitModule__; begin end; ///-- procedure __FinalizeModule__; begin end; end.