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

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

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

Этап 105 · Битовые карты

Подсчёт установленных битов

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

На этом этапе вы добавите подсчёт установленных битов командой BITCOUNT.

Команда BITCOUNT

Команда BITCOUNT возвращает число битов, установленных в 1, в битовой карте.

Без дополнительных аргументов она обрабатывает всю строку. Также можно передать индексы start и end. Это индексы байтов, не битов; обе границы включены.

Смещения от 0 до 7 относятся к байту 0, от 8 до 15 — к байту 1. Команда BITCOUNT key 0 0 считает биты только первого байта.

> SETBIT bitmap_key 1 1
(integer) 0
> SETBIT bitmap_key 10 1
(integer) 0

После этих команд SETBIT строка равна 01000000 00100000. В байте 0 один установленный бит, в байте 1 — тоже один.

> BITCOUNT bitmap_key
(integer) 2
> BITCOUNT bitmap_key 0 1
(integer) 2

Вызов BITCOUNT без аргументов считает биты 1 во всех байтах. В этом примере результат совпадает с вызовом BITCOUNT с аргументами 0 1.

> BITCOUNT bitmap_key 0 0
(integer) 1
> BITCOUNT bitmap_key 1 1
(integer) 1

Вызов BITCOUNT с 0 0 считает биты 1 первого байта, а с 1 1 — биты 1 второго.

Дополнительные правила поведения BITCOUNT:

  • Для несуществующего ключа BITCOUNT возвращает 0.
  • Если start находится за концом строки, BITCOUNT возвращает 0.
  • Если end находится за концом строки, Redis считает его индексом последнего байта.
  • Если start больше end, BITCOUNT возвращает 0.

Проверки

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

$ ./your_program.sh

Затем создаст двухбайтовую битовую карту командами SETBIT.

$ redis-cli SETBIT bitmap_key 1 1
$ redis-cli SETBIT bitmap_key 10 1

После этого она отправит серию команд BITCOUNT без дополнительных аргументов или с неотрицательными индексами. Для каждой команды ожидается число установленных битов в формате целого числа RESP.

Например, может быть отправлена такая команда:

$ redis-cli BITCOUNT bitmap_key 0 0

Ожидаемый ответ — :1\r\n.

Примечания

  • На этом этапе достаточно BITCOUNT без диапазона и с неотрицательными индексами. Отрицательные индексы в этой задаче не рассматриваются.
  • BITCOUNT поддерживает необязательные аргументы BYTE и BIT, но в этой задаче они не рассматриваются.

Проверка в вашей IDE

Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.

Настройка проекта и IDE

1. Создайте проект один раз

node '/opt/graphlms/tools/project-lab/cli.mjs' init redis ./my-redis --language go

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

cd ./my-redis

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

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

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

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

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

go / ЛОКАЛЬНО

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

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

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

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