powered by simpleCommunicator - 2.0.18     © 2024 Programmizd 02
Map
2 сообщений из 2, страница 1 из 1
Memo - тормозное.
    #365471
s62
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
s62 
Участник
Просто Треп написал про задачку: Чат гопоты
Просто Треп 
[игнорируется]
Хотелось бы получить список всех слов литературного английского, состоящих только из букв из списка
q, w, e, r, t, a, s, d, f, g, z, x, c, v, b

Интересно будет взглянуть на результат и на количество. Если чо, это все слова, которые можно набрать левой рукой в кверти.
Нашел я список английских слов, порядка 58 тыс. слов: http://www.mieliestronk.com/corncob_lowercase.txt
Напустил на них вот такую программку.
Код: Delphi
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
unit MainFrm;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  TMainForm = class(TForm)
    Memo: TMemo;
    Button1: TButton;
    dlgOpen: TOpenDialog;
    LB: TListBox;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    function CheckWord(const aWord: string): boolean;
    function CheckLetter(aLetter: Char): boolean;
  public
    { Public declarations }
  end;

var
  MainForm: TMainForm;

implementation

uses
  System.Diagnostics;

{$R *.dfm}

 //q, w, e, r, t, a, s, d, f, g, z, x, c, v, b

const
  WrongLetters: array[0..10] of Char = 'hijklmnopuy';

{ TForm1 }

procedure TMainForm.Button1Click(Sender: TObject);
var List: TStringList;
  i, f: Integer;
  SW: TStopWatch;
begin
  if dlgOpen.Execute() then
  begin
    f := 0;
    List := TStringList.Create;
    try
//      Memo.Clear;
//      Memo.Lines.BeginUpdate;
      LB.Clear;
      LB.Items.BeginUpdate;
      try
        List.LoadFromFile(dlgOpen.FileName);
        SW := TStopWatch.StartNew;
        for i := 0 to List.Count - 1 do
          if CheckWord(List[i]) then
            LB.Items.Add(List[i])
//            Memo.Lines.Add(List[i])
          else inc(f);
        SW.Stop;
        Caption := IntToStr(LB.Items.Count) + ' слов, отброшено ' + IntToStr(f) + ', ' +
          IntToStr(SW.ElapsedTicks div 10000) + ' мсек';
      finally
//        Memo.lines.EndUpdate;
        LB.Items.EndUpdate;
      end;
    finally
      List.Free;
    end;
  end;
end;

function TMainForm.CheckLetter(aLetter: Char): boolean;
var
  i: Integer;
begin
  Result := True;
  for i := Low(WrongLetters) to High(WrongLetters) do
    if aLetter = WrongLetters[i] then
    begin
      Result := False;
      Break;
    end;
end;

function TMainForm.CheckWord(const aWord: string): boolean;
var
  i: Integer;

begin
  Result := True;
  for i := 1 to Length(aWord) do
  if not CheckLetter(aWord[i]) then
  begin
    Result := False;
    Break;
  end;
end;

end.
Из списка программа отобрала 1615 слов, соответствующих условию.
Решил померить скорость. С Memo было порядка 160-170 мс. Потом добавил к Memo ScrollBar, время стало порядка 360 мс. Убрал скролл бар.
Причем обновление Memo запускаю внутри BeginUpdate -- EndUpdate.
Заменил Memo на ListBox, время стало порядка 10 мс.
Т.е. львиную долю времени занимала работа с Memo. Притом, что визуально результат и там, и там выглядит похоже.
Если копировать слова просто в StringList, то 3 мс.
...
Рейтинг: 0 / 0
Memo - тормозное.
    #365991
Неуловимый Джо
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[игнорирует гостей]
Сейчас как раз книгу по Object Pascal читаю.
Марко Кэнту, по последней версии.
На сайте Embarcadero можно скачать.
Соскучился )
...
Рейтинг: 1 / 0
Нравится: Гарыныч
2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (1): Анонимы (1)
Читали форум (2): Анонимы (1), Bing Bot 7 мин.
Пользователи онлайн (38): Анонимы (23), Antonariy, Брюквенные годы, Barkrowler, Biene Maja, Неуловимый Джо, Ветер, Гарыныч, Сталкер, s62, Yandex Bot 1 мин., NSFuimus 1 мин., ShuraNOSQL 2 мин., S Baltiki 3 мин., Bing Bot 4 мин., sergey11 5 мин.
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]