我们正在生长的树木有一些规则来定义它们的生长方式:
成长规则:
- 树木仅由树枝组成。
- 分支是由以下的符号的组合组成:
_
,\
,|
,/
,和_
一棵树从
|
地面(_
)上的单个垂直分支/树干()开始:__________________|___________________
树枝生长的食物来自光线。
- 光线在天空中的每个点以2的强度开始并向下直线传播。
- 每个分支都能吃掉一半的光,其余的则直达较低的分支。
- 因此,一个分支上没有其他分支的分支每个季节将获得1单位的清淡食物,一个分支上具有1个分支的分支每个季节将获得0.5单位的食物,并且通常情况下,分支上具有n个分支的分支将获得每个季节1 /(2 ^ n)单位食物。
- 在每个季节结束时,食物从树干开始一直向上移动并转化为新的分支和果实(应用以下规则,直到分支变成果实或剩余的食物少于1单位):
- 如果一个分支在一个季节结束时的食物少于1个单位,则该分支的所有食物都存储在该分支中,直到下一个季节。
- 如果分支的食物量大于或等于1个单位并且具有增长空间,则它会使用可用的生长方式(请参见下文)随机生长一个新分支,并存储下一季的剩余食物。
- 如果分支的食物数量大于等于1,无处生长,并且分支分支,则将食物平均分配到分支分支
- 如果分支机构的食物数量大于等于1,并且无处生长且没有分支分支,则该分支机构将变为果实(以表示
O
)
- 这是可能的增长配置
增长配置:
_ \ | / _ _ \ | / \ | / _
| | | | | \ \ \ \ / / / / __ \_ |_ _| _/ __
--- Vertical Branches --- --- Diagonal Branches --- --- Horizontal Branches ---
潜力树示例:
\
/ /
\/O |___//
\_/ \//O\_/
\__/|\|_/
\|/
__________________|__________________
输入:
您的程序应该能够将您要查看的树的快照列表作为输入。例如[10,20,50]表示您想在10个季节,20个季节和50个季节之后看到树。
输出:
对于每个输入季节,您的程序应输出季节,然后输出该季节的树的图片。如果有帮助,您可以为树定义最大年龄,例如60,这样一棵树的最大高度将为61,最大宽度将为121,然后始终以该比例显示树。否则,可以随意将图像缩放到任何大小的树。例如,如果输入为[0,1,2,3],则您的输出可能为:
Season 0:
_|_
Season 1:
\
__|__
Season 2:
_
\|
___|___
Season 3:
|_/ _
\|
____|___
优胜者
每个解决方案都必须发布输入为的编码器最喜欢的程序的输出[10,40]
以及其源代码。同样,必须满足所有上述所有条件才能有资格。
获胜者将是票数最高的预选赛。
祝你好运,快乐种植!!!
似乎没有定义“增长的空间”。
—
彼得·泰勒
我认为标签“代码挑战”和“代码高尔夫”不能很好地融合在一起(“除代码大小以外的客观标准”与“源代码的最小字节数”)。
—
霍华德
@Peter Taylor:要查看是否有增长空间,您必须首先检查该分支类型的增长配置(例如,垂直分支可以向左,向上和向右移动),然后查看是否有这些空间是空的。如果是这样,则存在增长空间。
—
Briguy37 2011年
@霍华德:是的,我在想同样的事情,但不确定。我认为这绝对比我在这里看到的大多数问题更具挑战性,因此我绝对希望“代码挑战”。但是,如果有多种解决方案,我想要一种确定明确的赢家的方法。上面的计分方法优先于原子代码高尔夫计分,因此原子代码高尔夫分数实际上主要是平局。我将它留给人们:如果霍华德的评论比该评论更具投票权,那么对高尔夫的要求就会动摇。
—
Briguy37 2011年