Menu
Coddy logo textTech

Приёмка запасов

Часть раздела Логика и управление потоком путешествия по Kotlin на Coddy. Урок 56 из 63.

Создайте программу Inventory, которая принимает и продаёт товары, проверяет количество и формирует отчёты. Каждый этап расширяет один и тот же обработчик команд. Разбирайте поля команды, проверяйте количество до изменения карты и возвращайте один ответ на каждую команду. Некорректный ввод не должен изменять запасы.

val fields = "ADD|pen|3".split("|")
challenge icon

Задание

Сложно

Завершите runInventory с параметром commands: List<String>. Создайте инвентарь, который начинается пустым при каждом вызове функции. Каждая команда представляет собой одну строку с полями, разделёнными с помощью |. Имена товаров — слова в нижнем регистре, содержащие только ASCII-символы. Всего может быть не более 100 команд. Разделяйте каждую команду по указанному разделителю; команды всегда содержат правильное количество полей для своей операции. Верните один ответ для каждой команды. Перед разбором количества удаляются пробелы; допустимые значения находятся в диапазоне от 0 до 1000. Некорректный числовой текст, текст со значением вне диапазона Int, отрицательные количества или количества больше 1000 должны приводить к результату invalid без изменения состояния. Поддержите ADD|item|quantity: добавляйте допустимое количество к запасу этого товара, изначально равному нулю, и возвращайте ответ added. Добавление нуля также создаёт товар. На этом этапе во входных данных используются только поддерживаемые операции.

Если выше не указаны более строгие ограничения, коллекции содержат не более 100 элементов на каждом уровне, а целочисленные аргументы и целочисленные значения коллекций находятся в диапазоне от -1000 до 1000. Текст, передаваемый для разбора, может содержать некорректные представления или представления со значениями вне диапазона, как описано выше.

Верните значение типа List<String>. Сохраните предоставленный код ввода/вывода. Он считывает скалярные аргументы по одному в строке; список начинается с его размера, за которым следуют его элементы, а map начинается с количества записей, за которым следуют каждый ключ и значение. Вложенные списки повторяют формат «размер и элементы» для каждой строки. Предоставленный main выводит возвращаемое значение, за которым следует один перевод строки. Для списков используется стандартный формат Kotlin со скобками; не выводите никаких дополнительных меток.

Попробуйте сами

fun runInventory(commands: List<String>): List<String> {
    // Напишите ваше решение здесь.
    return emptyList()
}
fun main() {
    val commandsCount = readln().toInt()
    val commands = mutableListOf<String>()
    for (i0 in 0 until commandsCount) {
        val commandsItem = readLine().orEmpty()
        commands.add(commandsItem)
    }
    println(runInventory(commands))
}

Все уроки раздела Логика и управление потоком

Потренируйтесь самостоятельно: Песочница Kotlin