首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >电网资源成本

电网资源成本
EN

Code Golf用户
提问于 2016-07-12 11:31:26
回答 3查看 486关注 0票数 14

电网资源成本

Introduction

在棋盘游戏电网中,游戏的一个组成部分就是购买资源来为你的发电站加油。游戏中使用了四种资源(五种,如果包括可再生能源,但显然你不能为此购买资源)。这些是煤,石油,垃圾和铀。资源市场的情况如下:

代码语言:javascript
运行
复制
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,O,G,U之一。
  • 在市场上存在的资源的数量-保证是一个非负整数.如果资源类型不是U,则它不会大于24。如果资源类型为U,则不大于12。
  • 玩家想要购买的资源的数量--保证是一个非负整数,小于或等于市场上已经存在的数量。

产出应是所需资源的费用。

附加规则

  • 给出的公式仅用于说明性目的,请随意使用任何计算您喜欢的成本的方法。
  • 不同资源类型(C、O、G、U)的字母代码可替换为它们的小写等价物。您也可以用C=0, O=1, G=2, U=3C=1, O=2, G=3, U=4的形式替换数字的字母。
  • 这是密码-高尔夫,所以以字节为单位的最小提交将是赢家。
  • 如果您的提交要求输入的顺序或格式与上一节中指定的不同,则应提供详细信息。

测试用例

测试用例格式:

代码语言:javascript
运行
复制
resource type, amount in market, amount to buy
> result

测试用例:

代码语言:javascript
运行
复制
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
EN

回答 3

Code Golf用户

发布于 2016-07-13 01:49:07

Befunge,142个字节

代码语言:javascript
运行
复制
&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。输出为整数。

不知道这能不能打得更好。空格不多,但换行符可能很伤人。

票数 3
EN

Code Golf用户

发布于 2018-01-17 20:55:14

Python2.7,85个字节:

代码语言:javascript
运行
复制
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。因为这些都是整数,所以它会自动下降到整数。

票数 3
EN

Code Golf用户

发布于 2016-07-12 23:31:49

Python2.7,86个字节:

代码语言:javascript
运行
复制
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)

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/85234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档