
Леонид, ваш метод измерения нечестен к Tad, мой вариант на 5-ти элементах, дополненный всего одной ячейкой памяти, при первом (!) проходе стабильно обгоняет ваш метод в несколько раз (на моём офисном ПК - в 2.7 раза). Вариант с управляемым количеством символов в группе, чем больше группа, тем больше разница в его пользу:
Add(MainForm,16248104,196,77)
{
Width=531
Height=156
link(onCreate,8460481:doEvent1,[])
}
Add(Edit,8133756,357,161)
{
Left=60
Top=10
Width=365
ReadOnly=0
link(onChange,378667:doEvent1,[])
}
Add(Button,11513152,217,189)
{
Left=10
Top=10
Width=40
Caption="New"
link(onClick,732931:doWork2,[(279,195)(279,174)])
}
Add(Edit,9626858,581,168)
{
Left=10
Top=45
Width=450
link(Str,15551848:Var1,[(587,156)(573,156)(573,210)(538,210)])
}
Add(Edit,14695809,532,119)
{
Left=435
Top=10
Width=25
Text="6"
DataType=2
link(onChange,11624761:doWork3,[(576,125)(576,244)(513,244)(513,363)])
link(Str,11150260:Var1,[(538,108)(514,108)(514,159)])
}
Add(MultiElement,732931,308,161)
{
link(onEvent1,8133756:doText,[])
}
BEGIN_SDK
Add(EditMulti,6568332,21,21)
{
EventCount=1
WorkCount=2
Width=433
link(doWork1,13823396:doEvent1,[(49,27)(49,69)])
link(doWork2,15265336:doWork1,[(101,34)])
}
Add(Random,12410857,112,56)
{
Min=100000
Max=110000
link(onRandom,3242411:doEvent1,[])
}
Add(For,6660170,189,63)
{
link(onEvent,14475288:doRandom,[])
link(onStop,4880366:doData,[(230,76)(230,118)])
link(End,12410857:Random,[(202,44)(149,44)(149,97)(118,97)])
}
Add(Hub,13823396,77,63)
{
link(onEvent1,12410857:doRandomize,[])
link(onEvent2,15265336:doWork3,[(101,76)])
}
Add(Hub,3242411,154,56)
{
link(onEvent1,3582758:doClear,[(373,62)(373,76)])
link(onEvent2,6660170:doFor,[])
}
Add(Convertor,1930274,287,63)
{
Mode=4
link(onResult,6042138:doStrCat,[])
}
Add(Random,14475288,238,63)
{
Min=198
Max=255
link(onRandom,1930274:doConvert,[])
}
Add(StrCat,6042138,336,63)
{
link(onStrCat,3582758:doValue,[])
link(Str1,7238518:Var1,[(342,51)(378,51)(378,101)])
}
Add(Memory,3582758,385,63)
{
Default=String()
}
Add(GetDataEx,7238518,385,96)
{
link(Data,3582758:Value,[])
}
Add(HubEx,15265336,97,56)
{
link(onEvent,12410857:doRandom,[])
}
Add(DoData,4880366,385,112)
{
link(onEventData,6568332:onEvent1,[(435,118)(435,27)])
link(Data,7238518:Var2,[])
}
END_SDK
Add(MultiElement,15551848,532,168)
{
link(onEvent1,9626858:doText,[])
link(Data1,11150260:Var2,[])
}
BEGIN_SDK
Add(EditMulti,9360466,21,21)
{
EventCount=1
WorkCount=1
DataCount=1
VarCount=1
Height=144
VOffset=30
HOffset=45
link(doWork1,5214860:doEvent1,[(31,57)(31,104)])
link(Var1,2518281:Var1,[(72,103)])
}
Add(Hub,5214860,42,98)
{
OutCount=3
link(onEvent1,344769:doLength,[(66,104)(66,62)])
link(onEvent2,1062153:doWork2,[])
link(onEvent3,13205347:doCompare,[(66,118)(66,125)])
}
Add(Length,344769,77,56)
{
link(onLength,4289633:doCalc,[])
}
Add(MathParse,4289633,119,56)
{
MathStr="(%1 - 1) div %2"
link(X2,2919491:Var2,[])
}
Add(If_else,13205347,77,119)
{
Op2=Integer(0)
link(onTrue,6331647:doWork2,[(119,125)(119,118)])
link(onFalse,1484001:doFor,[])
link(Op1,6609051:Var1,[(83,107)])
}
Add(For,1484001,133,126)
{
Start=1
link(onEvent,15580922:doCalc,[])
link(onStop,6331647:doWork3,[(172,139)])
link(End,6609051:Var3,[(146,107)])
}
Add(GetDataEx,6609051,119,102)
{
link(Data,4289633:Result,[])
}
Add(Insert,869519,238,126)
{
SubStr="_"
link(onInsert,1062153:doWork1,[(282,132)(282,111)])
link(Str,2518281:Var2,[])
}
Add(MathParse,15580922,182,126)
{
MathStr="%1*(%2+1)"
link(onResult,869519:doInsert,[])
link(X2,2919491:Var3,[(195,47)])
}
Add(GetDataEx,2919491,126,42)
{
link(Data,9360466:Data1,[(132,32)(72,32)])
}
Add(Memory,9661622,238,63)
{
}
Add(HubEx,1062153,222,105)
{
Angle=3
link(onEvent,9661622:doValue,[(226,69)])
}
Add(GetDataEx,2518281,238,98)
{
link(Data,9661622:Value,[])
}
Add(HubEx,6331647,168,112)
{
link(onEvent,9360466:onEvent1,[(178,118)(178,57)])
}
END_SDK
Add(MultiElement,11624761,525,343)
{
link(onEvent1,1278735:doText,[])
link(Data1,8133756:Text,[(531,268)(363,268)])
}
BEGIN_SDK
Add(EditMulti,7656592,21,21)
{
EventCount=1
WorkCount=3
DataCount=1
VarCount=1
Width=356
Height=193
link(doWork1,6603082:doValue,[(49,27)(49,83)])
link(doWork2,7409094:doClear,[(151,34)(151,90)])
link(doWork3,13945066:doStep,[(95,41)(95,97)])
}
Add(Length,1671279,105,77)
{
link(onLength,13945066:doFor,[])
}
Add(For,13945066,168,77)
{
Start=1
Step=6
Point(doStep)
link(onEvent,7764826:doCopy,[])
link(onStop,16133236:doDelete,[(211,90)(211,153)])
link(End,1671279:Result,[(181,65)(160,65)(160,122)(111,122)])
}
Add(Copy,7764826,217,77)
{
Count=6
link(onCopy,7409094:doStrCatDlm,[])
link(Str,6603082:Value,[(223,28)(144,28)(144,162)(69,162)])
}
Add(StrCatDelim,7409094,280,77)
{
Delimiter=" "
Point(doClear)
link(Str1,12470339:Var1,[(286,60)(325,60)(325,119)])
}
Add(GetDataEx,12470339,280,114)
{
link(Data,7409094:Result,[])
}
Add(Delete,16133236,280,147)
{
Count=1
link(onDelete,7656592:onEvent1,[(344,153)(344,27)])
link(Str,12470339:Var2,[])
}
Add(Memory,6603082,63,77)
{
link(onData,1671279:doLength,[])
}
END_SDK
Add(Hub,378667,399,161)
{
OutCount=7
link(onEvent1,7779797:doStart,[(521,167)(521,230)])
link(onEvent2,15551848:doWork1,[])
link(onEvent3,7779797:doStop,[(514,181)(514,237)])
link(onEvent4,9311572:doStart,[(508,188)(508,279)])
link(onEvent5,11624761:doWork2,[(457,195)(457,356)])
link(onEvent6,11624761:doWork1,[(468,202)(468,349)])
link(onEvent7,9311572:doStop,[(518,209)(518,286)])
}
Add(Edit,1278735,574,343)
{
Left=10
Top=85
Width=450
}
Add(Label,2335720,595,231)
{
Left=470
Top=45
}
Add(Label,1385241,595,280)
{
Left=465
Top=90
}
Add(TimeCounter,7779797,546,224)
{
link(onStop,2335720:doText,[])
}
Add(TimeCounter,9311572,546,273)
{
link(onStop,1385241:doText,[])
}
Add(Hub,8460481,252,91)
{
link(onEvent1,14695809:doText,[(399,97)(399,125)])
link(onEvent2,732931:doWork1,[(287,104)(287,167)])
}
Add(GetDataEx,11150260,532,154)
{
link(Data,14695809:Text,[])
}