这是来自中-南方节目比赛2018年年的CC-BY SA挑战.
作者(S):布伦特·约尔盖
资料来源:2018年中南编程竞赛大学计算科学联合会。
https://ccsc18.kattis.com/problems/ccsc18.mountainrange
好消息:你被雇来为一部电影做所有的特效!其中一个场景将发生在外面,在一个被风吹过的平原上,背景是一座高耸的山脉。您的工作是将对山脉的描述转换为呈现的图像。坏消息是:电影制片人的预算非常小,所以他们买不起像渲染的3D图像这样由像素组成的奢侈品。因此,您将使您的形象ASCII字符。
根据下面的规范编写一个函数或完整的程序来制作山脉ASCII艺术。这是密码-高尔夫,平局是较早提交的。
您将收到PPCG和/或您的语言的任何标准输入格式的5元组列表。每个5元组的值(x,h,z,t,s)代表你所画范围的一座山。
Y。*。每座山的底部水平延伸不会超过0或200;您可以假设0≤x−h和−。每座山的高度不超过100,所以所有的山脉都可以在100×200格栅内。雪和树不会重叠或超过山的高度;你可以假设0≤t≤s≤h。所有的数字都是非负的,所有的z值都是唯一的。
输出应由指定山脉的ASCII绘图组成。每座山的形状都是三角形的,其两侧使用/和\字符绘制。例如,这里有一座海拔4度的山:
/\
/ \
/ \
/ \这座山的x坐标为4,因为从左缘到山顶的水平距离是4个单位。
树和雪应该填满山的内部,但不能遮掩山的两侧。例如,这里有一座高度为6,树高2,雪线高度3的山:
/\
/**\
/****\
/ \
/YYYYYYYY\
/YYYYYYYYYY\也就是说,树从山的底部延伸到两个单位的高度,雪从三个单位的高度开始,延伸到山顶。
具有较小z坐标的山脉可能隐藏具有较大z坐标的全部或部分山区,请参见下面的第三个示例输入/输出。
前导空格很重要,并应按绘制的山脉的x位置和宽度指定。允许前导/尾随换行符,以及每一行后面的任何空格。
(8、5、1、2、3)
/\
/**\
/ \
/YYYYYY\
/YYYYYYYY\(2、2、1、0、1)
/\
/ \(8、5、2、2、3)、(2、2、1、0、1)、(9、8、3、1、4)、(17、4、4、4)
/\
/**\
/****\
/*/\***\
/ /**\ \ /\
/ / \ \/YY\
/\ /YYYYYY\ \YYY\
/ \YYYYYYYY\YYY\YYY\如果你发现其他有趣的例子,请分享你的答案!
发布于 2018-04-17 21:15:34
发布于 2018-04-18 10:39:55
->a{r=[];a.sort_by{|x|-x[2]}.map{|x,h,z,t,s|h.times{|i|(r[i]||=?\s*200)[x-j=h-i,j*2]=?/+" Y*"[i<t ?1:i<s ?0:2]*~-j*2+?\\}};r.reverse}匿名兰博达。将输入作为山脉参数数组的数组,返回字符串数组。
->a{ #Input array is a
r=[]; #Initialize the output array
a.sort_by{|x|-x[2]} #Sort by decreasing distance
.map{|x,h,z,t,s| #Loop through the mountains
h.times{|i| #For each mountain fill h lines starting from the ground
(r[i]||=?\s*200) #If we haven't yet been so high, initialize with spaces
[x-j=h-i,j*2]= #Take a slice from x-(h-i) for double length of h-i
?/+" Y*"[i<t ?1:i<s ?0:2]*~-j*2+?\\ #Draw the sides of the mountain (/\),
} #with (h-i-1)*2 of the appropriately selected filler symbols in the middle
};r.reverse #Reverse to the top->bottom order suitable for printing
}https://codegolf.stackexchange.com/questions/162447
复制相似问题