* s.ToLines RenameDirectory * Исправление ToLines * Убрал из грамматики узлы await - случайно оставались * Sync `.ToLines` with `System.IO.StringReader` (#3154) * 3.9.0.3494 * add tests * #3152 * #3152 * Don't skip PCU errors in `CompileAllUnits` * fix #3155 * Create the array types outside of any unit/scope * Add `use` test * RobotField - try в блоке создания * Исправлена Range(a, b, step: real) LightPT - CheckOutput может принимать параметры типа последователльность - они будут вытягиваться в одну последовательность Для этого исправлен FlattenElement FlattenOutput применяется автоматически - его теперь не надо вызывать явно TaskLoops поправлен и упрощен в соответствии с CheckOutput * Поправлен LightPT Упрощены TasksArr.pas TasksMatr.pas TasksStr.pas * fix `GetReferenceFileName` dll copy (#3173) * Исправление зависимостей проектов (#3174) * Add workflow to build each project separately * Make `Compiler` depend on `PascalLanguage` and `PascalABCSaushkinParser` 06e595 * Make IDE's depend on `PABCNETC` It's launched as a separate process from IDE * Revert pascal language moving to language plugins (#3175) * Return Parsers folder with standard parsers and move SyntaxTreeConverters back to Core * Rename PascalLanguage project to PascalABCLanguageInfo * Fix pascal dll loading * Поправлены Tasks1Arr.pas Tasks1Begin.pas Tasks1BoolIfCase.pas * Поправил в трех проектах пути к bin LightPT - Read...(prompt) - больше комбинаций Loop_If_2_Sum в Tasks1Loops.pas * #3172 * 3.9.0.3500 Хороший коммит ) * Remove extra tests * Fix dependencies in Compiler project * LightPT - убрал CheckOutputNew TasksArr.pas, TasksStr.pas - правки * #3164 * Убрали зависимость компилятора от парсера Паскаля --------- Co-authored-by: Mikhalkovich Stanislav <miks@math.sfedu.ru> Co-authored-by: Sun Serega <sunserega2@gmail.com> Co-authored-by: Ivan Bondarev <ibond84@googlemail.com>
243 lines
7.5 KiB
ObjectPascal
243 lines
7.5 KiB
ObjectPascal
unit Tasks1Arr;
|
||
|
||
uses LightPT;
|
||
|
||
var AllTaskNames: array of string;
|
||
|
||
procedure CheckTaskT(name: string);
|
||
begin
|
||
ClearOutputListFromSpaces;
|
||
case name of
|
||
'Arr0': begin
|
||
CheckData(Empty);
|
||
CheckOutput(5,4,3,2,1,777,5,4,3,2,1,777);
|
||
end;
|
||
'Arr1': begin
|
||
CheckData(Empty);
|
||
CheckOutput(777,1,1,1,777);
|
||
end;
|
||
'Arr2': begin
|
||
var n := 5;
|
||
CheckData(Input := cInt*n);
|
||
GenerateTests(10,tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il.Select(x->x+1));
|
||
end;
|
||
'Arr3': begin
|
||
var n := 5;
|
||
CheckData(Input := |cInt|*n);
|
||
GenerateTests(10,tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il.Select(x->x*2));
|
||
end;
|
||
'Arr4': begin
|
||
var n := 10;
|
||
CheckData(Input := cInt*n);
|
||
GenerateTests(10,tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il+il.Select(x->x*x));
|
||
end;
|
||
'Arr5': begin
|
||
var n := 10;
|
||
CheckData(Input := cInt*n);
|
||
GenerateTests(10, tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il, il.Reverse);
|
||
end;
|
||
'ArrErr1': begin
|
||
TaskResult := TaskStatus.ErrFix
|
||
end;
|
||
'ArrErr2': begin
|
||
TaskResult := TaskStatus.ErrFix
|
||
end;
|
||
'Arr1Sum': begin
|
||
var n := 10;
|
||
CheckData(Input := cInt*n);
|
||
GenerateTests(10, tInt*n);
|
||
var il := InputListAsIntegers.Select(x->x*0.1);
|
||
CheckOutput(il, il.Sum);
|
||
end;
|
||
'Arr2Prod': begin
|
||
CancelMessagesIfInitial := False; // !
|
||
var n := 8;
|
||
CheckData(cRe*n, cRe*n);
|
||
GenerateTests(10, tRe(1,10,1)*n);
|
||
var il := ReArr(n).Select(x->x);
|
||
CheckOutputAfterInitial(il.Product);
|
||
end;
|
||
'Arr1_If': begin
|
||
CancelMessagesIfInitial := False;
|
||
var n := 10;
|
||
CheckData(cInt*n, cInt*n);
|
||
GenerateTests(10, tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il, il.Where(x->x.IsEven));
|
||
end;
|
||
'Arr2_If': begin
|
||
CancelMessagesIfInitial := False;
|
||
var n := 10;
|
||
CheckData(cInt*n, cInt*n);
|
||
GenerateTests(10,tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il, il.Where((x,i)->i.IsOdd));
|
||
end;
|
||
'Arr0_Count': begin
|
||
CancelMessagesIfInitial := False;
|
||
var n := 10;
|
||
CheckData(|cInt|*n, |cInt|*n);
|
||
GenerateTests(10,tInt*n);
|
||
var il := IntArr(n);
|
||
CheckOutput(il, il.Count(x->x.IsOdd));
|
||
end;
|
||
'Arr1_Sum': begin
|
||
var n := InputList.Count;
|
||
GenerateTests(10, tInt*n);
|
||
var a := IntArr(n);
|
||
var il := a.Where(x->x in 3..5).ToArray;
|
||
CheckOutput(a, il, il.sum);
|
||
end;
|
||
'Arr2_Count': begin
|
||
var n := InputList.Count;
|
||
GenerateTests(10, tInt*n);
|
||
var a := IntArr(n);
|
||
CheckOutput(a, a.CountOf(2), a.CountOf(3), a.CountOf(4), a.CountOf(5));
|
||
end;
|
||
'Arr1_MinMax': begin
|
||
var n := InputList.Count;
|
||
GenerateTests(10, tInt*n);
|
||
var a := IntArr(n);
|
||
CheckOutput(a, a.Min);
|
||
end;
|
||
'Arr2_MinMax': begin
|
||
var n := InputList.Count;
|
||
GenerateTests(10,tInt*n);
|
||
var a := IntArr(n);
|
||
CheckOutput(a, a.Max);
|
||
end;
|
||
'Arr3_MinMax': begin
|
||
var n := InputList.Count;
|
||
GenerateTests(10,tInt*n);
|
||
var a := IntArr(n);
|
||
CheckOutput(a, a.IndexMin);
|
||
end;
|
||
'ПоискВМассиве': begin
|
||
var n := 10;
|
||
CheckData(cInt*n, cInt*n);
|
||
GenerateTests(10, tInt*n);
|
||
var a := IntArr(n);
|
||
CheckOutputAfterInitial(5 in a);
|
||
end;
|
||
'ПоискВМассивеСтрок': begin
|
||
CheckData(InitialInput := |cStr|, InitialOutput := |cStr|*8);
|
||
GenerateTests('Козлов','Серов','Иванова','Петров','Умнова','Хулиганкин','Белова','Ослов');
|
||
var s := Str(0);
|
||
var a := Arr('Козлов','Серов','Иванова','Петров','Умнова','Хулиганкин','Белова','Ослов');
|
||
CheckOutputAfterInitial(s in a);
|
||
end;
|
||
'Заполнение1': begin
|
||
CheckData(Empty);
|
||
CheckOutput(0,1,4,9,16,25,36,49,64,81);
|
||
end;
|
||
'Заполнение2Арифм': begin
|
||
CheckData(Empty);
|
||
CheckOutput(ArrGen(10,1,x->x+2));
|
||
end;
|
||
'Заполнение3Арифм': begin
|
||
CheckData(Empty);
|
||
CheckOutput(ArrGen(10,1,x->x+2));
|
||
end;
|
||
'Заполнение4Арифм': begin
|
||
CheckData(Empty);
|
||
CheckOutput(ArrGen(10,1.0,x->x+0.5));
|
||
end;
|
||
'Заполнение1Геом': begin
|
||
CheckData(Empty);
|
||
CheckOutput(ArrGen(10,1,x->x*2));
|
||
end;
|
||
'ЗаполнениеЧисламиФибоначчи': begin
|
||
CheckData(Empty);
|
||
CheckOutput(ArrGen(10,1,1,(x,y)->x+y));
|
||
end;
|
||
'СоседниеЭлементы1': begin
|
||
var n := 10;
|
||
CheckData(cInt*n, cInt*n);
|
||
GenerateTests(10,tInt*n);
|
||
var a := IntArr(n);
|
||
var ol := new ObjectList;
|
||
ol.AddRange(a.Pairwise.Where(\(x,y)->x<y).Select(t->t[1]));
|
||
CheckOutputAfterInitial(ol);
|
||
end;
|
||
'СоседниеЭлементы2': begin
|
||
var n := 10;
|
||
CheckData(cInt*n, cInt*n);
|
||
GenerateTests(10, tInt*n);
|
||
var a := IntArr(n);
|
||
var ol := new ObjectList;
|
||
ol.AddRange(a);
|
||
ol.Add(a.Pairwise.Where(\(x,y)->x<y).Count);
|
||
CheckOutput(ol);
|
||
end;
|
||
'ИнвертированиеМассива1': begin
|
||
var n := 7;
|
||
CheckData(InitialOutput := |cStr|*n);
|
||
var a := OutSliceStrArr(0,n-1);
|
||
CheckOutput(a + a.Reverse);
|
||
end;
|
||
'ИнвертированиеМассива2': begin
|
||
CancelMessagesIfInitial := False;
|
||
// Введено целое, потом массив целых(n). Выведен этот массив
|
||
var n := Int;
|
||
CheckData(InitialInput := |cInt|*(n+1), InitialOutput := |cInt|*n);
|
||
// Тут сгенерировать тесты сложнее потому что длина массива переменная. В дело вступает лямбда
|
||
TestCount := 10;
|
||
GenerateTestData := tnum -> begin
|
||
var n := Random(5,10);
|
||
var a := ArrRandomInteger(n);
|
||
InputList.AddTestData(|n|+a);
|
||
end;
|
||
var a := IntArr(n);
|
||
var ares := a.Reverse.ToArray;
|
||
CheckOutputAfterInitial(ares);
|
||
end;
|
||
'СтрокаКакМассив1': begin
|
||
CancelMessagesIfInitial := False;
|
||
CheckData(InitialOutput := |cStr|*2);
|
||
CheckOutput('бочка','ночка','дочка','кочка','почка','точка');
|
||
end;
|
||
'СтрокаКакМассив2': begin
|
||
CheckData(Empty);
|
||
CheckOutput('миг','мир','пир','пар');
|
||
end;
|
||
'СтрокаКакМассив3': begin
|
||
CancelMessagesIfInitial := False;
|
||
var s := 'на паркете написана абракадабра';
|
||
CheckData(InitialOutput := |cStr|*1);
|
||
|
||
var ol := new ObjectList;
|
||
ol.Add(s);
|
||
ol.Add(s.CountOf('а'));
|
||
CheckOutputSeq(ol);
|
||
end;
|
||
'СтрокаКакМассив4': begin
|
||
CheckData(Empty);
|
||
CheckOutput(True);
|
||
end;
|
||
'СтрокаКакМассив5': begin
|
||
CheckData(Empty);
|
||
CheckOutput('абракадабра','эбрэкэдэбрэ');
|
||
end;
|
||
end;
|
||
end;
|
||
|
||
initialization
|
||
CheckTask := CheckTaskT;
|
||
AllTaskNames := Arr('Arr0','Arr1','Arr2','Arr3','Arr4','Arr5',
|
||
'ArrErr1','ArrErr2','Arr1Sum','Arr2Prod','Arr1_If','Arr2_If','Arr0_Count','Arr1_Sum','Arr2_Count',
|
||
'Arr1_MinMax','Arr2_MinMax','Arr3_MinMax',
|
||
'ПоискВМассиве','ПоискВМассивеСтрок',
|
||
'Заполнение1','Заполнение2Арифм','Заполнение3Арифм','Заполнение4Арифм','Заполнение1Геом','ЗаполнениеЧисламиФибоначчи',
|
||
'СоседниеЭлементы1','СоседниеЭлементы2',
|
||
'ИнвертированиеМассива1','ИнвертированиеМассива2',
|
||
'СтрокаКакМассив1','СтрокаКакМассив2','СтрокаКакМассив3','СтрокаКакМассив4','СтрокаКакМассив5' );
|
||
finalization
|
||
end. |