В 2008 году в рамках Soft-Парада впервые был организован так называемый турнир блиц-проектов. К участию приглашались все желающие в возрасте до 25 лет (включительно).

Турнир проходил во второй день Soft-Парада 19 апреля в выставочном центре «Сибирь». Регистрация началась в 09:00. Всего зарегистрировалось 18 человек.

В качестве инструментария участникам было предложено следующее программное обеспечение:

  • языки программирования: C/C++, C#, Java, Delphi, PHP, Perl, ASP, Visual Basic;
  • среды разработки и редакторы: MS Visual Studio 2005, Borland Delphi 7, Borland C++ Builder 6, Eclipse, UltraEdit, Far (+colorer);
  • веб-сервера: IIS и Apache (Denwer);
  • СУБД: MS SQL Server, InterBase, MySQL (с ODBC, JDBC, и .NET драйверами).

Участники выбрали такие инструменты:

  • PHP — 8 человек;
  • C++ — 7 человек (C++ Builder — 3, Visual Studio — 4);
  • Delphi — 3 человка.

К 10:05 участники освоились с установленным программным обеспечением, в 10:10 была выдана задача. На решение было дано 4 часа. В 14:10 жюри приступило к проверке решений на основе заготовленных тестов. К 16:00 были подведены итоги и награждены призеры.

Победители

МестоУчастникБаллыОрганизацияЯзык
1 местоПеров Юрий Николаевич86Гимназия № 3 г. КрасноярскаPHP
2 местоЛучинин Михаил Олегович50Гимназия № 11 г. КрасноярскаPHP
3 местоЧалкин Тимур Александрович44СибГАУC++
4 местоАфанасьев Антон Юрьевич43СФУ (Институт горного дела, геологии и геотехнологий)PHP
5 местоЛапаев Денис Викторович36СФУ (Институт математики)PHP

Условие задачи

Имеется большая коллекция текстовых файлов и файлов в формате HTML. Требуется обеспечить быстрый поиск слов в текстах этой коллекции. Вся коллекция содержится в одном каталоге (c:\docs) без подкаталогов. Файлы в формате HTML имеют расширения htm и html, все остальные файлы должны рассматриваться, как текстовые файлы; кодировка всех файлов — windows-1251. Всего в коллекции порядка 5000 файлов общим объемом порядка 100 Мб.

Слово определяется, как последовательность из двух и более символов из следующего набора: a-z, A-Z, 0-9, а-я, А-Я, _.

Поиск должен производиться без учета регистра символов. В том случае, если искомые слова встречаются более, чем в 50 файлах, требуется вывести только первые 50.

Оценка проекта

  1. Поиск одиночного слова в коллекции с выводом названий файлов, где найдено искомое слово. 25 баллов
    Если решение не проходит более половины тестов этого пункта, то дальнейшие тесты не проводятся и решение оценивается в 0 баллов.
  2. Поиск документов, в которых присутствует все заданные слова (И). 15 баллов
  3. Поиск документов, в которых присутствует одно из заданных слов (ИЛИ). 15 баллов
  4. Поддержка HTML: игнорирование тэгов (5 баллов), скриптов, комментариев и стилей (5 баллов), поиск в атрибутах alt (5 баллов). 15 баллов
  5. Вывод статистики при выводе результатов поиска: сколько всего найдено файлов (5 баллов), сколько слов найдено во всей коллекции (5 баллов), сколько слов найдено в каждом из документов (если в запросе указано несколько слов, то вывести суммарное количество найденных слов) (5 баллов). 15 баллов
  6. Сортировка результатов поиска по числу совпадений в документе (чем больше слов найдено в документе, тем раньше он должен находиться в результатах поиска). Если поиск возвращает более 50 файлов, требуется вывести первые 50 с наибольшим числом совпадений. 15 баллов

Если при тесте обработка запроса заняла более 3 секунд, то он оценивается в половину баллов. Допускается предварительная обработка документов коллекции и построение вспомогательных структур данных для обеспечения в дальнейшем быстрого поиска.

Запрещено использовать при реализации специализированные программы и библиотеки для полнотекстового поиска (например, Lucene, Яndex.Server и т. п.).

Тесты

Исходные файлы для тестирования: 5303 файлов, объемом 86 Мбайт: docs.rar (10 Мб).

  1. Поиск одиночного слова (суммарно 25 баллов)
    № тестасловофайлыкол-во баллов
    1.foobazнет совпадений5
    2.foobarmod_spelling.pp, jwawinldap.pas, libtar.pas, httpd.inc5
    3.TRunMethodfpcunit.pp, fpcunittests.pp5
    trunmethodfpcunit.pp, fpcunittests.pp
    4.invalid_file_handlenetware_nwcalls.pp5
    5.СофтПарадvista_faq_00604.html5

  2. Поиск нескольких слов, оператор «И» (суммарно 15 баллов)
    № тестасловафайлыкол-во баллов
    1.rooquaroo.pas, tpnumlib.pas, numlib.pas3
    2.Soft Paradнет совпадений3
    3.Dialog Synopsisjwaadsprop.pas, jwaactiveds.pas3
    4.RegisterHotKey function unit licensejwawinuser.pas, win_wininc_defines.inc, win_wininc_func.inc, wince_wininc_defines.inc3
    5.вход пользователя систему ввод парольxp_faq_104.html, xp_faq_61.html3

  3. Поиск нескольких слов, оператор «ИЛИ» (суммарно 15 баллов)
    № тестасловафайлыкол-во баллов
    1.тенейrtw_0003.html3
    2.bugbugz misuserнет совпадений3
    3.Ralph C_intmacos_macostp.inc, packages_extra_graph_go32v2_graph.pp, vesa.inc3
    4.spuninst локальныйxp_faq_54.html, xp_faq_2019.html, xp_faq_33.html, vista_svc_WLAN_AutoConfig.htm3
    5.softlinks модему DEP пересечениеamigados.pas, xp_faq_48.html, xp_faq_55.html, xp_svc_20.html, rtw_0005.html, xp_faq_107.html, xp_faq_89.html, xp_faq_allq.html3

  4. Поддержка HTML (суммарно 15 баллов)
    № тестасловафайлыкол-во баллов
    1.extdivнет совпадений3
    2.hkcu_resizeнет совпадений2
    3.style1OpenTransportProtocol.pas, FPCMacOSAll.pas3
    4.showhide1нет совпадений2
    5.первоеvista_svc_Plug_and_Play.htm2
    6.альтернативаrtw_00043.html3

  5. Подсчет и вывод статистики (суммарно 15 баллов)
    № тестасловаколичество и список файлов, число вхождений в нихкол-во баллов
    1.TProcessOptions2 файла1
    process.pp51
    process.txt2
    всего 7 вхождений1
    2.ограничение7 файлов1
    rtw_0007.html31
    rtw_about.html3
    xp_faq_15.html1
    xp_faq_2005.html21
    xp_faq_2024.html16
    xp_faq_38.html1
    xp_faq_74.html1
    всего 46 вхождений1
    3.работающими пользователями (связка «ИЛИ»)7 файлов1
    vista_svc_Remote_Registry.htm21
    xp_svc_74.html2
    xp_faq_2012_1.html1
    xp_faq_2029.html2
    xp_faq_87.html1
    xp_faq_allq.html1
    xp_svc_66.html1
    всего 10 вхождений1
    4.log console session (связка «И»)8 файлов1
    rtw_0005.html71
    openbsd_sysctlh.inc3
    FPCMacOSAll.pas256
    jwantstatus.pas51
    jwawinerror.pas77
    jwawinwlx.pas14
    jwawtsapi32.pas11
    netwlibc_libc.pp21
    всего 440 вхождений1
    5.Showhidden0 файлов, 0 вхождений3

  6. Сортировка результатов (суммарно 15 баллов)
    № тестасловаколичество и порядок файлов, число вхождений в нихкол-во баллов
    1.настройки профиля (связка «И»)3 файла5
    xp_faq_106.html9
    vista_svc_!intro.htm6
    xp_faq_allq.html6
    2.stdcall328 файлов. Первые 10 их них:10
    jwanative.pas2180
    jwawinbase.pas1001
    jwawinuser.pas731
    activex.pp707
    jwawingdi.pas422
    jwawincrypt.pas314
    numlib.pas242
    mmsystem.pp185
    jwamsi.pas164
    jwarpcdce.pas157