Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#16: 2011-08-05 14:21:20 ЛС | профиль | цитата
Ну вот Вам без лишнего пробела, 5 элементов)
code_24807.txt
карма: 1

0
файлы: 1code_24807.txt [1.2KB] [145]
Ответов: 1821
Рейтинг: 168
#17: 2011-08-05 14:22:49 ЛС | профиль | цитата
Леонид,[flood] я же говорил, поставлю как только приеду. Мда... войны плюсов... [/flood]
карма: 5

0
Ответов: 3889
Рейтинг: 362
#18: 2011-08-05 14:34:21 ЛС | профиль | цитата
sаmakacd, тогда уже всем плюсики ставить без разбору
Леонид, ваш метод измерения нечестен к 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,[])
}
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#19: 2011-08-05 14:49:34 ЛС | профиль | цитата
1nd1g0, долой один провод. Мелочь, но приятно.
code_24810.txt
Леонид писал(а):
Требую плюсик!
не будет. У меня Ваш метод в 3-4 раза медленней.


карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
файлы: 1code_24810.txt [1022B] [172]
Гость
Ответов: 17029
Рейтинг: 0
#20: 2011-08-05 14:55:54 правка | ЛС | профиль | цитата


Редактировалось 2 раз(а), последний 2025-01-11 00:10:06
карма: 0

0
Ответов: 3889
Рейтинг: 362
#21: 2011-08-05 14:57:06 ЛС | профиль | цитата
г. ость, только при работе с данными в потоке понадобятся небольшие изменения
Поправил схему выше, добавил правильную инициализацию алгоритма и сделал настраиваемое количество групп, теперь полный паритет по функционалу с выигрышем по скорости)
карма: 1

0
Ответов: 8948
Рейтинг: 824
#22: 2011-08-05 15:09:10 ЛС | профиль | цитата
1nd1g0, тогда всё равно требую плюсик хотя бы за создание ЭТАЛОННОЙ схемы
Tad, как-то давно ожогся на этом убраном проводе и с тех пор не убираю его
карма: 19

0
Ответов: 3889
Рейтинг: 362
#23: 2011-08-05 15:36:25 ЛС | профиль | цитата
Вариант от г. ость, даже доработанный до работы с данными в потоке (инициализация Memory вместо Edit), побеждает по количеству элементов и, соответсвенно, по размеру программы. Однако по скорости он в 1.5 раза проигрывает моему алгоритму из-за более медленного элемента Insert

А вот и простенький бенчмарк, спасибо Леониду за рыбогенератор с микросекундомером


Add(MainForm,16248104,364,224)
{
Width=531
Height=181
link(onCreate,732931:doWork1,[])
}
Add(Edit,8133756,462,238)
{
Left=60
Top=10
Width=365
ReadOnly=0
link(onChange,378667:doEvent1,[])
}
Add(Button,11513152,364,266)
{
Left=10
Top=10
Width=40
Caption="New"
link(onClick,732931:doWork2,[(404,272)(404,251)])
}
Add(Edit,9626858,749,245)
{
Left=10
Top=45
Width=450
link(Str,15551848:Var1,[(755,233)(741,233)(741,287)(706,287)])
}
Add(Edit,14695809,700,196)
{
Left=435
Top=10
Width=25
Text="6"
DataType=2
}
Add(MultiElement,732931,413,238)
{
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,700,245)
{
link(onEvent1,9626858:doText,[])
link(Data1,14695809:Text,[])
}
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,700,406)
{
link(onEvent1,1278735:doText,[])
link(Data1,8133756:Text,[(706,390)(468,390)])
}
BEGIN_SDK
Add(EditMulti,7656592,21,21)
{
EventCount=1
WorkCount=1
DataCount=1
VarCount=1
Width=489
Height=347
link(doWork1,13085663:doEvent1,[(87,27)(87,160)])
link(Var1,1034086:Var1,[(27,222)])
}
Add(For,10028416,231,238)
{
Start=7
Step=7
InData=0
link(onEvent,11793843:doInsert,[])
link(onStop,7656592:onEvent1,[(387,251)(387,27)])
}
Add(Insert,11793843,280,238)
{
SubStr=" "
link(onInsert,6270288:doWork1,[(324,244)(324,149)(268,149)])
link(Str,6871647:Var2,[])
}
Add(GetDataEx,6871647,280,217)
{
link(Data,3146189:Value,[])
}
Add(Length,3405680,182,238)
{
link(onLength,10028416:doFor,[])
link(Str,1034086:Var2,[])
}
Add(Memory,3146189,280,154)
{
}
Add(HubEx,6270288,264,154)
{
link(onEvent,3146189:doValue,[])
}
Add(Hub,13085663,105,154)
{
link(onEvent1,6270288:doWork2,[])
link(onEvent2,3405680:doLength,[(151,167)(151,244)])
}
Add(GetDataEx,1034086,182,217)
{
Angle=1
link(Data,6871647:Var1,[])
}
END_SDK
Add(Hub,378667,504,238)
{
OutCount=10
link(onEvent1,7779797:doStart,[(658,244)(658,307)])
link(onEvent2,15551848:doWork1,[])
link(onEvent3,7779797:doStop,[(658,258)(658,314)])
link(onEvent4,9311572:doStart,[(658,265)(658,356)])
link(onEvent5,11624761:doWork1,[(658,272)(658,412)])
link(onEvent6,9311572:doStop,[(658,279)(658,363)])
link(onEvent7,16662575:doStart,[(658,286)(658,468)])
link(onEvent8,2767277:doWork1,[(626,293)(626,524)])
link(onEvent9,2767277:doWork2,[(626,300)(626,531)])
link(onEvent10,16662575:doStop,[(626,307)(626,475)])
}
Add(Edit,1278735,749,406)
{
Left=10
Top=75
Width=450
link(Str,11624761:Var1,[(755,394)(741,394)(741,449)(706,449)])
}
Add(Label,2335720,749,308)
{
Left=465
Top=45
}
Add(Label,1385241,749,357)
{
Left=465
Top=80
}
Add(TimeCounter,7779797,700,301)
{
link(onStop,2335720:doText,[])
}
Add(TimeCounter,9311572,700,350)
{
link(onStop,1385241:doText,[])
}
Add(MultiElement,2767277,700,518)
{
link(onEvent1,9932350:doText,[])
}
BEGIN_SDK
Add(EditMulti,366913,21,21)
{
EventCount=1
WorkCount=2
DataCount=1
VarCount=1
Width=356
Height=130
link(doWork1,7409094:doClear,[(258,27)(258,62)])
link(doWork2,6603082:doValue,[(39,34)(39,55)])
}
Add(Length,1671279,105,49)
{
link(onLength,13945066:doFor,[])
}
Add(For,13945066,154,49)
{
Start=1
Step=6
InData=0
link(onEvent,7764826:doCopy,[])
link(onStop,16133236:doDelete,[(200,62)(200,111)])
}
Add(Copy,7764826,217,49)
{
Count=6
link(onCopy,7409094:doStrCatDlm,[])
link(Str,6603082:Value,[(223,32)(96,32)(96,90)(62,90)])
}
Add(StrCatDelim,7409094,266,49)
{
Delimiter=" "
Point(doClear)
link(Str1,12470339:Var3,[(272,37)(306,37)(306,89)])
}
Add(GetDataEx,12470339,266,84)
{
link(Data,7409094:Result,[])
}
Add(Delete,16133236,266,105)
{
Count=1
link(onDelete,366913:onEvent1,[(344,111)(344,27)])
link(Str,12470339:Var2,[])
}
Add(Memory,6603082,56,49)
{
link(onData,1671279:doLength,[])
}
END_SDK
Add(Edit,9932350,749,518)
{
Left=10
Top=110
Width=450
link(Str,2767277:Var1,[(755,506)(742,506)(742,562)(706,562)])
}
Add(Label,7573395,749,469)
{
Left=465
Top=115
}
Add(TimeCounter,16662575,700,462)
{
link(onStop,7573395:doText,[])
}
карма: 1

0
Ответов: 758
Рейтинг: 112
#24: 2011-08-05 15:38:03 ЛС | профиль | цитата
Tad писал(а):
но попробуй когда исходная строка имеет 7 знаков.

code_24812.txt
карма: 1

1
файлы: 1code_24812.txt [707B] [312]
Голосовали:Tad
Ответов: 8948
Рейтинг: 824
#25: 2011-08-05 18:36:20 ЛС | профиль | цитата
1nd1g0 писал(а):
спасибо Леониду за рыбогенератор
"Спасибо в карман не положишь!"
Леонид писал(а):
тоже-е плюсик хочу-у-у

карма: 19

0
Ответов: 16884
Рейтинг: 1239
#26: 2011-08-05 18:52:15 ЛС | профиль | цитата
Учимся у miver http://forum.hiasm.com//getfile/24814
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#27: 2011-08-05 19:03:14 ЛС | профиль | цитата
Tad писал(а):
Учимся у miver-а

Честно говоря, гость выше сделал схему быстрее и универсальнее при том же (доработанный под Memory вариант) или меньшем (оригинал) размере. Однако использование обрезания пробелов и детектора изменения потока как итератора бесспорно достойны похвалы за оригинальность.
карма: 1

0
Ответов: 8948
Рейтинг: 824
#28: 2011-08-05 20:45:20 ЛС | профиль | цитата
У меня схема miver-а стабильно закрывается с ошибкой при числе знаков около 4000 и более
карма: 19

0
Ответов: 16884
Рейтинг: 1239
#29: 2011-08-05 21:05:58 ЛС | профиль | цитата
Да здравствуют наши строки - самые большие строки в мире !
Вы что, последователи Зураба Церетели ?
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#30: 2011-08-05 21:38:20 ЛС | профиль | цитата
Леонид писал(а):
схема miver-а стабильно закрывается с ошибкой


Если внимательно посмотреть, не трудно заметить, что она вообще максимум на 100 знаков расчитана в авторском варианте и требует реинициализации, как и моя схема (там у меня накопитель строк на рекурсии данных внутри компонента был сделан). А с какой ошибкой закрывается и как под FPC?
карма: 1

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)