在棋盘游戏电网中,游戏的一个组成部分就是购买资源来为你的发电站加油。游戏中使用了四种资源(五种,如果包括可再生能源,但显然你不能为此购买资源)。这些是煤,石油,垃圾和铀。资源市场的情况如下:
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)
。如果有5个或更多可用的铀单位,一个单位的铀成本为13 - <units available>
,而18 - (2 * <units available>)
则不然。
例如,在游戏开始的时候,所有24台煤都可以买到。如果第一位玩家想买4台煤,前三台的价格是1台,第4台的价格是2台,所以总成本是5台。这就剩下20台了。如果第二个玩家也想购买4个单位的煤,成本是(2*2 + 2*3) = 10。
挑战
您的挑战是编写一个程序或函数来计算购买某一特定资源的给定数量的成本,假设市场上存在该资源的给定数量。
你提交的材料应以任何合理的输入格式和顺序接受下列参数:
产出应是所需资源的费用。
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
发布于 2016-07-13 01:49:07
&2`#v_&&>:!#v_\:1-3/8\-v
v:&&< ^-1\ -1p15+g15 <
v>#<v <
! v5<
# 1:
>^g-
| 81
\ 4\
: *-
4 -1
` .p
# @^15+g15<
>:49+\- ^
|
>:2*92*\- ^
在这里试试!将输入作为3个整数,其中资源类型为0、1、2、3。输出为整数。
不知道这能不能打得更好。空格不多,但换行符可能很伤人。
发布于 2018-01-17 20:55:14
F,G,H=input();B=0;exec"B+=[[18-(2*G),13-G][G>5],8-((G-1)/3)][F!='U'];G-=1;"*H;print B
根据R. Kap的答案,但是您可以通过删除额外的/用于地板分割,将一个字节减少到85。因为这些都是整数,所以它会自动下降到整数。
发布于 2016-07-12 23:31:49
F,G,H=input();B=0;exec"B+=[[18-(2*G),13-G][G>5],8-((G-1)//3)][F!='U'];G-=1;"*H;print B
以[resource type, units available, units to purchase]
格式接受数组的输入。输出是一个整数。会随着时间的推移尝试更多的高尔夫。
在网上试试!(Ideone)
https://codegolf.stackexchange.com/questions/85234
复制相似问题