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