Проектная лаборатория
Собственный Redis
Этап 113 · Геопространственные команды
Ответ на GEOPOS
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы добавите ответ на команду GEOPOS.
Команда GEOPOS
Команда GEOPOS возвращает долготу и широту указанного местоположения.
Пример:
> GEOADD places -0.0884948 51.506479 "London"
> GEOADD places 11.5030378 48.164271 "Munich"
> GEOPOS places London
1) 1) "-0.08849412202835083"
2) "51.50647814139934"
> GEOPOS places Munich
1) 1) "11.503036916255951"
2) "48.16427086232978"Возвращается массив с одной записью для каждого запрошенного местоположения.
- Если местоположение существует по указанному ключу, запись — массив из двух элементов:
- Долгота в формате bulk string RESP.
- Широта в формате bulk string RESP.
- Если местоположение или ключ отсутствует, соответствующая запись — null-массив
(*-1\r\n).
Чтобы получить широту и долготу, Redis декодирует числовую оценку обратно в координаты. Этот процесс появится позже; пока можно жёстко возвращать 0 или любое другое число для обеих координат.
Проверки
Тестирующая система запустит программу так:
$ ./your_program.shЗатем добавит несколько местоположений командой GEOADD.
$ redis-cli
> GEOADD location_key -0.0884948 51.506479 "London"
# Expect: (integer) 1
> GEOADD location_key 11.5030378 48.164271 "Munich"
# Expect: (integer) 1Далее отправит несколько команд GEOPOS:
> GEOPOS location_key London Munich
# Expecting: [["0", "0"], ["0", "0"]], encoded as "*2\r\n*2\r\n$1\r\n0\r\n$1\r\n0\r\n*2\r\n$1\r\n0\r\n$1\r\n0\r\n"
> GEOPOS location_key missing_location
# Expecting: [nil], encoded as "*1\r\n*-1\r\n"Она проверит, что:
- Ответ — массив RESP с числом элементов, равным числу запрошенных местоположений.
- Для каждого запрошенного местоположения:
- Если оно существует:
- Соответствующий элемент — массив RESP из двух элементов: долготы и широты.
- Оба элемента — "0" или любое другое допустимое число с плавающей точкой, закодированное как bulk string RESP.
- Если оно отсутствует:
- Соответствующий элемент — null-массив
(*-1\r\n).
- Соответствующий элемент — null-массив
- Если оно существует:
Тестирующая система также отправит GEOPOS для несуществующего ключа:
> GEOPOS missing_key London Munich
# Expecting [nil, nil], encoded as "*2\r\n*-1\r\n*-1\r\n"Она проверит, что:
- Ответ — массив RESP с числом элементов, равным числу запрошенных местоположений.
- Каждый элемент — null-массив
(*-1\r\n).
Примечания
- Здесь возвращаемые координаты можно жёстко задать равными 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 xg4Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.