首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生成一个简单的站点模型

生成一个简单的站点模型
EN

Code Golf用户
提问于 2014-09-04 13:55:41
回答 1查看 542关注 0票数 7

站模型是用来记录某一地点和时间的天气的图表。

挑战

您必须编写尽可能最短的代码,以图形化的方式输出一个简化的(稍后解释)站点模型。

Ticks

蜱是风倒钩上的一条线。一个50节的蜱是一个三角形。10节蜱是一条线。5节蜱的长度是10节蜱的一半。风速是通过对滴答数的求和来表示的,只要有可能就使用最大的值符号。滴答从线的末端开始,并按向圆圈大小的降序排列。一个例外是5节,那里的滴答被放置在离终点很近的地方(为了避免10节的模糊)。

这里有一些伪码来计算所需的蜱数。

代码语言:javascript
运行
复制
set f=int(s/5)
set t=int(f/2)
f=f-(t*2)
set ft = int(t/5)
t=t-(ft*5)

其中f为5节蜱数,t为10节蜱数,ft为50节蜱数。(这回舍入到最近的5,但您的代码应该向上或向下,无论哪个更近。)请注意,只有一个5节滴答。

其他

你只能在你的站台模型上显示两样东西:风速和方向。这些必须由用户提供:不允许硬编码。风速必须是以节为单位的正整数,而风向必须是字母(例如NNE、W、ESE)。指南针的16个点将被考虑(最多三个字母)。请参阅http://en.wikipedia.org/wiki/Points_的_这个_罗盘

50节的节拍必须和上面的图片一样。

设置云量以清除(圆圈必须是空的)。允许的最高风速是201节(把风速提高到200海里)。

由于风力只增加了5倍,所以所有风速都是最接近的5倍。

和往常一样,因为这是代码高尔夫,最短的代码就赢了。

示例

下面所有的云层都是透明的。

20节,西南角(225°)

15节,N (0°)

测试用例

50节,NNE

零节

S 12节

西经112节

EN

回答 1

Code Golf用户

回答已采纳

发布于 2014-09-06 00:55:22

BBC,273个ASCII字符(尚未打金)

http://www.bbcbasic.co.uk/bbcwin/bbcwin.html仿真器

解析方向是一种肮脏的攻击。我只需在笛卡儿网格中为每一个字母输入一步。它们不会被回放到屏幕上,当接收到一个空格时,输入就会终止。

因为这是codegolf,所以我不去规范方向向量。因此,绘制的符号大小取决于输入的字符数。然而,所有投入的比例是相同的。另外,对于三个字母的输入,角度比它应该是离对角线近4度。例如,NNE为atan(0.5)=26.57度,而不是正确的22.5度,但它几乎不明显。这两个点可以修正20-30个字符.

在方向之后,速度被输入(这会被回放到屏幕上,并以换行符结束)。

代码语言:javascript
运行
复制
  x=0
  y=0
  REPEAT
    d=GET                             :REM get character from keyboard
    x+=(d=87)-(d=69)                  :REM d=87 evaluates to -1 if "W", d=69 is -1 if "E"
    y+=(d=83)-(d=78)                  :REM d=83 evaluates to -1 if "S", d=69 is -1 if "N"
  UNTILd=32
  x*=20                               :REM boost the sizes of x and y
  y*=20                               :REM normalization code would go here
  INPUTs
  s=INT(s/5+.5)                       :REM divide s by 5 and round to nearest int. 50-tick=10, 10-tick=2, 5-tick=1 
  MOVE600,500                         :REM move to centre of circle
  PLOT145,x,y                         :REM draw circle centred at 600,500 with 600+x,500+y on its edge. cursor remains at the latter position.
  IFs=0END                            :REM exit if wind=0
  DRAWBY 9*x,9*y                      :REM draw the shaft of the arrow, 9 units long, from current position
  IFs>1 MOVEBY x,y                    :REM if rounded windspeed >5 move one more space out.
  WHILEs>1                            :REM while there are still 50-ticks and 10-ticks to draw
    MOVEBY 2*y,-2*x                   :REM move 2 units clockwise of the shaft
    PLOT1-(s>9)*80,-2*y-x,2*x-y       :REM draw a diagonal line back to the shaft. If s is 10 or over, plot mode 81 will take the last 2 positions of the graphics cursor and draw a triangle. 
    s-=2-(s>9)*8                      :REM Decrement s by 2 or 10, according to the last barb drawn. 
  ENDWHILE
  IFs MOVEBY -x,-y:DRAWBY x/2+y,y/2-x :REM If s=1 draw the 5-tick. Unlike the other ticks, it is drawn from its root outwards.

输出

所有的测试用例都会显示出来,另外还有两个用来说明两个字母的说明:

代码语言:javascript
运行
复制
50 knots, NNE
0 knots
12 knots S
112 knots WNW
195 knots SE
5 knots SW

为了将它们全部显示在一起,我没有在两次运行之间清除屏幕。可以看到箭头的不同大小(但比例恒定)。

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

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

复制
相关文章

相似问题

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