Код Middle Сборка и OTA-обновления обновлено
Выбор совместимого обновления
Условие
Сервер обновлений хранит список updates: { id, runtimeVersion, channel, createdAt, rolloutPercent }. Напишите pickUpdate(updates, client), где client = { runtimeVersion, channel, bucket, currentId }, bucket это число 0..99, закреплённое за устройством. Подходят обновления того же runtimeVersion и канала, у которых bucket < rolloutPercent. Из подходящих выбрать самое новое по createdAt. Вернуть его id, либо null, если подходящих нет или самое новое уже установлено (currentId).
Примеры
pickUpdate([{"id":"u1","runtimeVersion":"1.0","channel":"production","createdAt":1,"rolloutPercent":100}], {"runtimeVersion":"1.0","channel":"production","bucket":50,"currentId":null}) // "u1"
pickUpdate([{"id":"u1","runtimeVersion":"1.0","channel":"production","createdAt":1,"rolloutPercent":100}, {"id":"u2","runtimeVersion":"1.0","channel":"production","createdAt":2,"rolloutPercent":100}], {"runtimeVersion":"1.0","channel":"production","bucket":0,"currentId":"u1"}) // "u2"
pickUpdate([{"id":"u3","runtimeVersion":"2.0","channel":"production","createdAt":5,"rolloutPercent":100}], {"runtimeVersion":"1.0","channel":"production","bucket":0,"currentId":null}) // null
Как подойти
Подсказки: 2
- Отфильтруйте по трём условиям, затем возьмите максимум по
createdAt. - Не забудьте сравнить результат с
currentId.
Решите в тренажёре
Редактор с автотестами прямо в браузере. Можно решить спокойно, вслух или под таймером, как на собесе.