Задача
Создайте консольную программу для оценки общей стоимости поездки и суммы на одного участника. Входные данные задаются аргументами командной строки: расстояние в километрах, расход топлива в литрах на 100 км, цена литра топлива в рублях, число участников, число ночёвок, цена одной ночи проживания за номер, число дней питания и стоимость питания на одного человека в день. Обязательные флаги: --distance, --consumption, --fuel-price, --people, --nights, --lodging-per-night, --days, --meal-per-person-day. Все числовые значения вводятся десятичными числами, кроме количества людей, ночёвок и дней, которые должны быть целыми.
Расход топлива равен расстоянию, умноженному на расход и делённому на 100. Стоимость топлива умножается на цену литра. Проживание считается за поездку целиком и оплачивается одним номером на ночь; программа не должна домножать его на число участников. Питание считается отдельно для каждого человека за каждый день. Общая стоимость — сумма трёх категорий; доля участника — общая стоимость, делённая на число людей. Округляйте каждую денежную категорию до копейки после расчёта, затем складывайте округлённые категории; долю участника также округляйте до копейки. Для неотрицательных значений половина копейки округляется вверх. Выведите понятную таблицу топлива, проживания, питания, общей суммы и суммы на человека.
Отклоняйте отсутствующий обязательный флаг, нечисловое значение, NaN, бесконечность, отрицательное расстояние, расход, цену, число ночёвок или дней, а также число участников меньше единицы. Нулевое расстояние допустимо. Нулевые ночёвки и дни допустимы и дают нулевые расходы соответствующей категории. При любой ошибке выведите сообщение в stderr, завершите процесс с ненулевым кодом и не печатайте частичный отчёт. Используйте только стандартную библиотеку Go, не обращайтесь к сети и не сохраняйте данные между запусками.
Структура программы
В main.go оставьте разбор флагов, вызовом расчёта и обработкой ошибки. В отдельном файле package main разместите функцию стоимости поездки: она принимает значения поездки и возвращает категории расходов и долю участника, не читая аргументы и не печатая результат. Форматирование отчёта тоже вынесите в отдельную функцию.