首页
学习
活动
专区
圈层
工具
发布

ASCII山脉
EN

Code Golf用户
提问于 2018-04-16 16:09:39
回答 2查看 1.4K关注 0票数 6

这是来自中-南方节目比赛2018年年的CC-BY SA挑战.

作者(S):布伦特·约尔盖

资料来源:2018年中南编程竞赛大学计算科学联合会。

https://ccsc18.kattis.com/problems/ccsc18.mountainrange

好消息:你被雇来为一部电影做所有的特效!其中一个场景将发生在外面,在一个被风吹过的平原上,背景是一座高耸的山脉。您的工作是将对山脉的描述转换为呈现的图像。坏消息是:电影制片人的预算非常小,所以他们买不起像渲染的3D图像这样由像素组成的奢侈品。因此,您将使您的形象ASCII字符。

根据下面的规范编写一个函数或完整的程序来制作山脉ASCII艺术。这是密码-高尔夫,平局是较早提交的。

输入

您将收到PPCG和/或您的语言的任何标准输入格式的5元组列表。每个5元组的值(x,h,z,t,s)代表你所画范围的一座山。

  • X是山峰的x坐标,有1≤x≤199.
  • H是山的高度,有1≤h≤100。
  • z表示山与观赏者的相对距离,1≤z≤m,z值越小,越接近观看者。更近的山脉隐藏了更远的山。
  • T是树线的高度。山的一侧到树线应该充满树木,代表ASCII字符Y
  • S是雪线的高度。在雪线之上的山的一侧应该充满雪,代表ASCII字符*

每座山的底部水平延伸不会超过0或200;您可以假设0≤x−h和−。每座山的高度不超过100,所以所有的山脉都可以在100×200格栅内。雪和树不会重叠或超过山的高度;你可以假设0≤t≤s≤h。所有的数字都是非负的,所有的z值都是唯一的。

输出

输出应由指定山脉的ASCII绘图组成。每座山的形状都是三角形的,其两侧使用/\字符绘制。例如,这里有一座海拔4度的山:

代码语言:javascript
复制
   /\
  /  \
 /    \
/      \

这座山的x坐标为4,因为从左缘到山顶的水平距离是4个单位。

树和雪应该填满山的内部,但不能遮掩山的两侧。例如,这里有一座高度为6,树高2,雪线高度3的山:

代码语言:javascript
复制
     /\
    /**\
   /****\
  /      \
 /YYYYYYYY\
/YYYYYYYYYY\

也就是说,树从山的底部延伸到两个单位的高度,雪从三个单位的高度开始,延伸到山顶。

具有较小z坐标的山脉可能隐藏具有较大z坐标的全部或部分山区,请参见下面的第三个示例输入/输出。

前导空格很重要,并应按绘制的山脉的x位置和宽度指定。允许前导/尾随换行符,以及每一行后面的任何空格。

示例

(8、5、1、2、3)

代码语言:javascript
复制
       /\
      /**\
     /    \
    /YYYYYY\
   /YYYYYYYY\

(2、2、1、0、1)

代码语言:javascript
复制
 /\
/  \

(8、5、2、2、3)、(2、2、1、0、1)、(9、8、3、1、4)、(17、4、4、4)

代码语言:javascript
复制
        /\
       /**\
      /****\
     /*/\***\
    / /**\   \  /\
   / /    \   \/YY\
 /\ /YYYYYY\   \YYY\
/  \YYYYYYYY\YYY\YYY\

如果你发现其他有趣的例子,请分享你的答案!

EN

回答 2

Code Golf用户

发布于 2018-04-17 21:15:34

木炭,79字节

代码语言:javascript
复制
  AθWθ«≔⊟Φθ⁼§κ²⌈Eθ§μ²ι≔Φθ¬⁼κιθ≔§ι¹ηJ§ι⁰±η≔⟦§ι⁴⁻η§ι³η⟧ζFY *«≔⊟ζεG↘ε←⊗ε↗εκ→»P↘η←↙η

在网上试试!链接是详细的代码版本。注:前导空间用于强制所需的缩进。解释:

代码语言:javascript
复制
AθWθ«

循环,而输入数组不是空的。

代码语言:javascript
复制
≔⊟Φθ⁼§κ²⌈Eθ§μ²ι

找到排列中最遥远的山。

代码语言:javascript
复制
≔Φθ¬⁼κιθ

从数组中删除它。

代码语言:javascript
复制
≔§ι¹η

找到山的高度。

代码语言:javascript
复制
J§ι⁰±η

跳到山顶。

代码语言:javascript
复制
≔⟦§ι⁴⁻η§ι³η⟧ζ

得到雪线,树线和高度。

代码语言:javascript
复制
FY *«

环抱着树木,光秃秃的山和雪。

代码语言:javascript
复制
≔⊟ζεG↘ε←⊗ε↗εκ→»

画一个所需高度的梯形图。

代码语言:javascript
复制
P↘η←↙η

画山的两旁。

票数 2
EN

Code Golf用户

发布于 2018-04-18 10:39:55

红宝石,133个字节

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

在网上试试!

匿名兰博达。将输入作为山脉参数数组的数组,返回字符串数组。

漫游

代码语言:javascript
复制
->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 
}
票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

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

复制
相关文章

相似问题

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