TypeScript · 32 строк
Цена доставки до ПВЗ: база по зоне плюс 25 ₽ за каждый начатый килограмм. Килограммы считаются по большему из двух весов: фактический или объёмный (Д × Ш × В / 5000). Регионы, которых нет в таблице, — зона region.
Корзина от 1 500 ₽ включительно — доставка бесплатно, страховка 0,5 % от объявленной ценности платится всегда. Отметьте строки с ошибками.
В работе: Стоимость доставки в корзине до оформления заказа.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: наша задача на данных Wildberries: доставка до пункта выдачи. Условие пересказано своими словами.
Давали на собеседовании?
type Zone = "msk" | "spb" | "region" | "far";interface Parcel {weightGrams: number;lengthCm: number;widthCm: number;heightCm: number;declaredValue: number; // рубли}const BASE: Record<Zone, number> = { msk: 99, spb: 99, region: 149, far: 299 };const PER_KG = 25;const FREE_FROM = 1500;const zoneByRegion: Record<string, Zone> = {"77": "msk", "50": "msk", "78": "spb", "47": "spb","25": "far", "41": "far", "65": "far", "87": "far",};export function deliveryPrice(parcel: Parcel, regionCode: string, cartTotal: number): number {const zone = zoneByRegion[regionCode];const volumeKg = (parcel.lengthCm * parcel.widthCm * parcel.heightCm) / 5000;const realKg = parcel.weightGrams / 1000;const heavier = Math.min(volumeKg, realKg);const billedKg = Math.round(heavier);let price = BASE[zone] + billedKg * PER_KG;if (cartTotal > FREE_FROM) {price = 0;}const insurance = parcel.declaredValue * 0.005;return price + insurance;}