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