pascalabcnet/TestSuite/CompilationSamples/TasksStr.pas
AlexanderZemlyak ba4d274058
Async await merge (#3177)
* 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>
2024-07-05 23:04:23 +03:00

331 lines
11 KiB
ObjectPascal
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

unit TasksStr;
uses LightPT;
function Chr(i: integer) := PABCSystem.Chr(i);
var AllTaskNames: array of string;
procedure CheckTaskT(name: string);
begin
ClearOutputListFromSpaces;
case name of
'Char1': begin
CheckData(Input := Empty);
var a := Arr(word(48), word(100), word(68), word(1102), word(8594));
CheckOutput(a);
end;
'Char2': begin
CheckData(Input := Empty);
var a := Arr(Chr(169), Chr(931), Chr(960), Chr(1105), Chr(8551), Chr(8734), Chr(8776), Chr(8986), Chr(9327), Chr(9775), Chr(9917), Chr(10054));
CheckOutput(a);
end;
'CharTable': begin
CheckData(Input := Empty);
var obj := new ObjectList;
for var i:=32 to 1200 do
begin
Obj.Add(i); obj.Add(Chr(i));
end;
CheckOutput(obj);
end;
'CharPredSucc': begin
CheckData(Input := |cChar|);
GenerateTests('b','c','2','y');
var c := LightPT.Chr(0); // Нельзя вызывать Chr - это ошибка!!!
CheckOutput(Pred(c),Succ(c));
end;
'CharIs': begin
CheckData(Input := |cChar|);
GenerateTests('b','X','2','ю');
var c := LightPT.Chr(0);
CheckOutput(c.IsLetter, c.IsDigit, c.IsLower, c.IsUpper);
end;
'CharRange1': begin
CheckData(Input := Empty);
CheckOutput('0'..'9', 'a'..'z', 'а'..'я');
end;
'CharRange2': begin
CheckData(Input := |cChar|);
GenerateTests('a','V','z','Ю','д','1');
var c := LightPT.Chr(0);
CheckOutput(c in 'a'..'z');
end;
'CharRange3': begin
CheckData(Input := |cChar|);
GenerateTests('a','V','ю','A','1','Z');
var c := LightPT.Chr(0);
CheckOutput(c in 'A'..'Z');
end;
'CharRange4': begin
CheckData(Input := |cChar|);
GenerateTests('a','V','z','A','1','Ю');
var c := LightPT.Chr(0);
CheckOutput(c.ToLower in 'a'..'z');
end;
'CharTransform': begin
CheckData(Input := |cChar|);
var c := LightPT.Chr(0);
GenerateTests('a','V','z','A','1','Ю');
if c.IsLower then
c := c.ToUpper
else if c.IsUpper then
c := c.ToLower;
CheckOutput(c);
end;
'Strings1': begin
CheckData(Input := Empty);
CheckOutput('трос'.ToCharArray);
end;
'Strings2': begin
CheckData(Input := Empty);
CheckOutputSeq('сорт'.ToCharArray);
end;
'Strings2a': begin
CheckData(Input := Empty);
OutputList := OutputList;
CheckOutput('грозы','осы','ложки','кошки');
end;
'Strings3': begin
CheckData(Input := Empty);
CheckOutput('миг', 'мир', 'пир', 'пар');
end;
'Strings4': begin
CheckData(Input := Empty);
var hs := HSet('кошка','мышка','комик','комок','ножка','ножик','коржик','камыш');
var hs1 := OutputListAsStrings.ToHashSet;
if (hs*hs1).Count >= 5 then // Это классная суперидея. Мы не просто сравниваем с решением один в один, а мы используем сложное сравнение
TaskResult := Solved
else begin
TaskResult := PartialSolution;
ColoredMessage($'Выведите еще по крайней мере {5-(hs*hs1).Count} правильных слов',MessageColorT.MsgColorGray)
end;
end;
'Strings5': begin
CheckData(Input := Empty);
CheckOutput('********************', '010101010101010101010101010101');
end;
'Strings6': begin
CheckData(Input := Empty);
CheckOutput('кросс', 'атолл', 'Гримм', 'быстрее');
end;
'String13': begin
CheckData(Input := Empty);
CheckOutput(9);
end;
'String15': begin
CheckData(Input := |cStr|);
var s := Str(0);
CheckOutput(s.Count(c -> c.IsLetter and c.IsLower));
end;
'String16': begin
CheckData(Input := |cStr|);
GenerateTests('HeLLo','привет','ИНФОРМАТИКА');
var s := Str(0);
CheckOutput(s.ToLower);
end;
'StrCode': begin
CheckData(Input := Empty);
CheckOutput('рсйгжу', 'сткдзф', 'тулеих');
end;
'StrDeCode': begin
CheckData(Input := Empty);
CheckOutput('мы великие взломщики шифров');
end;
'StrCountAlg': begin
CheckData(Input := Empty);
CheckOutputSeq(Arr(3,5,2));
end;
'StrGenerate1': begin
CheckData(Input := Empty);
CheckOutput('abcdefghijklmnopqrstuvwxyz');
end;
'StrGenerate2': begin
CheckData(Input := Empty);
CheckOutput('каждый охотник желает знать где сидит фазан');
end;
'StrCount': begin
ClearOutputListFromSpaces;
CheckData(Input := Empty);
CheckOutput(14,15);
end;
'StrCountOf': begin
CheckData(Input := Empty);
CheckOutput(3,5,2);
end;
'StrCreate1': begin
CheckData(Input := Empty);
CheckOutput('abcdefghijklmnopqrstuvwxyz');
end;
'StrCreate2': begin
CheckData(Input := Empty);
CheckOutput('каждый охотник желает знать где сидит фазан');
end;
'StrWhere1': begin
CheckData(Input := Empty);
CheckOutput('каждый охотник желает знать где сидит фазан','буря мглою небо кроет вихри снежные крутя');
end;
'StrWhere2': begin
CheckData(Input := Empty);
CheckOutput('1223113221113','12112571191460');
end;
'StrSelect1': begin
CheckData(Input := Empty);
CheckOutput('вфсѐ!ндмпя!ожвп!лспжу!гйцсй!тожзоьж!лсфуѐ');
end;
'StrSelect2': begin
CheckData(Input := Empty);
var a := Arr(1082,1072,1078,1076,1099,1081,32,1086,1093,1086,1090,1085,1080,1082,32,1078,1077,1083,1072,1077,1090,32,1079,1085,1072,1090,1100,32,1075,1076,1077,32,1089,1080,1076,1080,1090,32,1092,1072,1079,1072,1085 );
var a1 := a.Select(x->word(x));
CheckOutput(a1);
end;
'StrMinMax': begin
CheckData(Input := Empty);
CheckOutput('а','ё');
end;
'StrWhereSelect': begin
CheckData(Input := Empty);
CheckOutput(23);
end;
'StrAllAny1': begin
CheckData(Input := Empty);
CheckOutput(True,False);
end;
'StrAllAny2': begin
CheckData(Input := Empty);
CheckOutput(True,False);
end;
'StrEachCount1': begin
CheckData(Input := Empty);
var res := 'The grass is always greener on the other side of the fence'.EachCount;
var ob := new ObjectList;
foreach var x in res.ToArray do
ob.Add(x);
CheckOutput(ob);
end;
'StrEachCount2': begin
CheckData(Input := Empty);
var res := 'L1o24st tim437364e is nev567e9r fo089874u89nd041342 ag8432ai6897'.EachCount;
var ob := new ObjectList;
foreach var x in res.ToArray do
if x.Key.IsDigit then
ob.Add(x);
CheckOutput(ob);
end;
'StrOrder1': begin
CheckData(Input := Empty);
CheckOutput(' adefgilmnorstuv');
end;
'StrOrder2': begin
CheckData(Input := Empty);
CheckOutput('0','1','3','5','8');
end;
'ToWords1': begin
CheckData(Input := Empty);
CheckOutput('головой жак звонарь как однажды сломал фонарь');
end;
'ToWords2': begin
CheckData(Input := Empty);
CheckOutput('как жак сломал фонарь однажды звонарь головой');
end;
'ToWordsWhere1': begin
CheckData(Input := Empty);
CheckOutput('косой кривоногий косой косой косой косой');
end;
'Pos1': begin
CheckData(Input := Empty);
CheckOutput(2,9);
end;
'Pos2': begin
CheckData(Input := Empty);
CheckOutput(7);
end;
'Delete1': begin
CheckData(Input := Empty);
CheckOutput('информатика');
end;
'Delete2': begin
CheckData(Input := Empty);
CheckOutput('программирование');
end;
'Delete3': begin
CheckData(Input := Empty);
CheckOutput('алгоритм');
end;
'Insert1': begin
CheckData(Input := Empty);
CheckOutput('Петр Первый был первым русским императором');
end;
'Insert2': begin
CheckData(Input := Empty);
CheckOutput('Петр Первый был великим русским императором');
end;
'StrChange1': begin
CheckData(Input := Empty);
CheckOutput('красный коричневый желтый зеленый бирюзовый синий фиолетовый');
end;
'StrChange2': begin
CheckData(Input := Empty);
CheckOutput('Алекс у Мелиссы украл кораллы, а Мелисса у Алекса украла кларнет');
end;
'StrBorder0': begin
CheckData(Input := Empty);
CheckOutput('наклонный <b>жирный</b> подчеркнутый <b>жирный</b> <b>жирный</b> подчеркнутый');
end;
'StrBorder1': begin
CheckData(Input := Empty);
CheckOutput('наклонный <b>жирный</b> подчеркнутый жирный жирный подчеркнутый');
end;
'StrSlice1': begin
CheckData(Input := Empty);
CheckOutput('Pascal','ABC','NET');
end;
'StrSlice2': begin
CheckData(Input := Empty);
CheckOutputSeq(Arr('клад зарыт на юго западе', 'зашифрованное сообщение'));
end;
'StrSlice4': begin
CheckData(Input := Empty);
CheckOutput('mydocument', 'docx', 'picture', 'jpg');
end;
'Str_Number0': begin
CheckData(Input := Empty);
CheckOutput('оценка1', 'балл2', 'окно3');
end;
'Str_Number03': begin
CheckData(Input := Empty);
CheckOutput(386);
end;
'Str_Number04': begin
CheckData(Input := |cInt|);
GenerateTests(2,34,567,67890);
var n := Int(0);
CheckOutput(n.ToString.Select(s->s.ToDigit).Sum);
end;
'Str_Number05': begin
CheckData(Input := Empty);
CheckOutput(31.6666666666667,27.0,42.0);
end;
'Str_Number06': begin
CheckData(Input := Empty);
CheckOutput(420);
end;
end;
end;
initialization
CheckTask := CheckTaskT;
AllTaskNames := Arr('Char1','Char2','CharTable','CharPredSucc','CharIs',
'CharRange1','CharRange2','CharRange3','CharRange4','CharTransform',
'Strings1','Strings2','Strings2a','Strings3','Strings4','Strings5','Strings6','String13','String15','String16',
'StrCode','StrDeCode','StrCountAlg','StrGenerate1','StrGenerate2','StrCount','StrCountOf',
'StrCreate1','StrCreate2','StrWhere1','StrWhere2','StrSelect1','StrSelect2',
'StrMinMax','StrWhereSelect','StrAllAny1','StrAllAny2','StrEachCount1','StrEachCount2',
'StrOrder1','StrOrder2','ToWords1','ToWords2','ToWordsWhere1',
'Pos1','Pos2','Delete1','Delete2','Delete3','Insert1','Insert2',
'StrChange1','StrChange2','StrBorder0','StrBorder1',
'StrSlice1','StrSlice2','StrSlice4',
'Str_Number0','Str_Number03','Str_Number04','Str_Number05','Str_Number06' );
finalization
end.