Kotlin · 31 строк
Заказ хранится бесплатно 7 дней, день поступления считается первым: пришёл 1-го — бесплатно до 7-го включительно, с 8-го — 10 ₽ в сутки. После срока заказ уезжает обратно продавцу.
ПВЗ есть от Калининграда до Хабаровска, arrivedAt хранится как Instant. Отметьте строки с ошибками.
В работе: SMS «заказ ждёт вас до …» и ночная задача, которая отправляет непрошенные заказы на возврат.
Как проверяем
Нажмите на строку с ошибкой и коротко напишите, что не так. Баг засчитан, если отмечена хотя бы одна его строка. Зачёт — найдено не меньше 60 % багов с учётом серьёзности (критичный весит 3, обычный 2, мелкий 1), а лишних отметок не больше, чем багов в коде. Пустые строки, скобки и комментарии лишними не считаем. Ответ один на подход: после него показываем разбор.
Источник: на задачах Wildberries: хранение заказов в пунктах выдачи. Условие пересказано своими словами.
Давали на собеседовании?
Ответов пока мало — ваш поможет.
data class Parcel(val id: Long, val arrivedAt: Instant, var issued: Boolean)object StoragePolicy {const val FREE_DAYS = 7const val FEE_PER_DAY_KOP = 1000Lprivate fun arrivalDay(p: Parcel): LocalDate = p.arrivedAt.atZone(ZoneOffset.UTC).toLocalDate()fun lastFreeDay(p: Parcel): LocalDate = arrivalDay(p).plusDays(FREE_DAYS.toLong())fun storageFeeKop(p: Parcel, today: LocalDate): Long {val days = ChronoUnit.DAYS.between(arrivalDay(p), today)if (days < FREE_DAYS) return 0val paidDays = days - FREE_DAYS + 1return paidDays * FEE_PER_DAY_KOP}fun expired(parcels: List<Parcel>, today: LocalDate): List<Parcel> {val result = mutableListOf<Parcel>()for (p in parcels) {if (today.isAfter(lastFreeDay(p)) && !p.issued) result.add(p)if (result.size == 50) break}return result}fun smsText(p: Parcel, phone: String): String {Log.i("Storage", "SMS to $phone about parcel ${p.id}")return "Заказ ${p.id} ждёт вас до ${lastFreeDay(p)}"}}