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

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

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

Этап 14 · Обратные ссылки

Несколько обратных ссылок

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы добавите поддержку нескольких обратных ссылок.

Несколько обратных ссылок

На предыдущем этапе вы обработали одну обратную ссылку. Теперь расширьте реализацию, чтобы один шаблон поддерживал несколько захваченных групп и обратных ссылок.

Каждая пара скобок создаёт пронумерованную захватывающую группу. На любую из них можно сослаться через \1, \2, \3 и так далее.

Например:

  • (\d+) (\w+) and \1 \2 находит совпадение в "3 red and 3 red".
  • (\d+) (\w+) and \1 \2 не находит совпадения в "3 red and 4 red" (3 ≠ 4).
  • (\d+) (\w+) and \1 \2 не находит совпадения в "3 red and 3 blue" (red ≠ blue).
  • (cat) and (dog) are \2 and \1 находит совпадение в "cat and dog are dog and cat" (обратный порядок).
  • (\w+)-(\w+)-\1-\2 находит совпадение в "foo-bar-foo-bar".

Проверки

Тестирующая система запустит программу так:

$ echo -n "3 red squares and 3 red circles" | ./your_program.sh -E "(\d+) (\w+) squares and \1 \2 circles"

Программа должна:

  • Завершиться с кодом 0, если входная строка соответствует шаблону со всеми обратными ссылками.
  • Завершиться с кодом 1 в противном случае.

Примечания

  • Нужно одновременно отслеживать несколько захваченных групп и соответствующий им текст. Можно использовать массив или словарь с номером группы в качестве индекса.
  • Каждая обратная ссылка должна точно совпадать с текстом, захваченным её группой, а не с любым текстом, подходящим под шаблон этой группы.
  • Обратные ссылки могут идти в любом порядке и использоваться многократно (например, \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 tg1

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

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

go / ЛОКАЛЬНО

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

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

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

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