Проектная лаборатория
Собственный Redis
Этап 104 · Битовые карты
Расширение битовой карты
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите увеличение битовой карты через SETBIT и проверку её длины через STRLEN.
Увеличение битовой карты
Если SETBIT обращается к смещению за концом строки, Redis увеличивает строку, чтобы вместить его. Строка дополняется нулями, затем устанавливается нужный бит.
STRLEN возвращает длину строки в байтах, не в битах. Смещения от 0 до 7 помещаются в одном байте. Смещение 8 — первый бит второго байта. После увеличения ключа через SETBIT значение STRLEN равно floor(offset / 8) + 1. Для смещения 10 это 2.
> SETBIT bitmap_key 1 1
(integer) 0После этой команды SETBIT Redis создаёт однобайтовую строку 01000000.
> SETBIT bitmap_key 10 1
(integer) 0После второго вызова SETBIT Redis добавляет второй байт и устанавливает бит со смещением 10 в 1. Итоговая строка — 01000000 00100000.
> STRLEN bitmap_key
(integer) 2Проверки
Тестирующая система запустит программу так:
$ ./your_program.shЗатем создаст однобайтовую битовую карту командой SETBIT.
$ redis-cli SETBIT bitmap_key 1 1Она отправит команду STRLEN для этого ключа.
$ redis-cli STRLEN bitmap_keyОжидаемый ответ — :1\r\n, то есть 1 в формате целого числа RESP.
Затем будет отправлена команда SETBIT со смещением во втором байте.
$ redis-cli SETBIT bitmap_key 10 1Ожидаемый ответ — :0\r\n.
Далее тестирующая система отправит команды GETBIT для нового бита.
$ redis-cli GETBIT bitmap_key 10Ожидаемый ответ — :1\r\n.
$ redis-cli STRLEN bitmap_keyОжидаемый ответ — :2\r\n.
Примечания
- Достаточно создавать или увеличивать ключ при небольшом смещении; отсутствующий ключ нужно создать. Обрабатывать смещения вне допустимого диапазона не требуется.
STRLENвозвращает длину строки в байтах. Для несуществующего ключаSTRLENвозвращает0.
Проверка в вашей 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 yf6Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.