Проектная лаборатория
Собственный Grep
Этап 06 · Основные этапы
Сочетание классов символов
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите поддержку сочетания нескольких классов символов в одном шаблоне.
Поиск последовательности элементов шаблона
До сих пор шаблоны состояли из одного класса символов (\d, \w, [abc] и т. п.). Теперь нужно обрабатывать последовательности из нескольких классов и обычных символов.
Примеры:
\d appleнаходит совпадение в"1 apple"(цифра, за которой следует" apple").\d appleне находит совпадения в"1 orange"(строка не заканчивается на"apple").\d\d\d applesнаходит совпадение в"I got 100 apples from the store"(найдены три цифры, за которыми следует" apples").\d\d\d applesне находит совпадения в"I got 1 apple from the store"(найдена лишь одна цифра, а в" apple"отсутствует"s").\d \w\w\wsнаходит совпадение в"4 cats".\d \w\w\wsне находит совпадения в"1 dog"(в конце отсутствует"s").
На этом этапе, вероятно, придётся переработать реализацию: обрабатывать входные данные посимвольно, а не проверять всю строку сразу.
Проверки
Тестирующая система запустит программу так:
$ echo -n "1 apple" | ./your_program.sh -E "\d apple"Программа должна:
- Завершиться с кодом
0, если шаблон совпадает с каким-либо участком входной строки. - Завершиться с кодом
1, если совпадений нет.
Примечания
- Проверяйте шаблон последовательно: каждая его часть должна совпадать с соответствующей частью входных данных в том же порядке.
- Представьте входные данные как ленту: реализация продвигается по ней символ за символом, пытаясь найти совпадение.
- Если нужны идеи, прочитайте статью Роба Пайка «Сопоставление регулярных выражений». В ней показан изящный подход к построению такого механизма. Но сначала рекомендуем попробовать решить задачу самостоятельно.
Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init grep ./my-grep --language go2. Откройте папку в IDE
cd ./my-grepРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage sh9Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.