站模型是用来记录某一地点和时间的天气的图表。
您必须编写尽可能最短的代码,以图形化的方式输出一个简化的(稍后解释)站点模型。

蜱是风倒钩上的一条线。一个50节的蜱是一个三角形。10节蜱是一条线。5节蜱的长度是10节蜱的一半。风速是通过对滴答数的求和来表示的,只要有可能就使用最大的值符号。滴答从线的末端开始,并按向圆圈大小的降序排列。一个例外是5节,那里的滴答被放置在离终点很近的地方(为了避免10节的模糊)。
这里有一些伪码来计算所需的蜱数。
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节
发布于 2014-09-06 00:55:22
http://www.bbcbasic.co.uk/bbcwin/bbcwin.html仿真器
解析方向是一种肮脏的攻击。我只需在笛卡儿网格中为每一个字母输入一步。它们不会被回放到屏幕上,当接收到一个空格时,输入就会终止。
因为这是codegolf,所以我不去规范方向向量。因此,绘制的符号大小取决于输入的字符数。然而,所有投入的比例是相同的。另外,对于三个字母的输入,角度比它应该是离对角线近4度。例如,NNE为atan(0.5)=26.57度,而不是正确的22.5度,但它几乎不明显。这两个点可以修正20-30个字符.
在方向之后,速度被输入(这会被回放到屏幕上,并以换行符结束)。
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.所有的测试用例都会显示出来,另外还有两个用来说明两个字母的说明:
50 knots, NNE
0 knots
12 knots S
112 knots WNW
195 knots SE
5 knots SW为了将它们全部显示在一起,我没有在两次运行之间清除屏幕。可以看到箭头的不同大小(但比例恒定)。

https://codegolf.stackexchange.com/questions/37304
复制相似问题