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

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

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

Этап 95 · Упорядоченные множества

Получение элементов упорядоченного множества

Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.

На этом этапе вы добавите получение элементов упорядоченного множества командой ZRANGE.

Команда ZRANGE

ZRANGE возвращает элементы упорядоченного множества по начальному и конечному индексам. Индекс первого элемента — 0. Конечная граница включена: элемент с конечным индексом входит в ответ.

Пример:

> ZADD racer_scores 8.1 "Sam-Bodden"
(integer) 1
> ZADD racer_scores 10.2 "Royce"
(integer) 1
> ZADD racer_scores 6.0 "Ford"
(integer) 1
> ZADD racer_scores 14.1 "Prickett"
(integer) 1
 
# List members from index 0 to 2
> ZRANGE racer_scores 0 2
1) "Ford"
2) "Sam-Bodden"
3) "Royce"

Особенности поведения ZRANGE для разных входных данных:

  • Если множества нет, возвращается пустой массив (*0\r\n).
  • Если начальный индекс больше либо равен мощности множества, возвращается пустой массив.
  • Если конечный индекс больше мощности множества, он трактуется как индекс последнего элемента.
  • Если начальный индекс больше конечного, результат — пустой массив.

Тесты

Тестирующая программа запустит вашу программу так:

$ ./your_program.sh

Затем создаст упорядоченное множество с несколькими элементами.

$ redis-cli
> ZADD zset_key 100.0 foo (Expecting ":1\r\n")
> ZADD zset_key 100.0 bar (Expecting ":1\r\n")
> ZADD zset_key 20.0 baz (Expecting ":1\r\n")
> ZADD zset_key 30.1 caz (Expecting ":1\r\n")
> ZADD zset_key 40.2 paz (Expecting ":1\r\n")

После этого отправит серию ZRANGE. Для каждой команды ожидается массив RESP либо пустой массив в зависимости от случая.

Например, тест может отправить:

> ZRANGE zset_key 2 4
# Expect RESP Encoded Array: ["paz", "bar", "foo"]

Ожидается массив ["paz", "bar", "foo"] в RESP, который выглядит так:

*3\r\n
$3\r\n
paz\r\n
$3\r\n
bar\r\n
$3\r\n
foo\r\n

Тест отправит несколько таких команд и проверит ответы.

Примечания

  • Пока нужно реализовать ZRANGE только с неотрицательными индексами. Поддержка ZRANGE с отрицательными индексами появится позже.

Проверка в вашей 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 ic1

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

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

go / ЛОКАЛЬНО

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

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

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

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