Вверх ↑
Этот топик читают: Гость
Ответов: 817
Рейтинг: 52
#1: 2017-05-25 20:05:56 ЛС | профиль | цитата
Предположим, что необходимо постоянно сравнивать вводимые (поступающие) данные с заранее определенными.
Данных много, более сотни.
Возникает вопрос, как лучше оптимизировать этот процесс что бы было быстро, потребляло мало ресурсов и размер программы был не велик?
Я пока знаю два способа:
1. Выставить подряд кучу Case (пример в схеме)
Add(MainForm,2953706,91,168)
{
}
Add(Case,4256534,294,168)
{
 Value=String(Вася)
 DataOnTrue=String(Совпало 1)
 link(onNextCase,14165110:doCase,[])
 link(onTrue,7752635:doWork2,[(339,181)(339,230)])
}
Add(Case,14165110,350,168)
{
 Value=String(Петя)
 DataOnTrue=String(Совпало 2)
 link(onNextCase,9037818:doCase,[])
 link(onTrue,7752635:doWork1,[(396,181)])
}
Add(Case,9037818,399,168)
{
 Value=String(Данные)
 DataOnTrue=String(Совпало 3)
 link(onNextCase,11454643:doCase,[])
 link(onTrue,5418488:doWork1,[(445,181)])
}
Add(Button,6047939,217,168)
{
 Left=55
 Top=45
 Data=String(Данные)
 link(onClick,4256534:doCase,[])
}
Add(Case,11454643,455,168)
{
 Value=String(Саша)
 DataOnTrue=String(Совпало 4)
 link(onTrue,12238575:doWork1,[(515,181)])
}
Add(Message,15623289,560,224)
{
}
Add(HubEx,7752635,392,224)
{
 link(onEvent,5418488:doWork2,[])
}
Add(HubEx,5418488,441,224)
{
 link(onEvent,12238575:doWork2,[])
}
Add(HubEx,12238575,511,224)
{
 link(onEvent,15623289:doMessage,[])
}
2. Каждый раз перебирать массив (пример в схеме)
Add(MainForm,2953706,91,168)
{
}
Add(Button,6047939,196,189)
{
 Left=55
 Top=45
 Data=String(Данные)
 link(onClick,5856751:doValue,[])
}
Add(ArrayEnum,14606484,336,189)
{
 link(onItem,8127400:doCompare,[])
 link(Array,6019312:Array,[(342,163)(356,163)])
}
Add(StrList,6019312,336,91)
{
 Strings=#4:Вася|4:Петя|6:Данные|4:Саша|
}
Add(If_else,8127400,392,189)
{
 link(onTrue,10090599:doMessage,[])
 link(Op2,5856751:Value,[(405,177)(436,177)(436,235)(272,235)])
}
Add(Memory,5856751,266,189)
{
 link(onData,14606484:doEnum,[])
}
Add(Message,10090599,469,189)
{
 Caption="Совпало"
}
Кто что скажет по этому поводу?
Какой вариант оптимальней?
Может вы предложите свое решение?

Редактировалось 3 раз(а), последний 2017-05-25 20:08:47
карма: 1

0
Ответов: 2335
Рейтинг: 682
#2: 2017-05-25 21:18:17 ЛС | профиль | цитата
-= DriveR =- писал(а):
Какой вариант оптимальней?
Посколько помню по скорости выполнения рейтинг такой:
1. IC.
2. FTCG.
3. Case.
4. IF.
5. Массив.
Сейчас придут товарищи с секундомерами и если что поправят.

-= DriveR =- писал(а):
Может вы предложите свое решение?

FTCG

Add(MainForm,2953706,329,259)
{
 Width=455
 Height=318
 Position=1
}
Add(FTCG_Tools,7409110,329,301)
{
 link(onFind,10090599:doMessage,[])
 link(onNotFind,15716397:doMessage,[(380,314)(380,349)])
}
BEGIN_SDK
  Add(EditMultiEx,6371240,21,21)
  {
   WorkCount=#6:doFind|
   EventCount=#6:onFind|9:onNotFind|
   Width=531
   Height=410
   link(doFind,11959883:doEvent1,[])
  }
  Add(StrArray,549744,210,105)
  {
   Strings=#4:Петя|4:Вася|6:Данные|4:Коля|4:Саня|4:Таня|
   MakeExt(Strings,Строки для поиска,Массив)
  }
  Add(ArrayRead,16425208,210,168)
  {
   link(onRead,16499349:doCompare,[])
   link(Array,549744:Array,[])
   link(Index,5774943:Var1,[(223,156)(251,156)])
  }
  Add(FT_For,10343322,147,224)
  {
   End=5
   link(onEvent,16425208:doRead,[(195,230)(195,174)])
   link(onStop,13867951:doData,[])
  }
  Add(FT_If_else,16499349,266,168)
  {
   link(onTrue,2408622:doEvent1,[])
   link(Op1,12071955:Value,[])
  }
  Add(FT_Memory,12071955,266,21)
  {
  }
  Add(FT_Hub,2408622,329,168)
  {
   link(onEvent1,113000:doData,[])
   link(onEvent2,10343322:doStop,[(357,181)(357,284)(135,284)(135,237)])
  }
  Add(FT_DoData,113000,364,168)
  {
   link(onEventData,6371240:onFind,[(474,174)(474,27)])
   link(Data,5774943:Var3,[(370,154)(315,154)(315,212)])
  }
  Add(GetDataEx,5774943,245,207)
  {
   Angle=3
   link(Data,10343322:Position,[(153,212)])
  }
  Add(FT_Hub,11959883,56,21)
  {
   link(onEvent1,12071955:doValue,[])
   link(onEvent2,10343322:doFor,[(108,34)(108,230)])
  }
  Add(FT_If_else,12497499,294,231)
  {
   Op2=Integer(6)
   link(onTrue,6371240:onNotFind,[(439,237)(439,34)])
  }
  Add(FT_DoData,13867951,245,231)
  {
   link(onEventData,12497499:doCompare,[])
   link(Data,5774943:Var2,[])
  }
END_SDK
Add(Button,6047939,273,301)
{
 Left=195
 Top=105
 Caption="Данные"
 Data=String(Данные)
 link(onClick,8910155:doWork2,[])
}
Add(Message,10090599,385,301)
{
 Caption="Совпало"
}
Add(Message,15716397,385,343)
{
 Caption="Не совпало"
}
Add(Button,46316,273,343)
{
 Left=195
 Top=140
 Caption="Test"
 Data=String(Test)
 link(onClick,8910155:doWork3,[(319,349)])
}
Add(HubEx,8910155,315,301)
{
 link(onEvent,7409110:doFind,[])
}

Редактировалось 2 раз(а), последний 2017-05-25 21:25:14
карма: 11

0
Ответов: 817
Рейтинг: 52
#3: 2017-05-25 21:25:04 ЛС | профиль | цитата
sla8a, Ага, понял.
Получается постоянный перебор массива но....
эээ...
как это по русски....
при использовании быстрых компонентов.
sla8a писал(а):
Посколько помню по скорости выполнения рейтинг такой:

Хм...
Я почему то всегда думал, что Case это самое медленное, даже медленнее массивов

Редактировалось 1 раз(а), последний 2017-05-25 21:32:47
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#4: 2017-05-25 21:27:42 ЛС | профиль | цитата

Add(MainForm,2953706,385,147)
{
}
Add(Button,6047939,385,189)
{
 Left=55
 Top=45
 Caption="Оля"
 Data=String(Оля)
 link(onClick,16737107:doWork2,[])
}
Add(StrList,6019312,511,147)
{
 Strings=#4:Вася|4:Петя|6:Данные|4:Саша|
 Point(doGetIndex)
 Point(onGetIndex)
 link(onGetIndex,8127400:doCompare,[])
}
Add(If_else,8127400,581,154)
{
 Op2=Integer(-1)
 link(onTrue,13440730:doData,[])
 link(onFalse,5116382:doData,[])
}
Add(DoData,13440730,686,154)
{
 Data=String(Нет)
 link(onEventData,4849638:doWork2,[])
}
Add(DoData,5116382,637,161)
{
 Data=String(Есть)
 link(onEventData,4849638:doWork3,[(732,167)])
}
Add(HubEx,4849638,728,154)
{
 link(onEvent,10090599:doMessage,[])
}
Add(Message,10090599,749,154)
{
 Caption="Совпадение"
}
Add(Button,12490965,385,231)
{
 Left=55
 Top=75
 Caption="Данные"
 Data=String(Данные)
 link(onClick,16737107:doWork3,[(459,237)])
}
Add(HubEx,16737107,455,189)
{
 link(onEvent,6019312:doGetIndex,[])
}


--- Добавлено в 2017-05-25 21:30:30

sla8a писал(а):
3. Case.
4. IF.
Может быть и такой рейтинг, но не у нас.
У нас Case работает как If

Редактировалось 1 раз(а), последний 2017-05-25 21:30:30
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 817
Рейтинг: 52
#5: 2017-05-25 21:35:03 ЛС | профиль | цитата
Tad, Прикольный вариант, и главное простой.
Буду пробовать сравнивать по скорости с вариантом sla8a,
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#6: 2017-05-25 22:03:16 ЛС | профиль | цитата
Вопрос нужно задавать правильно.
-= DriveR =- писал(а):
Предположим, что необходимо постоянно сравнивать вводимые (поступающие) данные с заранее определенными.
Данных много, более сотни.
Каких "более сотни" вводимых или заранее определённых ?
Где хранятся "заранее определённые" ? и т.д. и т.п.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 8944
Рейтинг: 824
#7: 2017-05-26 00:57:01 ЛС | профиль | цитата
sla8a писал(а):
придут товарищи с секундомерами

Здесь мы, здесь
IC без секундомера


Add(MainForm,2953706,350,77)
{
 link(onCreate,5754919:doWork2,[])
}
Add(InlineCode,9695677,567,154)
{
 WorkPoints=#7:doStart|6:doCalc|
 EventPoints=#4:onIs|4:onNo|
 VarPoints=#
 DataPoints=#
 Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Windows,Debug;|0:|4:type|28: THiAsmClass = class(TDebug)|0:|10:   private|26:    _Arr: Array of string;|19:    _Numb: integer;|9:   public|25:    _data_Data:THI_Event;|20:    onIs:THI_Event; |19:    onNo:THI_Event;|4:    |52:    procedure doStart(var _Data:TData; Index:word); |51:    procedure doCalc(var _Data:TData; Index:word); |5: end;|38:                                      |21:                     |14:implementation|0:|2:  |29:procedure THiAsmClass.doCalc;|16:var i,j:integer;|27:    ss:string;             |5:begin|23:   ss:=ToString(_Data);|8:   j:=0;|24:    for i:=0 to _Numb do|10:     begin|25:       if ss=_Arr[i] then|13:        begin|31:         _hi_onEvent(onIs, ss);|14:         j:=1;|15:         break;|12:        end;|9:     end;|40:   if j=0 then _hi_onEvent(onNo, ss);   |4:end;|0:|30:procedure THiAsmClass.doStart;|15: var i:integer;|28:     ss:string;             |5:begin|24:    ss:=ToString(_Data);|37:    _Numb:= str2int(Parse(ss,'#'))-1;|29:    SetLength(_Arr, _Numb+1);|66:     for i:=0 to _Numb do _Arr[i]:=Parse(ss,'#');                 |4:end;|0:|4:end.|
 link(onIs,1499927:doAdd,[(606,160)(606,97)])
 link(onNo,113941:doAdd,[])
}
Add(StrList,9007008,455,91)
{
}
Add(Button,13042983,350,196)
{
 Left=15
 Top=65
 Caption="10000"
 link(onClick,12861570:doEvent1,[])
}
Add(Replace,494918,511,154)
{
 SubStr="\13\10"
 DestStr="#"
 link(onReplace,9695677:doStart,[])
}
Add(FormatStr,1325957,455,154)
{
 Mask="%2#%1"
 link(onFString,494918:doReplace,[])
 link(Str1,9007008:Text,[])
 link(Str2,15904293:Var2,[])
}
Add(For,7194033,448,203)
{
 End=9999
 link(onEvent,16175481:doWork1,[])
 link(onStop,2901245:doEvent1,[(487,216)(487,251)])
}
Add(MultiElement,5390066,399,91)
{
 link(onEvent1,9007008:doAdd,[])
 link(onEvent2,9007008:doClear,[])
 link(onEvent3,1325957:doString,[(445,111)(445,160)])
}
BEGIN_SDK
  Add(EditMulti,5544467,21,21)
  {
   EventCount=3
   WorkCount=1
   Width=363
   Height=137
   link(doWork1,8491383:doEvent1,[(39,27)(39,41)])
  }
  Add(For,12960271,84,56)
  {
   End=99
   link(onEvent,3200883:doFor,[])
   link(onStop,5544467:onEvent3,[(123,69)(123,41)])
  }
  Add(For,3200883,140,56)
  {
   End=2
   link(onEvent,16652732:doRandom,[])
   link(onStop,7668263:doEvent1,[(179,69)(179,118)])
  }
  Add(StrCat,12136332,294,56)
  {
   Point(doClear)
   link(Str1,11288868:Var1,[(300,47)(286,47)(286,96)])
  }
  Add(Random,16652732,196,56)
  {
   Min=224
   Max=255
   link(onRandom,10450224:doConvert,[])
  }
  Add(Convertor,10450224,238,56)
  {
   Mode=4
   link(onResult,12136332:doStrCat,[])
  }
  Add(DoData,11942152,294,112)
  {
   link(onEventData,5544467:onEvent1,[(354,118)(354,27)])
   link(Data,11288868:Var2,[])
  }
  Add(GetDataEx,11288868,294,91)
  {
   link(Data,12136332:Result,[])
  }
  Add(Hub,7668263,252,112)
  {
   link(onEvent1,11942152:doData,[])
   link(onEvent2,12136332:doClear,[(277,125)(277,69)])
  }
  Add(Hub,8491383,49,35)
  {
   OutCount=3
   link(onEvent1,5544467:onEvent2,[(95,41)(95,34)])
   link(onEvent2,16652732:doRandomize,[(186,48)(186,69)])
   link(onEvent3,12960271:doFor,[(74,55)(74,62)])
  }
END_SDK
Add(MultiElement,16175481,511,203)
{
 link(onEvent1,9695677:doCalc,[(550,209)(550,167)])
}
BEGIN_SDK
  Add(EditMulti,13590876,21,21)
  {
   EventCount=1
   WorkCount=1
   link(doWork1,7285298:doFor,[(53,27)(53,55)])
  }
  Add(StrCat,14447935,217,49)
  {
   Point(doClear)
   link(Str1,6323536:Var1,[(223,40)(209,40)(209,89)])
  }
  Add(Random,112672,119,49)
  {
   Min=224
   Max=255
   link(onRandom,7038619:doConvert,[])
  }
  Add(Convertor,7038619,161,49)
  {
   Mode=4
   link(onResult,14447935:doStrCat,[])
  }
  Add(DoData,1245030,217,105)
  {
   link(onEventData,13590876:onEvent1,[(256,111)(256,27)])
   link(Data,6323536:Var2,[])
  }
  Add(GetDataEx,6323536,217,84)
  {
   link(Data,14447935:Result,[])
  }
  Add(Hub,11226280,175,105)
  {
   link(onEvent1,1245030:doData,[])
   link(onEvent2,14447935:doClear,[(200,118)(200,62)])
  }
  Add(For,7285298,63,49)
  {
   End=2
   link(onEvent,112672:doRandom,[])
   link(onStop,11226280:doEvent1,[(109,62)(109,111)])
  }
END_SDK
Add(Label,1896650,749,203)
{
 Left=135
 Top=5
 Width=31
 Height=17
 Caption="Есть!"
}
Add(Label,3720396,749,259)
{
 Left=240
 Top=5
 Width=23
 Height=17
 Caption="Нет"
}
Add(Memo,15443129,707,196)
{
 Left=90
 Top=25
 Width=100
 Height=200
 ScrollBars=2
}
Add(Memo,3293135,707,252)
{
 Left=220
 Top=25
 Width=95
 Height=200
 ScrollBars=2
}
Add(Hub,12861570,406,196)
{
 link(onEvent1,3813973:doEvent1,[])
 link(onEvent2,7194033:doFor,[])
}
Add(Hub,3813973,581,196)
{
 link(onEvent1,1499927:doClear,[(613,202)(613,104)])
 link(onEvent2,113941:doClear,[(620,209)(620,174)])
}
Add(StrList,1499927,623,91)
{
}
Add(StrList,113941,644,161)
{
}
Add(DoData,15977997,623,217)
{
 link(onEventData,15443129:doText,[])
 link(Data,1499927:Text,[])
}
Add(DoData,5717497,644,273)
{
 link(onEventData,3293135:doText,[])
 link(Data,113941:Text,[])
}
Add(Hub,2901245,567,245)
{
 OutCount=3
 link(onEvent1,15977997:doData,[(599,251)(599,223)])
 link(onEvent2,5717497:doData,[(634,258)(634,279)])
 link(onEvent3,5201381:doString,[(592,265)(592,335)])
}
Add(Label,16264451,714,329)
{
 Left=5
 Top=230
 Height=20
}
Add(FormatStr,5201381,665,329)
{
 DataCount=4
 Mask="Из %1 слов совпало с одним из %2 эталонов %3, не совпало %4"
 link(onFString,16264451:doText,[])
 link(Str1,7194033:Position,[(671,320)(454,320)])
 link(Str2,15904293:Var3,[(678,313)(559,313)(559,145)])
 link(Str3,1499927:Count,[(685,152)(636,152)])
 link(Str4,113941:Count,[(692,264)(657,264)])
}
Add(GetDataEx,15904293,462,140)
{
 link(Data,9007008:Count,[])
}
Add(Button,13195911,350,119)
{
 Left=15
 Top=15
 Caption="Эталон"
 link(onClick,5754919:doWork3,[(389,125)])
}
Add(HubEx,5754919,385,91)
{
 link(onEvent,5390066:doWork1,[])
}

карма: 19

0
Ответов: 9906
Рейтинг: 351
#8: 2017-05-26 06:27:21 ЛС | профиль | цитата
Секундомер недолго и поставить ...

IC с секундомером

Add(MainForm,7286687,203,91)
{
 Position=1
 link(onCreate,5754919:doWork2,[])
}
Add(InlineCode,9695677,336,105)
{
 @Hint=#23:doStart - Инициализация|26:doCalc  - Делением пополам|28:doTest  - Пустышка для теста|24:doCalc1 - Полный перебор|
 WorkPoints=#7:doStart|6:doCalc|6:doTest|7:doCalc1|
 EventPoints=#4:onIs|4:onNo|
 Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Windows,Debug;|0:|4:type|28:  TStrArr = Array of string;|29:  THiAsmClass = class(TDebug)|9:  private|18:    _Arr: TStrArr;|19:    _Numb: integer;|8:  public|24:    onIs,onNo:THI_Event;|51:    procedure doStart(var _Data:TData; Index:word);|51:    procedure doCalc (var _Data:TData; Index:word);|51:    procedure doTest (var _Data:TData; Index:word);|51:    procedure doCalc1(var _Data:TData; Index:word);|6:  end;|0:|0:|14:implementation|0:|16:uses hiStr_Enum;|0:|39:function LStrCmp(S1,S2:string):integer;|3:asm|23:          CMP   EAX,EDX|22:          JE    @@Exit|23:          TEST  EAX,EAX|22:          JE    @@Exit|23:          TEST  EDX,EDX|22:          JE    @@Exit|19:          PUSH  ESI|19:          PUSH  EDI|23:          MOV   ESI,EAX|23:          MOV   EDI,EDX|27:          MOV   EAX,[ESI-4]|27:          MOV   ECX,[EDI-4]|23:          SUB   EAX,ECX|19:          JA    @@1|23:          ADD   ECX,EAX|23:@@1:      XOR   EDX,EDX|21:          REPE  CMPSB|23:          JE    @@equal|23:          XOR   EAX,EAX|26:          MOV   AL,[ESI-1]|26:          MOV   DL,[EDI-1]|19:@@equal:  POP   EDI|19:          POP   ESI|23:@@exit:   SUB   EAX,EDX|4:end;|0:|38:function StrCmp(S1,S2:string):integer;|3:asm|23:  Call  System.@LStrCmp|13:  MOV   EAX,0|10:  SETA  AL|13:  SBB   EAX,0|4:end;|0:|29:procedure THiAsmClass.doCalc;|20:var i,j,k,l:integer;|14:    ss:string;|5:begin|24:  ss := ToString(_Data);|36:  _hi_CreateEvent(_Data, @onIs, ss);|23:  i := 0; j := _Numb-1;|28:  k := LStrCmp(_Arr[i], ss);|28:  l := LStrCmp(_Arr[j], ss);|28:  if (k=0)or(l=0) then exit;|46:  if (k<0)and(l>0) then while (j-i)>1 do begin|21:    k := (i+j) div 2;|30:    l := LStrCmp(_Arr[k], ss);|21:    if l=0 then exit;|22:    if l>0 then j := k|16:    else i := k;|6:  end;|36:  _hi_CreateEvent(_Data, @onNo, ss);|4:end;|0:|29:procedure THiAsmClass.doTest;|5:begin|33:  _hi_CreateEvent_(_Data, @onNo);|4:end;|0:|30:procedure THiAsmClass.doCalc1;|14:var i:integer;|14:    ss:string;|5:begin|24:  ss := ToString(_Data);|36:  _hi_CreateEvent(_Data, @onIs, ss);|61:  for i:=0 to _Numb-1 do if LStrCmp(ss, _Arr[i])=0 then exit;|36:  _hi_CreateEvent(_Data, @onNo, ss);|4:end;|0:|65:procedure SwapStr(const Sender: Pointer; const e1, e2: Cardinal);|24:var A:TStrArr; s:string;|5:begin|23:  A := TStrArr(Sender);|41:  s := A[e1]; A[e1] := A[e2]; A[e2] := s;|4:end;|0:|73:function CompStr(const Sender: Pointer; const e1, e2: Cardinal): integer;|14:var A:TStrArr;|5:begin|23:  A := TStrArr(Sender);|34:  Result := LStrCmp(A[e1], A[e2]);|4:end;|0:|30:procedure THiAsmClass.doStart;|15: var i:integer;|15:     ss:string;|5:begin|25:   ss := ToString(_Data);|35:   _Numb:= str2int(FParse(ss,'#'));|26:   SetLength(_Arr, _Numb);|52:   for i:=0 to _Numb-1 do _Arr[i] := FParse(ss,'#');|45:   SortData(_Arr, _Numb, @CompStr, @SwapStr);|4:end;|0:|4:end.|
 link(onIs,1499927:doAdd,[(375,111)(375,62)])
 link(onNo,113941:doAdd,[])
 AddHint(-130,-78,149,52,@Hint)
}
Add(Button,13042983,56,182)
{
 Left=15
 Top=51
 Caption="10000"
 link(onClick,12861570:doEvent1,[])
}
Add(For,7194033,203,189)
{
 End=20000
 IncludeEnd=1
 link(onEvent,16175481:doWork2,[])
 link(onStop,8471842:doStop,[(249,202)(249,230)(137,230)(137,202)])
}
Add(MultiElement,5390066,273,105)
{
 link(onEvent1,9695677:doStart,[])
}
BEGIN_SDK
  Add(EditMulti,5544467,21,21)
  {
   EventCount=1
   WorkCount=1
   VarCount=1
   Width=363
   Height=158
   VOffset=14
   HOffset=63
   link(doWork1,8491383:doEvent1,[])
   link(Var1,12960271:Position,[])
  }
  Add(For,12960271,84,63)
  {
   End=10000
   IncludeEnd=1
   MakeExt(End,Количество эталонов,WordCount)
   link(onEvent,3200883:doFor,[])
   link(onStop,16346339:doStrCatDlm,[(130,76)(130,125)])
  }
  Add(For,3200883,140,63)
  {
   End=5
   IncludeEnd=1
   MakeExt(End,Длина слова,WordLength)
   link(onEvent,16652732:doRandom,[])
   link(onStop,11942152:doData,[(179,76)(179,111)])
  }
  Add(StrCat,12136332,315,63)
  {
   Point(doClear)
   link(Str1,11288868:Var1,[(321,54)(307,54)(307,103)])
  }
  Add(Random,16652732,196,63)
  {
   Min=224
   Max=255
   link(onRandom,10450224:doConvert,[])
  }
  Add(Convertor,10450224,245,63)
  {
   Mode=4
   link(onResult,8615578:doWork2,[])
  }
  Add(GetDataEx,11288868,315,98)
  {
   link(Data,12136332:Result,[])
  }
  Add(Hub,8491383,49,35)
  {
   OutCount=3
   link(onEvent1,12136332:doClear,[(298,41)(298,76)])
   link(onEvent2,16652732:doRandomize,[(186,48)(186,76)])
   link(onEvent3,12960271:doFor,[(74,55)(74,69)])
  }
  Add(StrCatDelim,16346339,308,119)
  {
   Delimiter="#"
   link(onStrCatDlm,5544467:onEvent1,[(361,125)(361,41)])
   link(Str2,11288868:Var2,[])
  }
  Add(DoData,11942152,196,105)
  {
   Data=String(#)
   link(onEventData,8615578:doWork3,[(291,111)])
  }
  Add(HubEx,8615578,287,63)
  {
   link(onEvent,12136332:doStrCat,[])
  }
END_SDK
Add(MultiElement,16175481,266,182)
{
 link(onEvent1,9695677:doCalc,[(312,188)(312,118)])
 link(onEvent2,9695677:doTest,[(319,195)(319,125)])
 link(onEvent3,9695677:doCalc1,[(326,202)(326,132)])
}
BEGIN_SDK
  Add(EditMulti,13590876,21,21)
  {
   EventCount=3
   WorkCount=2
   Width=314
   Height=144
   VOffset=28
   link(doWork1,2595334:doValue,[(53,55)(53,48)])
   link(doWork2,5653973:doEvent1,[])
  }
  Add(StrCat,14447935,217,63)
  {
   Point(doClear)
   link(Str1,6323536:Var1,[(223,54)(209,54)(209,103)])
  }
  Add(Random,112672,119,63)
  {
   Min=224
   Max=255
   link(onRandom,7038619:doConvert,[])
  }
  Add(Convertor,7038619,161,63)
  {
   Mode=4
   link(onResult,14447935:doStrCat,[])
  }
  Add(DoData,1245030,217,119)
  {
   link(onEventData,14423728:doEvent,[])
   link(Data,6323536:Var2,[])
  }
  Add(GetDataEx,6323536,217,98)
  {
   link(Data,14447935:Result,[])
  }
  Add(For,7285298,63,63)
  {
   End=5
   IncludeEnd=1
   MakeExt(End,Длина слова,WordLength)
   link(onEvent,112672:doRandom,[])
   link(onStop,1245030:doData,[(109,76)(109,125)])
  }
  Add(Hub,5653973,35,56)
  {
   link(onEvent1,14447935:doClear,[(200,62)(200,76)])
   link(onEvent2,7285298:doFor,[])
  }
  Add(IndexToChanel,14423728,266,119)
  {
   Count=3
   Point(Index)
   link(onEvent1,13590876:onEvent1,[(305,125)(305,55)])
   link(onEvent2,13590876:onEvent2,[(312,132)(312,62)])
   link(Index,2595334:Value,[])
   link(onEvent3,13590876:onEvent3,[(319,139)(319,69)])
  }
  Add(Memory,2595334,266,42)
  {
   Default=Integer(0)
  }
END_SDK
Add(Label,1896650,532,161)
{
 Left=135
 Top=5
 Width=31
 Height=17
 Caption="Есть!"
}
Add(Label,3720396,532,217)
{
 Left=240
 Top=5
 Width=23
 Height=17
 Caption="Нет"
}
Add(Memo,15443129,483,161)
{
 Left=90
 Top=25
 Width=100
 Height=200
 ScrollBars=2
}
Add(Memo,3293135,483,217)
{
 Left=220
 Top=25
 Width=95
 Height=200
 ScrollBars=2
}
Add(Hub,12861570,105,182)
{
 OutCount=3
 link(onEvent1,3813973:doEvent1,[(193,188)(193,160)])
 link(onEvent2,8471842:doStart,[])
 link(onEvent3,2901245:doEvent1,[(130,202)(130,237)])
}
Add(Hub,3813973,364,154)
{
 link(onEvent1,1499927:doClear,[(389,160)(389,69)])
 link(onEvent2,113941:doClear,[(396,167)(396,125)])
}
Add(StrList,1499927,399,56)
{
}
Add(StrList,113941,420,112)
{
}
Add(DoData,15977997,399,182)
{
 link(onEventData,15443129:doText,[])
 link(Data,1499927:Text,[])
}
Add(DoData,5717497,420,238)
{
 link(onEventData,3293135:doText,[])
 link(Data,113941:Text,[])
}
Add(Hub,2901245,336,231)
{
 OutCount=3
 link(onEvent1,15977997:doData,[(361,237)(361,188)])
 link(onEvent2,5717497:doData,[])
 link(onEvent3,5201381:doString,[(361,251)(361,300)])
}
Add(Label,16264451,532,294)
{
 Left=5
 Top=230
 Height=20
}
Add(FormatStr,5201381,441,294)
{
 DataCount=4
 Mask="Из %1 слов совпало с одним из %2 эталонов %4, не совпало %3"
 link(onFString,16264451:doText,[])
 link(Str1,7194033:Position,[(447,285)(209,285)])
 link(Str2,5390066:Var1,[(454,278)(279,278)])
 link(Str3,113941:Count,[(461,173)(433,173)])
 link(Str4,1499927:Count,[(468,103)(412,103)])
}
Add(Button,13195911,133,56)
{
 Left=15
 Top=22
 Caption="Эталон"
 link(onClick,5754919:doWork1,[(249,62)])
}
Add(HubEx,5754919,245,105)
{
 link(onEvent,5390066:doWork1,[])
}
Add(TimeCounter,8471842,147,189)
{
 Precision=1
 link(onStart,7194033:doFor,[])
 link(onStop,7286687:doCaption,[(186,202)(186,97)])
}
Add(RadioButton,10072872,56,56)
{
 Left=14
 Top=98
 Selected=0
 Caption="FAST"
 link(onSelect,14021113:doWork1,[(109,62)(109,132)])
}
Add(RadioButton,15557680,56,98)
{
 Left=14
 Top=126
 Caption="Test"
 link(onSelect,14021113:doWork2,[(102,104)(102,139)])
}
Add(RadioButton,4133740,56,140)
{
 Left=14
 Top=154
 Caption="ENUM"
 link(onSelect,14021113:doWork3,[])
}
Add(ChanelToIndex,14021113,133,126)
{
 Count=3
 link(onIndex,16175481:doWork1,[(242,132)(242,188)])
}
[/scroll]

[color=gray][size=9]Редактировалось 3 раз(а), последний 2017-05-31 13:49:17[/size][/color]
карма: 9

1
Голосовали:ser_davkin
Ответов: 8944
Рейтинг: 824
#9: 2017-05-26 09:38:04 ЛС | профиль | цитата
Galkov писал(а):
недолго и поставить

карма: 19

0
Ответов: 817
Рейтинг: 52
#10: 2017-05-26 15:06:39 ЛС | профиль | цитата
Tad писал(а):
Каких "более сотни" вводимых или заранее определённых ?
Где хранятся "заранее определённые" ? и т.д. и т.п.


Заранее определенных более сотни, а вводить могут все что угодно, так что без ограничения
Заранее определенные хранятся в ОЗУ, это самое быстрое место у компа.

--- Добавлено в 2017-05-26 15:23:17

Кстати, вариант Tad все же быстрее получается

Редактировалось 1 раз(а), последний 2017-05-26 15:23:17
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#11: 2017-05-26 16:13:12 ЛС | профиль | цитата
Так и скажи - контроль на мат.
Заранее определенные хранятся в ОЗУ
Ты смотри!
Они туда забиваются при изготовлении компа?

Редактировалось 1 раз(а), последний 2017-05-26 16:18:55
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 817
Рейтинг: 52
#12: 2017-05-26 16:19:20 ЛС | профиль | цитата
Tad писал(а):
Так и скажи - контроль на мат.

В самую дырочку
карма: 1

0
Разработчик
Ответов: 26235
Рейтинг: 2140
#13: 2017-05-26 16:22:41 ЛС | профиль | цитата
-= DriveR =- писал(а):
В самую дырочку

А не проще ли тогда использовать MultiReplace и заменять крепкие слова пипсами?
карма: 22

0
Ответов: 16884
Рейтинг: 1239
#14: 2017-05-26 16:28:12 ЛС | профиль | цитата
Сначала нужно спросить, а сколько всего матерных слов ?
Только на "П" около 1500.(Кстати на "Х" всего 206)
Всего более 2000 слов.
И есть на все буквы алфавита.
Быстрее всего получилось с перенаправлением по первой букве на свой список.
Всего 28 списков.
Писал я такой фильтр.

--- Добавлено в 2017-05-26 16:36:47

nesco писал(а):
А не проще ли тогда использовать MultiReplace и заменять крепкие слова пипсами?
За крепкие слова нужно беспощадно банить.

Редактировалось 2 раз(а), последний 2017-05-26 16:36:47
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 9906
Рейтинг: 351
#15: 2017-05-26 16:59:04 ЛС | профиль | цитата
-= DriveR =- писал(а):
Кстати, вариант Tad все же быстрее получается

Неправда. Просто измерять не умеете.

Если речь идет о теории (не я первый произнес это слово), то асимптотика "полного перебора" - линейная по количеству "эталонов"
Асимптотика "деления пополам" - логарифмическая.
Вот вам и весь сказ

Редактировалось 1 раз(а), последний 2017-05-26 17:00:20
карма: 9

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