Costos de recursos de la red eléctrica
Introducción
En el juego de mesa Power Grid , una parte integral del juego es el acto de comprar recursos para alimentar tus estaciones de energía. Hay cuatro tipos de recursos utilizados en el juego (cinco, si incluye energía renovable, pero obviamente no puede comprar recursos para eso). Estos son carbón, aceite, basura y uranio. El mercado de recursos se ve así:
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
Cuando se compran recursos, se toman de la izquierda del mercado, donde son más baratos. Cuando se agregan nuevos recursos al mercado, se agregan desde la derecha. Como puede verse, esto produce un equilibrio entre la oferta y la demanda: si se compran más recursos de un tipo particular de los que se reponen en cada ronda, el precio de ese recurso aumentará. Del mismo modo, si es menor, el costo se reducirá.
El carbón, el petróleo y la basura aumentan su costo a la misma velocidad, mientras que el uranio aumenta mucho más rápido. Una sola unidad de un recurso que no sea de uranio cuesta 8 - floor((<units available> - 1) / 3)
. Una sola unidad de uranio cuesta 13 - <units available>
si hay 5 o más unidades disponibles, y de lo 18 - (2 * <units available>)
contrario.
Por ejemplo, al comienzo del juego hay 24 unidades de carbón disponibles para comprar. Si el primer jugador quisiera comprar 4 unidades de Carbón, las primeras tres unidades costarían 1 cada una, y la cuarta costaría 2, lo que hace que el costo total sea 5. Esto deja 20 unidades disponibles. Si el segundo jugador también quisiera comprar 4 unidades de Carbón, el costo sería (2 * 2 + 2 * 3) = 10.
El reto
Su desafío es escribir un programa o función que calcule el costo de comprar una cantidad determinada de un recurso en particular, suponiendo que haya una cantidad determinada de ese recurso presente en el mercado.
Su envío debe aceptar, en cualquier formato de entrada razonable y en cualquier orden, los siguientes parámetros:
- El tipo de recurso: garantizado como uno de [C, O, G, U].
- La cantidad de ese recurso que está presente en el mercado, garantizada como un número entero no negativo. Si el tipo de recurso no es U, no será mayor que 24. Si el tipo de recurso es U, no será mayor que 12.
- La cantidad de ese recurso que un jugador le gustaría comprar, garantizado como un número entero no negativo que es menor o igual a la cantidad ya presente en el mercado.
El resultado debe ser el costo de los recursos solicitados.
Reglas Adicionales
- Las fórmulas proporcionadas son solo para fines ilustrativos, no dude en utilizar cualquier método para calcular los costos que desee.
- Los códigos de letras para los diferentes tipos de recursos (C, O, G, U) pueden reemplazarse por sus equivalentes en minúsculas. También puede reemplazar las letras por números, ya sea en el formulario
C=0, O=1, G=2, U=3
oC=1, O=2, G=3, U=4
. - Este es el código de golf , por lo que el envío más pequeño en bytes será el ganador.
- Si su envío requiere la entrada en un orden o formato diferente al especificado en la sección anterior, debe proporcionar detalles.
Casos de prueba
Formato de caso de prueba:
resource type, amount in market, amount to buy
> result
Casos de prueba:
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("O",1,5)
?f(G, 11, 4) = 22
yf(O, 10, 7) = 44
.Respuestas:
Javascript (ES6),
7159 bytesToma
type
,market_amount
ybuy_amount
como argumentos.type
es un entero entre 0 y 3.Manifestación
Mostrar fragmento de código
fuente
Python 3,
7169 bytesGracias a @xnor por -2 bytes
Una función que toma información a través del argumento del tipo de recurso indexado a cero
r
, la cantidad disponiblea
y la cantidad a comprarb
, y devuelve el costo.Esto hace uso del hecho de que
True
eFalse
iguala1
y0
en Python, permitiendo el uso de expresiones booleanas para indexar en listas.Cómo funciona
Pruébalo en Ideone
fuente
max(18-2*a,13-a)
en lugar de[18-2*a,13-a][a>4]
.Befunge, 142 bytes
Pruébalo aquí! Toma la entrada como 3 enteros, donde el tipo de recurso es 0,1,2,3. La salida es un entero.
No tengo idea si esto se puede jugar mejor. No hay mucho espacio en blanco, pero las nuevas líneas probablemente duelen.
fuente
Python 2.7, 85 bytes:
Según la respuesta de R. Kap, pero puede reducir un byte a 85 eliminando la división extra / para piso. Debido a que todos estos son números enteros, se reduce automáticamente a un número entero.
fuente
Python 2.7, 86 bytes:
Toma información de una matriz en el formato
[resource type, units available, units to purchase]
. La salida es un entero. Intentará jugar más al golf con el tiempo.¡Pruébelo en línea! (Ideona)
fuente
Lua,
107101 BytesFunción recursiva a la que hay que llamar
f(resource,stock,buy)
. El recurso debe ser un número entre 0 y 3. La salida se realiza a través del valor devuelto.Gracias LeakyNun por salvarme 6 bytes:
(25-y+(y-1)%3)/3
es más corto que8-math.floor((y-1)/3)
5 bytes y me permite obtener un byte más debido a su ubicación.Sin golf
Puede probar este código en línea copiando y pegando el siguiente fragmento.
fuente
6and
no funcionará porque6a
es un valor hexadecimal, pero6an
no lo es.8-math.floor((y-1)/3)
es realmente(25-y+(y-1)%3)/3