Приёмка запасов
Часть раздела Логика и управление потоком путешествия по Kotlin на Coddy. Урок 56 из 63.
Создайте программу Inventory, которая принимает и продаёт товары, проверяет количество и формирует отчёты. Каждый этап расширяет один и тот же обработчик команд. Разбирайте поля команды, проверяйте количество до изменения карты и возвращайте один ответ на каждую команду. Некорректный ввод не должен изменять запасы.
val fields = "ADD|pen|3".split("|")Задание
СложноЗавершите 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))
}Все уроки раздела Логика и управление потоком
1Карты, часть 1
Создание картБезопасный доступ к картамОбновление картПроверка ключейПовторение — складской учёт4Вложенные коллекции
Списки списковОбход строкСводки по строкамСведение вложенных списковПовторение — ряды мест7Конвейеры коллекций
Преобразование с помощью MapФильтрация значенийПроверка правил коллекцийНакопление с помощью FoldПовторение — одобренные итоги2Карты. Часть 2
Перебор записей картыКлючи и значенияКарты частотВложенные картыПовторение — отчёт о частотах5Проект — Книга контактов
Сохранение контактовПоиск контактов3Множества и принадлежность
Создание множествОбновление множествОперации над множествамиПроверка подмножествПовторение — гости мероприятия6Значения функций
Написание лямбдТипы функцийПередача функцийЗахваченные переменныеПовторение — настраиваемый счёт9Расширенный контроль потока выполнения
Защитные условияПрерывание именованных цикловПродолжение именованных цикловРекурсивные функцииПовторение — первая допустимая строка12Проект — Учёт запасов
Приёмка запасовПроверка запасовПотренируйтесь самостоятельно: Песочница Kotlin