Витрати на ресурси сітки живлення
Вступ
У настільній грі 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 кожній, а 4-й коштував 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)?