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

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

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

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

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

cd ./my-redis

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

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

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

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

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

go / ЛОКАЛЬНО

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

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

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

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