Проектная лаборатория
Собственный Redis
Этап 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 go2. Откройте папку в IDE
cd ./my-redisРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage nx3Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.