Затраты ресурсов энергосистемы
Вступление
В настольной игре Power Grid неотъемлемой частью игры является покупка ресурсов для питания ваших электростанций. В игре используются четыре типа ресурсов (пять, если вы используете возобновляемую энергию, но, очевидно, вы не можете купить ресурсы для этого). Это уголь, нефть, мусор и уран. Рынок ресурсов выглядит так:
1---- | 2---- | 3---- | 4---- | 5---- | 6---- | 7---- | 8---- | 10 | 12
CCC | CCC | CCC | CCC | CCC | CCC | CCC | CCC | U | U
OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | OOO U | 14 | 16
GGG | GGG | GGG | GGG | GGG | GGG | GGG | GGG | U | U
Когда ресурсы покупаются, они берутся с левой стороны рынка, где они самые дешевые. Когда новые ресурсы добавляются на рынок, они добавляются справа. Как видно, это приводит к балансу спроса и предложения - если покупается больше ресурсов определенного типа, чем пополняется каждый раунд, цена этого ресурса будет расти. Точно так же, если это меньше, стоимость уменьшится.
Стоимость угля, нефти и мусора увеличивается с одинаковой скоростью, а уран - быстрее. Одна единица неранового ресурса стоит 8 - floor((<units available> - 1) / 3). Одна урановая единица стоит, 13 - <units available>если доступно 5 и более единиц, и так далее 18 - (2 * <units available>).
Например, в начале игры все 24 единицы угля доступны для покупки. Если первый игрок захочет купить 4 единицы угля, первые три единицы будут стоить 1 каждая, а четвертая будет стоить 2, в результате чего общая стоимость составит 5. Это оставляет 20 доступных единиц. Если второй игрок также захочет купить 4 единицы угля, стоимость будет (2 * 2 + 2 * 3) = 10.
Соревнование
Ваша задача состоит в том, чтобы написать программу или функцию, которая рассчитывает стоимость покупки определенного количества определенного ресурса, исходя из того, что на рынке имеется определенное количество этого ресурса.
Ваша заявка должна принимать в любом разумном формате ввода и в любом порядке следующие параметры:
- Тип ресурса - гарантированно один из [C, O, G, U].
- Количество того ресурса, который присутствует на рынке - гарантированно будет неотрицательным целым числом. Если тип ресурса не U, он не будет больше 24. Если тип ресурса U, он не будет больше 12.
- Количество этого ресурса, которое игрок хотел бы купить - гарантированно будет неотрицательным целым числом, которое меньше или равно количеству, уже присутствующему на рынке.
На выходе должна быть стоимость запрошенных ресурсов.
Дополнительные правила
- Приведенные формулы приведены только в иллюстративных целях, не стесняйтесь использовать любой метод расчета затрат, которые вам нравятся.
- Буквенные коды для различных типов ресурсов (C, O, G, U) могут быть заменены их строчными эквивалентами. Вы также можете заменить буквы на цифры, либо в форме,
C=0, O=1, G=2, U=3либоC=1, O=2, G=3, U=4. - Это код-гольф , поэтому наименьшее количество байтов будет победителем.
- Если ваша заявка требует ввода в другом порядке или формате, чем указано в предыдущем разделе, вы должны предоставить подробности.
Контрольные примеры
Формат теста:
resource type, amount in market, amount to buy
> result
Тестовые случаи:
C, 24, 4
> 5
C, 20, 4
> 10
O, 3, 3
> 24
U, 1, 1
> 16
C, 1, 1
> 8
G, 0, 0
> 0
O, 10, 7
> 44
U, 12, 4
> 10
G, 11, 4
> 22
f(G, 11, 4) = 22и f(O, 10, 7) = 44.

f("O",1,5)?