Custos de recursos da rede elétrica
Introdução
No jogo de tabuleiro Power Grid , parte integrante do jogo é o ato de comprar recursos para alimentar suas centrais elétricas. Existem quatro tipos de recursos usados no jogo (cinco, se você incluir energia renovável, mas obviamente não poderá comprar recursos para isso). São carvão, óleo, lixo e urânio. O mercado de recursos fica assim:
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
Quando os recursos são comprados, eles são retirados da esquerda do mercado, onde são mais baratos. Quando novos recursos são adicionados ao mercado, eles são adicionados à direita. Como pode ser visto, isso produz um equilíbrio de oferta e demanda - se mais recursos de um tipo específico estiverem sendo comprados do que reabastecidos a cada rodada, o preço desse recurso aumentará. Da mesma forma, se for menor, o custo será reduzido.
Carvão, petróleo e lixo aumentam de custo na mesma proporção, enquanto o urânio aumenta muito mais rapidamente. Uma única unidade de um recurso que não seja de urânio custa 8 - floor((<units available> - 1) / 3). Uma única unidade de urânio custa 13 - <units available>se houver 5 ou mais unidades disponíveis, 18 - (2 * <units available>)caso contrário.
Por exemplo, no início do jogo, existem todas as 24 unidades de carvão disponíveis para compra. Se o primeiro jogador gostaria de comprar 4 unidades de carvão, as três primeiras unidades custariam 1 cada e a quarta custaria 2, tornando o custo total 5. Isso deixa 20 unidades disponíveis. Se o segundo jogador também quiser comprar 4 unidades de carvão, o custo será (2 * 2 + 2 * 3) = 10.
O desafio
Seu desafio é escrever um programa ou função que calcule o custo da compra de uma determinada quantidade de um recurso específico, assumindo que exista uma quantidade específica desse recurso presente no mercado.
Seu envio deve aceitar, em qualquer formato de entrada razoável e em qualquer ordem, os seguintes parâmetros:
- O tipo de recurso - garantido como um de [C, O, G, U].
- A quantidade desse recurso que está presente no mercado - garantida como um número inteiro não negativo. Se o tipo de recurso não for U, não será maior que 24. Se o tipo de recurso for U, não será maior que 12.
- A quantidade desse recurso que um jogador gostaria de comprar - garantida como um número inteiro não negativo que é menor ou igual à quantidade já presente no mercado.
A saída deve ser o custo dos recursos solicitados.
Regras adicionais
- As fórmulas fornecidas são apenas para fins ilustrativos; sinta-se à vontade para usar qualquer método de cálculo dos custos que desejar.
- Os códigos de letras para os diferentes tipos de recursos (C, O, G, U) podem ser substituídos por seus equivalentes em minúsculas. Você também pode substituir as letras por números, no formato
C=0, O=1, G=2, U=3ouC=1, O=2, G=3, U=4. - Isso é código-golfe , então o menor envio em bytes será o vencedor.
- Se o seu envio exigir a entrada em um pedido ou formato diferente do especificado na seção anterior, você deverá fornecer detalhes.
Casos de teste
Formato do caso de teste:
resource type, amount in market, amount to buy
> result
Casos de teste:
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) = 22e f(O, 10, 7) = 44.

f("O",1,5)?