Проектная лаборатория

Собственный Grep

0 / 33этапов пройдено

Этап 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 go

2. Откройте папку в IDE

cd ./my-grep

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage sh9

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста