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

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

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

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

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

cd ./my-redis

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

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

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

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

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

go / ЛОКАЛЬНО

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

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

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

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