编写此ruby段的最短可能方式

时间:2015-10-01 22:05:34

标签: ruby

重写下面代码段的最短方法是什么?

print @b > @d ? ( @d+=1 ;"S" ) : @b < @d ? ( @d -= 1; "N" ) : "";

print @a > @c ? ( @c+=1 ; "E") : @a < @c ? ( @c -= 1; "W" ) : "";

puts" " 

第一行和第二行在结构上是相同的但具有不同的变量,因此如果对象要将字节数保持为最小,则某种宏扩展可能是有用的。 ruby是否支持任何宏扩展样式语法?像c或c ++这样的东西。

我发现这个fizzbuzz挑战的例子鼓舞了短代码https://www.ruby-forum.com/topic/99787,但并不完全理解语法。

编辑:对于Cary和其他人提供一个完整的上下文,我的程序的完整代码如下一些建议。:

@a,@b,@c,@d=gets.split(" ").collect{|x|x.to_i}; 
do 
print"SN[t=@b<=>@d,1];
@d+=t print"EW"[t=@a<=>@c,1];
@c+=t 
end

2 个答案:

答案 0 :(得分:5)

欢迎来到Code Golf!这是一种可能性:

print ['',?S,?N][t=@b<=>@d]; @d+=t
puts  ['',?E,?W][t=@a<=>@c]+' '; @c+=t

编辑从@Steve窃取想法。

答案 1 :(得分:2)

你可以试试这个......

print " SN"[@b<=>@d];@d+=@b<=>@d
puts " EW"[@a<=>@c];@c+=@a<=>@c

编辑从Cary窃取想法

print " SN"[t=@b<=>@d];@d+=t
puts " EW"[t=@a<=>@c];@c+=t